其实看LR已经很久了,每次看到参数化的取值更新时,都没有看透,了解个大概就为止了,也确实挺搞脑子的。

现在理解下来

分成2部分

取值方式  Select next row

如何从数据列表中取值

Sequential  按着行顺序来取

Random  随机取

Unique  取的时候会检测保证取出的数据唯一,没有被取过

更新的时机  Update value on

也就是什么时候触发select next row

Each Iteration  每次迭代时,取数据。每次迭代时就触发select next row,即时没有被取值。

Each Occurence  每次遇到参数时,取数据

Once  只取一次数据,之后都用这个数据

其中最搞的就是Unique, 而这种方式用到的还很多,比如注册时,要求用户名是不能一样的

当选择Unique时,会多出一处下拉选择 When out value,因为取值需要唯一,当取值的次数小于数据量时,就会出现没有数据的情况,提供3种处理方式

1.放弃这个用户(用得最多)

2.再去循环回到第一行数据(如果是多Vusers手动分配过Block的话,只会在分配的那些数据里循环)

3.同个用户内出现没数据了,就取同个用户最后参数取值的那个值,之后的用户应为没有数据则报错

而Unique 碰到有迭代次数,多个Vusers时,就挺复杂了

比如 : 参数化数据源里有数据A,B,C,D,E 5条数据,另外有Vuser1, Vuser2,Vuser3,Vuser4,脚本迭代2次。

要保证每次参数取数据时的数据唯一性,怎么分配数据就成了关键。(脚本中同个多处使用同个参数的话更麻烦,觉得unique时尽量避免多处使用同参数)

Unique + Each Iteration:这时会出现数据分配方式选择,可以由系统自动分配,也可以手动分配

系统分配的话,会保证至少每个用户有1条数据,也就是说需要准备的数据量为 Vuser数 * 迭代数

如果设置这种组合,例子场景会如下分配数据(when out value 选择 continue with last value)

Vuser1    Vuser2     Vuser3    Vuser4

A,B      C,D        E,E       报错

手动分配的话,需要准备的数据量则为 Vuser数*手动分配的Block size,一般Block size肯定要大于迭代数

如果上例手动选择Block size 3

则数据分配情况为

Vuser1    Vuser2     Vuser3    Vuser4

A,B,C    D,E       报错       报错

因为迭代2次,且脚本中就有一处取这个参数的话,所以Vuser1真正用的数据只有A,B。 C则未被使用

Unique + Each Occurence:这时手动分配每个用户多少数据选项灰色,由系统自动分配

Unique + Once:最难以理解的,系统为每个Vuser分配一个唯一的数据,不管脚本迭代几次,同参数有几个,这个Vuser就一直用这个数据

还有2个函数,可以将参数数据下移一行。

Action()
{
lr_output_message("Param1 %s, Param2 %s", lr_eval_string("{Param1}"), lr_eval_string("{Param2}")); lr_advance_param("Param1"); lr_output_message("Param1 %s, Param2 %s", lr_eval_string("{Param1}"), lr_eval_string("{Param2}")); return ;
}

Param1, Param2 都存在test.dat文件下

Param1  Param2

1111    1111

2222    2222

3333    3333

lr_advance_param("paramname"); 参数是"参数名"。 一般2个参数存在同个dat文件内,在迭代时,需要错行取值的时候,就可以用这个函数。这样的话,被advance的参数即使在each iteration的更新方式下,同个迭代内也会下移一行数据,而未被advance的参数则要在迭代时才更新。

Starting action Action.
Action.c(3): Param1 1111, Param2 1111
Action.c(7): Param1 2222, Param2 1111
Ending action Action.

但如果Param2 的取值方式选择为 sameline as Param1的话,则会和Param1 一起advance

Action()
{
lr_output_message(lr_eval_string("{NewParam}"));
lr_next_row(NewParam,dat);
lr_output_message(lr_eval_string("{NewParam}"));
return ;
}

lr_next_row(paramname.dat);  参数是 参数所存的dat文件。比each iteration优先级高,即在上面这个函数中,即使update value on each iteration, 但在函数的作用下,同个迭代内,也会下移一行数据。

