LoadRunner中的事务和参数化

2017-03-10  尹文姣 

这些是LoadRunner中的事务和参数化最基础的一些知识,和大家分享分享

1:添加事务:lr_start_transactionlr_end_transaction,事务必须成对出现

2:事务的4个状态:LR_PASS(通过),LR_FAIL(失败),LR_AUTO(状态被自动设置),LR_STOP(停止)

事务判断状态:以Pass状态为成功


 

事务判断状态:以Fail状态为失败


手动设置状态:如果代码很多,if执行到lr_set_transaction_status_by_name的时候,手动强制性的将事务设置什么状态,就是什么状态,但最后都会执行LR_AUTO


 

3:事务需要注意的

1)事务中不要插入日志函数

2)不要插入集合点函数,

3)尽量不要插入思考时间

 

参数化:

1、脚本开发遇到的问题:

1)被业务场景所迫:所有用户都输入相同的数据,不能体现出真实的业务环境(搜索操作)

2)被系统体系所迫:存在缓存,不能体现出真正的性能能

3)被系统业务约束所迫:有些系统禁止一个用户多次登录的系统,也就严重到无法测试的地步

 大部分情况下只有函数的参数才能参数化,但也不是所以函数的参数都可以参数化

2、需要参数化的:

1、登录认证信息

2、一些和时间相关的,违反时间约束的

3、一些受其他自己约束的

4、一些来自于其他数据源(如:数据库)

5、其他在运行过程中需要变动的

3参数化和变量的区别

1)参数作用域远远大于局部变量,在一个action中的参数可以再另一个函数使用,而局部变量不行,除非是全局变量。

2、参数和变量的转换

1)参数转换成变量 lr_eval_string

2)变量转换成参数 lr_save_string

3、参数化取值方法:

1、select next row:获取下一行数据的方式

2、Update value on:重新获取下一个参数的时机(条件)

LR的参数的取值,和select next rowupdate value on的设置都有密不可分的关系。下表给出了select next row和update value on不同的设置,对于LR的参数取值的结果将不同,给出了详细的描述。

 

Select next row

Update Value on

实际运行结果

Sequential

按次序的

each iteration

在某次循环中所有用户取值相同。所有用户第一次循环取第一行值,第二次循环取第二行值

each occurrence

在某次循环中或者脚本中使用参数的地方,所有用户取值相同。脚本中出现要使用参数的话,参数值就更新一次,循环一次值再更新一次。

once

在所有的循环中所有用户取值相同。
所有的用户所有的循环中,只用一个值(即参数中的第一行值)

Random

随机抽取

each iteration

不同的用户,在不同的循环次数中,随机取值

each occurrence

不同的用户,脚本中出现要使用参数的话,随机取值一次,循环一次再随机取值一次

once

不同的用户,不管循环多少次,只随机取值一次。

Unique

唯一

each iteration

若选择手工自配参数,那LR按照每用户几个参数先分配参数,然后进行循环。
若选择自动分配参数:
Controlleredit schedulerun until comletion:按照循环次数先分配第一个VU(例如设置的循环次数为3,那分配给第一个VU 3个参数值),然后接下来的3个参数值分配给第二个VU,依次类推…...
Controlleredit schedulerun for:若选择自动分配,LR将按照用户数均分参数,剩余的参数不使用。

each occurrence

只能手工分配用户,给每个用户分配好X个参数后,在脚本中有参数的地方,就使用已经分配好的X个参数。

once

按照用户数分配给每个用户分配一个参数而已。以后的循环这个用户就使用这一个参数

数据:A、B、C
虚拟用户:Vuser1、Vuser2、Vuser3
脚本中参数出现三次,脚本迭代三次
怎样取下一行数据?
Sequential:顺序,所有虚拟用户按照顺序读取数据表
Random:随机,所有虚拟用户随机形式读取数据表
Unique:唯一,所有虚拟用户每次各取一值(不重复)
什么时候访问数据表完成数据更新?
Each iteration:每次迭代以后
Each occurrence:每次出现参数
Once:每出现一个虚拟用户

实例:
顺序
Sequential + Each iteration
第一次迭代 无论参数任何时候出现 Vuser1、Vuser2、Vuser3 取A
第二次迭代 无论参数任何时候出现 Vuser1、Vuser2、Vuser3 取B
第三次迭代 无论参数任何时候出现Vuser1、Vuser2、Vuser3 取C
Sequential + Each occurrence
N次迭代 参数第一次出现 Vuser1、Vuser2、Vuser3 取A
N次迭代 参数第二次出现 Vuser1、Vuser2、Vuser3 取B
N次迭代 参数第三次出现 Vuser1、Vuser2、Vuser3 取C
Sequential + Once
无论如何所有用户都取A

 

随机
Random + Each iteration
N次迭代 无论遇到该参数多少次 Vuser1都只取A,或者B,又或者C,本次迭代不再更新
N次迭代 无论遇到该参数多少次 Vuser2都只取A,或者B,又或者C,本次迭代不再更新
N次迭代 无论遇到该参数多少次 Vuser3都只取A,或者B,又或者C,本次迭代不再更新
N+1次迭代,每个Vuser重新随机抽取数据

Random + Each occurrence
N次迭代 第一次遇到该参数 Vuser1、Vuser2、Vuser3在A、B、C中随机抽取一个
N次迭代 第二次遇到该参数 Vuser1、Vuser2、Vuser3重新在A、B、C中随机抽取一个
N次迭代 第三次遇到该参数 Vuser1、Vuser2、Vuser3重新在A、B、C中随机抽取一个
N+1次迭代,每个Vuser继续保持每遇到一次参数就重新抽取一次数据
Random + Once
N次迭代 无论遇到该参数多少次 Vuser1都只取A,或者B,又或者C
N次迭代 无论遇到该参数多少次 Vuser2都只取A,或者B,又或者C
N次迭代 无论遇到该参数多少次 Vuser3都只取A,或者B,又或者C
N+1次迭代,每个Vuser不会重新抽取数据


唯一
注意:使用该Unique类型必须注意数据表有足够多的数。
比如Controller 中设定20 个虚拟用户进行5 次循环,那么编号为1 的虚拟用户取前5个数,编号为2 的虚拟用户取6-10 的数,依次类推,这样数据表中至少要有100个数据,否则Controller 运行过程中会返回一个错误。
因此以下例子在数据表中加入数据D、E、F、G、H、I。
Unique + Each iteration
第一次迭代 无论参数出现多少次 Vuser1取A Vuser2取D Vuser3取G
第二次迭代 无论参数出现多少次 Vuser1取B Vuser2取E Vuser3取H
第三次迭代 无论参数出现多少次 Vuser1取C Vuser2取F Vuser3取I
Unique + Each occurrence
第一次迭代 第一次出现该参数 Vuser1取A Vuser2取D Vuser3取G
第一次迭代 第二次出现该参数 Vuser1取B Vuser2取E Vuser3取H
第一次迭代 第三次出现该参数 Vuser1取C Vuser2取F Vuser3取I
Unique + Once
无论进行多少次迭代 无论参数任何时候出现 Vuser1取A Vuser2取B Vuser3取C

 

 

总结:

1、根据需要的参数获取方式设置不同的组合,满足你的需求

2select next row能随即尽量随机

3、使用不同用户登录一次使用 Unique + Once模式

 


585°/5819 人阅读/4 条评论 发表评论

邓智群  2017-03-12

受益,多多分享哦


尹文姣  2017-03-13

@邓智群 谢谢 以后我会多努力的


小窝  2017-03-13


机器猫  2017-03-20

mark.


登录 后发表评论