其实看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. redis 中文字符显示

    2015年5月20日 09:57:01 星期三 方法一: redis-cli -h --raw 方法二: linux 终端: echo -e "\xe7\xa5\x9e\xe6\xa3\x8 ...

  2. Lock+Condition 相对于 wait+notify 的一个优势案例分析

    问题的描述 启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18, ...

  3. Effective C++ -----条款17:以独立语句将newed对象置入智能指针

    以独立语句将newed对象存储于(置入)智能指针内.如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露.

  4. codeforces 495A. Digital Counter 解题报告

    题目链接:http://codeforces.com/problemset/problem/495/A 这个题目意思好绕好绕~~好绕~~~~~,昨天早上做得 virtual 看不懂,晚上继续看还是,差 ...

  5. 将jquery和公共样式缓存到localStorage,可以减少Http请求,从而优化页面加载时间

    以下代码: //入口函数 if (window.localStorage) { initJs(); initCss("css", "/gfdzp201508257998/ ...

  6. 【leetcode】Two Sum (easy)

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  7. 【linux】gcc命令

    来源:http://man.linuxde.net/gcc 语法 gcc(选项)(参数) 选项 -o:指定生成的输出文件: -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -wall:显示警 ...

  8. 【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句

    形式1 REGISTER("SAMPLE.DLL", "MyFunction", "AIC") 形式1等效 VBA语句 Declare Fu ...

  9. ios 中清除webView的缓存

    在UIWebView下,可以使用 [[NSURLCache sharedURLCache] removeAllCachedResponses];//清除缓存 来实现清除缓存,但当替换使用WKWebVi ...

  10. 在某公司时的java开发环境配置文档

    1 开发环境配置 1.1.  MyEclipse 配置 1.MyEclipse下载地址:\\server\共享文件\backup\MyEclipse9.0 2.修改工作空间编码为UTF-8,如下图 3 ...