LoadRunner参数化之数据取值和更新方式的更多相关文章

  1. LoadRunner中,参数化时Unique取值方式的理解

    LoadRunner中,参数化时Unique取值方式的理解 2012年10月15日 18:10:36 瑞秋 阅读数:10028   在LoadRunner中进行参数化时,Parameter的取值设置有 ...

  2. jmeter 参数化大数据取唯一值方式

    jmeter 参数化大数据取唯一值方式 一.用时间函数: 因为时间戳永远没有重复,jmeter参数化,而且要取唯一值,可以考虑用时间函数加上其他函数一起: # 以13位的时间戳作为 userID no ...

  3. loadrunner动态从mysql取值

    loadrunner动态从mysql取值 [需要下载跟数据库服务器一致的dll,32位或64位] loadrunner中有参数化从数据库中取值,但是只是静态的,对于一些要实时取值的数据就game ov ...

  4. locust参数化(数据库取值)

    locust参数化(数据库取值) 基于上一篇参数化的梳理,本篇用另一种方法从数据库中取出这100个用户来登录 思路:在 TaskSet 中的 on_start 方法表示执行任务前的操作,可以将数据库取 ...

  5. jemter参数化是如何取值的?(数据分配)

    参数化文件数据 脚本设置 ${__threadNum}是线程号,${n}是取值 测试结果 第一次 线程1取值:1,4,7,10,12 线程2取值:2,3,6,11,16 线程3取值:5,9,15,17 ...

  6. loadrunner动态从mysql取值 [需要下载跟数据库服务器一致的dll,32位或64位]

    loadrunner中有参数化从数据库中取值,但是只是静态的,对于一些要实时取值的数据就game over了,比如取短信验证码,因为MySQL中有一个libmysql.dll,里面提供了可以操作数据库 ...

  7. 实现Django ORM admin view中model字段choices取值自动更新的一种方法

    有两个表,一个是记录网站信息的site表,结构如下: CREATE TABLE `site` ( `id` ) unsigned NOT NULL AUTO_INCREMENT, `name` ) N ...

  8. jmeter读取文件进行参数化时随机取值实现

    jmeter能用来做参数化的组件有几个,但是都没有随机取值的功能,遇到随机取值的需求怎么办呢? 突发奇想,可以用函数_StringFromFile来实现,先来介绍下此函数: 此函数位于函数助手中, 函 ...

  9. LoadRunner可以把关联取值当作检查点来使用

    在性能测试过程中,很多人都会想通过使用检查点来检查系统响应是否正常,LR的51Testing软件测试网E$S ]:x(d a6h.G \(y 检查点对“死”的,静态的 可以做到检查作业,但是对于动态时 ...

随机推荐

  1. ios Swift 一些注意事项

    func test(one:NSString) -> NSString{ return "aaa" } func test(one:Int) -> NSString{ ...

  2. DataTemplate应用

    在WPF中,决定数据外观的是DataTemplate,即DataTemplate是数据内容的表现形式,一条数据显示成什么样子,是简单的文本还是直观的图形,就是由DataTemplate决定的.下面通过 ...

  3. Delphi xe5 手机开发经验(新手级别)

    Delphi xe5 手机开发经验(新手级别) http://diybbs.zol.com.cn/1/34037_699.html http://www.delphitop.com/html/jiqi ...

  4. zmqsend for FFmpeg

    编译 FFmpeg 时,配置中添加 --enable-libzmq 就可以通过 tcp 通讯给 FFmpeg 发送命令 Usage: zmqsend [-h ip:port] TARGET COMMA ...

  5. yii框架详解 之 国际化 (I18N)

    我们要开启组件中们关于语言的配置,默认的就是CPhpMessageSource,也可以改为其他的方式. #组件配置中  'messages' => array(     'class'=> ...

  6. webpack学习笔记一

    主要参考: https://blog.madewithlove.be/post/webpack-your-bags/ 起因: 作为运维狗, 对前端一窍不通但心向往之, 最近做一个Dashboard, ...

  7. [第三方]SDWebImage获取网络图片控件的用法

    #import "UIImageView+WebCache.h" @interface WeatherViewController ()<UISearchBarDelegat ...

  8. LeetCode 202 Happy Number

    Problem: Write an algorithm to determine if a number is "happy". A happy number is a numbe ...

  9. css 自动换行 [英文、数字、中文]

    white-space:normal;overflow: auto;table-layout:fixed; word-break: break-all;

  10. 关于Hibernate的关联映射

    何为关联映射 由于数据库的表与表之间存在的管理关系,可以分为一对一,一对多和多对多关联,一般情况下,在数据库设计中是通过表的外键来建立各种关系的,在Hibernate中则把数据库表与表之间的关系数据映 ...