其实看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中的addChildViewController 和 android中的fragment

    刚才突然感觉这2个东西的功能特别像,记录一下,待研究!

  2. 搭建Solr集群的推荐方案

    之前介绍过2篇SolrCloud的部署流程,第一个是使用安装脚本的方式进行抽取安装,启动比较方便,但是会创建多个目录,感觉比较乱:第二个是官方教程上提供的方法,使用比较简单,直接释放压缩包即可,并且启 ...

  3. 事件查看器事件ID部分说明

    事件查看器从简单的查看电脑登录信息到检查系统是否出现错误,是否被入侵都有着很重要的作用,Microsoft为了简便,采用事件ID来代表一些信息,下面是我从Microsoft找来的WIN2003的对应关 ...

  4. jquery 中的一写常用方法

    $('form').submit(); // 表单提交 window.parent.location.reload(); // 子窗口刷新父页面 window.location.reload(); / ...

  5. 【python】下载远程内容到本地

    来源:http://www.jb51.net/article/42630.htm urllib模块 urlretrieve方法 urllib.urlretrieve(url[, filename[, ...

  6. WinForm轻松实现自定义分页 (转载)

    转载至http://xuzhihong1987.blog.163.com/blog/static/267315872011315114240140/ 以前都是做web开发,最近接触了下WinForm, ...

  7. IOS - 屏幕适配

    原文:Beginning Auto Layout Tutorial in iOS 7: Part 1 感谢翻译小组成员@answer-huang(博客)热心翻译.如果您有不错的原创或译文,欢迎提交给我 ...

  8. Tmux的安装、使用与配置

    tmux 安装.使用.配置 因上线需求,故需要使用tumx,方便上线 tmux功能 提供了强大的.易于使用的命令行界面 可横向.纵向分割窗口 窗格可以自由移动和调整大小,或者直接利用四个预设布局之一 ...

  9. October 1st 2016 Week 40th Saturday

    Autumn, the year's last, loveliest smile. 秋,四季流转中的最后一抹,也是最美的那一抹微笑. I love autumn because it is the h ...

  10. 前端性能优化(DOM篇)

    原文链接:https://segmentfault.com/a/1190000000490322 缓存DOM对象 JavaScript的DOM操作可以说是JavaScript最重要的功能,我们经常要根 ...