其实看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. 《Java多线程核心技术》读书摘要

    Chapter1: 进程是操作系统管理的基本单元,线程是CPU调到的基本单元. 调用myThread.run()方法,JVM不会生成新的线程,myThread.start()方法调用两次JVM会报错. ...

  2. Effective C++ -----条款26:尽可能延后变量定义式的出现时间

    尽可能延后变量定义式的出现.这样做可增加程序的清晰度并改善程序效率.

  3. codeforces 425B Sereja and Table (枚举、位图)

    输入n*m的01矩阵.以及k. n,m<=100,k<=10 问修改至多k个,使得矩阵内的各连通块(连着的0或1构成连通块)都是矩形,且不含另外的数字(边界为0(1)的矩形内不含1(0)) ...

  4. NHibernate实战详解(一)领域模型设计

    关于NHibernate的资料本身就不多,中文的就更少了,好在有一些翻译文章含金量很高,另外NHibernate与Hibernate的使用方式可谓神似,所以也有不少经验可以去参考Hibernate. ...

  5. LeetCode 217 Contains Duplicate

    Problem: Given an array of integers, find if the array contains any duplicates. Your function should ...

  6. py随笔

    while true,无限循环 str.isdigit判断是不是数字 +只能在两个两个相同的类型之间执行 iter(i)将i加入迭代器

  7. DOM动画效果基础入门

    一.什么是DOM? Document Object Model文档对象模型 当创建一个网页并把它加载到web浏览器中时,如果没有document(文档): DOM根据你编写的网页文档创建一个文档对象 ...

  8. [Java 基础] 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    reference : http://www.cnblogs.com/linjiqin/archive/2013/05/30/3108188.html 在Java多线程应用中,队列的使用率很高,多数生 ...

  9. 简单获取input file 选中的图片,并在一个div的img里面赋值src实现预览图片

    html代码: <input id="file_upload" type="file" /> <div class="image_c ...

  10. ajax实例1

    前台: function getDetail(index){ $.post("<%=request.getContextPath() %>/member/dbcenter!get ...