1 响应内容的关联和截取
在全流程测试中会经常涉及对响应内容的关联和截取,主要涉及下面2个场景:
Ø 获取session或cookie信息作为后续请求的依赖条件。
比如在提交订单场景,如果要模拟在线用户提交订单对应的cookie必须包含对应的状态信息。这部分状态信息需要从服务器响应中截取出来,并在后续发送的请求中一并发送给服务端。
在LR中web_reg_save_param_ex可以满足大部分常用的内容截取场景,要求在请求的前面调用该API,输入左右边界即可将需要截取的内容输入到一个LR参数中。
其他的关联API如下,基本使用方法相同,主要区别是在一些特定响应内容结构需要一些更灵活的截取规则来提取所需的内容,比如正则表达式和Xpath等等。
Ø 获取上一步操作的业务流输出作为检查点或下一步业务操作的输入
一些较特别的场景可能单个API无法解决,此时需要结合C自带的字符串函数处理。
比如下面的华为IT系统最常见的工号查询接口返回的数据,有时包含工号有时包含工号和姓名。
在某个测试场景中需要提取所有的工号此时一般的左右边界关联可能无法处理,参考下面的方法。
截取结果如下
需要注意的是sscanf函数的格式化输出为%d仅对应一般的整形,如果对应的整形数字长度过大(长整形)可能需要使用%ld等其他的格式,否则会导致截取的数字不正确,这里是容易出Bug的地方需要注意。利用C自带的字符串处理函数可以适用更灵活的场景,但相对的脚本会稍微复杂一点。完整的API可以参考下面的列表。
2 业务流程中的时间和日期
在很多场景都会需要对测试脚本中的时间和日期进行修改,比如业务流程中日期相关的操作,一些资源的缓存标记等。
Ø 日期的递增
假设某个业务的请求参数涉及到日期,这个日期不能重复。在请求参数较少时可以简单的将参数+1即可,但如果需要较多的请求参数由于日期的特殊性无法使用类似lr_param_increment的方法,可使用lr_save_datetime进行处理。
虽然在API文档中没有说明按天递增如何传参,但根据lrun.h对该API的定义可知,第二个参数offset就是用来控制递增时间长度,测试脚本可以参考该定义灵活构造日期参数。
Ø 生成默认时间戳
web_save_timestamp_param("tStamp", LAST );
保存到tStamp参数。
Ø 生成指定格式时间戳
如这些样例无法匹配测试需求,可参考其他的时间相关API自行修改测试脚本。
3 缓存和会话状态加载
很多业务场景的测试都是在带缓存和会话状态的前提下执行。一个典型的场景是用户需要登录才能执行某些业务操作比如下订单,因此测试脚本一般会录制登录,然后再进行后续业务操作。
这种方法存在一些弊端,比如我的测试目的并不是登录而是下订单,由于登录模块的一些性能缺陷会导致返回会话状态出现异常缓慢等
利用web_dump_cache 和web_load_cache,可以在会话状态未过期的前提下跳过登录模块直接对被测业务进行压测。
需要注意的是,加载的cache中的状态信息在服务端必须存在,否则脚本会运行失败。因此一般会将应用服务器的会话超时时间适当加长以配合该API的使用。
4 加密解密签名
这里主要以RSA算法为例。在PTS支付接口测试中涉及到了请求参数的RSA签名(注意签名和加密并不完全是一回事),在所有需要规避伪造请求可能的业务场景中都可能会涉及到签名这个概念。
签名的业务模型如下:
1、甲方构造密钥对(公钥+私钥),公布公钥给乙方
2、甲方使用私钥对数据进行签名,然后将“签名+数据” 发送给乙方
3、乙方使用公钥+数字签名 验证数据
加密报文的构造和处理(基于javascrip的加密和解密)
这里使用的API库为https://github.com/wwwtyro/cryptico/
加载第三方js库
由于第三方库的api粒度较细且很多函数返回js对象无法在LR中传递,因此需要改造该库的入口。编辑api.js,在末尾添加3个直接返回文本的函数。
备注:该样例仅做调试用,实际测试时会直接使用服务端的公钥,到时该文件还需修改。
运行结果如下
如果是签名,则用法会有不同。
5 移动应用测试
下面将几种典型的移动应用的录制场景进行了总结,Vmall后续的移动应用测试任务可以参考这个表格使用对应的录制方法。
录制场景类型 |
适用条件 |
录制方法 |
代理录制 |
移动设备可以连接到相同的网络,应用支持代理设置。 |
在移动app中配置代理服务器,代理地址添加VuGenProxy的地址。 注意:如果录制包含ssl流量,需要在设备上安装LoadRunner Proxy SSL CA证书(访问http://lr_proxy_ip:80/proxyroot.cer) |
服务端录制 |
不能从真实的设备录制。设备、服务器和VuGen所在机器都在一个网络内,只需对一个服务器进行录制。 |
在服务端安装VuGen’s Mobile Sniffer Agent 填写服务端的Sniffer Agent地址 |
网络抓包生成 |
已经有现成的网络包,比如使用WireShark或tcpdump -s 0 -w xx.cap命令生成的pcap文件 |
使用流量分析选项录制 |
手机模拟器录制 |
不能从真实设备录制,测试范围仅限于安卓设备,有可用的安卓模拟器。 |
选择对应的模拟器后录制 |
手机上录制 |
被测设备是安卓且已经root |
在手机上安装LoadRunner Mobile Recorder,使用该app生成的pcap文件在VuGen中生成脚本。 |
6 浏览器模拟
Ø 不同浏览器的模拟
可以模拟的部分
User-Agent消息头:必须和所模拟的浏览器一致,可通过在不同的浏览器上查看httpwatch的抓包数据获取。
单域名连接数:一般旧版本的浏览器的单域名连接数配置的都比较低,当前流行的浏览器普遍将该限制放宽到6-8个连接。如果测试脚本使用默认的浏览器配置将导致并发的连接数过低和实际压力不符。注意下面截图中红框部分。
在你修改了浏览器模拟配置后(比如将浏览器版本由低改高),测试工具的行为会发生变化,你的测试结果也会产生改变。
不能模拟的部分:
在浏览器和Web应用的交互中,有些内容是无法用性能测试工具模拟的,即使想模拟也是