这些是LoadRunner中的事务和参数化最基础的一些知识,和大家分享分享
1:添加事务:lr_start_transaction、lr_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 row和update 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按照每用户几个参数先分配参数,然后进行循环。 |
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、根据你需要的参数获取方式设置不同的组合,满足你的需求
2、select next row能随即尽量随机
3、使用不同用户登录一次使用 Unique + Once模式