基本介绍(简单记录,有不正确的地方请指出)
功能:Analysis表示分析结果,Controller表示模拟测试场景,Virtual User Generator表示编写脚本
![12966103-4af2edb797f26e7b.png](https://i-blog.csdnimg.cn/blog_migrate/c2f177ce552c35b9bfb5eb7a39964ef9.webp?x-image-process=image/format,png)
Virtual User Generator介绍
一、脚本创建
第一步)
![12966103-77195b200d1f4ae2.png](https://i-blog.csdnimg.cn/blog_migrate/9f85f320cb649e706c259a295bd5e3b3.webp?x-image-process=image/format,png)
第二步)选择需要的类型进行创建
![12966103-9ca05ec6f275fae2.png](https://i-blog.csdnimg.cn/blog_migrate/52450d97e4f34b9809e1eca95c902109.webp?x-image-process=image/format,png)
第三步)创建成功之后会有init、action、end三个模块,分别对应初始化、逻辑、退出
![12966103-a533a07c83107582.png](https://i-blog.csdnimg.cn/blog_migrate/5d06a38ec0eed45993e1b8b708e5b7ba.webp?x-image-process=image/format,png)
二、init、action、end三模块说明
init表示初始化,意思是运行的时候首先执行此模块的代码(主要用于一些全局变量的定义,方便后面action模块直接使用)
action表示逻辑部分,简单理解的话,无特别之处,也是写代码的地方。严格来讲,主要业务代码应该写在此模块
end退出时执行的代码部分
主要代码可以写在这三个模块中的任何一个模块中,一样可以实现功能,这里区分三个模块只是让代码更简单明了。init只考虑初始化相关的代码,action集中处理业务代码,end则是结束代码(比如说清除数据、缓存之类),以此完成一个完成的流程又很好地区分独立。
以下说一个方便理解三模块的生活例子:比如说我们去吃自助餐,首先我们要报人数、交钱之类的,这个动作就可以对应init模块,在店里里面吃东西,登记的人可以不停 拿菜>>>吃菜 就相当于action模块所有的实际执行都在action里面,最后吃饱离开就相当于end。表示一个流程的完成
三、代码说明
Action()
{
//lr_rendezvous("集合点"); //设置集合点
web_custom_request("get_test",
"URL=http://tp.chinafintech.com.cn/api/rtps/pay/query",
"Method=post",
"Resource=0",
"RecContentType=application/json",
"Referer=",
"Mode=HTTP",
"EncType=application/json",
"Body={\"trade_sdk_no\":\"10001661302017110790000001\"}",
LAST);
return 0;
}
lr_rendezvous("集合点");表示用户数到达指定之后一起提交同时提交,一般用于测试峰值*(如500个用户同时提交的场景)
URL参数表示发送的url
Method参数表示请求方式(包括post和get)
RecContentType表示发送参数的参数格式类型
Body表示要发送的内容
如果服务器响应的中文值有乱码时,可以用一下代码进行转换响应值
web_reg_save_param("data","LB=","RB=","Search=All",LAST);//关联数据
lr_convert_string_encoding(lr_eval_string("{data}"),"utf-8","gb2312","enCodeAllresponse");//对关联数据进行转码
lr_output_message(lr_eval_string("{enCodeAllresponse}"));//输出转码后的数据
![12966103-8c07c6e1ced89c59.png](https://i-blog.csdnimg.cn/blog_migrate/8f9d1f7bd7a8c18ef9be87eb866d51ee.webp?x-image-process=image/format,png)
正确执行结果
![12966103-91acd2d665defd95.png](https://i-blog.csdnimg.cn/blog_migrate/6134a5e9ab0ef3b3a71f688a8f45b55a.webp?x-image-process=image/format,png)
参数替换
第一步)可以使用动态参数,包括文件中读取、数据库中读取、XML、随机数等
![12966103-c7e90969701b3be6.png](https://i-blog.csdnimg.cn/blog_migrate/04e77411cb5f755fda4e885d47a52826.webp?x-image-process=image/format,png)
第二步)根据需要调整参数类型
![12966103-5ef6013abb3ae069.png](https://i-blog.csdnimg.cn/blog_migrate/56dc03917ab31f15e17a9950fabf7d35.webp?x-image-process=image/format,png)
第三步)再次运行显示替换参数
![12966103-b9abca119eb8b207.png](https://i-blog.csdnimg.cn/blog_migrate/ed2c938159bf73807a9fa02addb7da8f.webp?x-image-process=image/format,png)
第四步)文件有两列数据,每行数据是对应关系,如何正确取这两个参数呢?
第一行的数据同上(重新设置分隔符按tab分隔),主要讲第二个数据如何取
![12966103-147533fae4db4e35.png](https://i-blog.csdnimg.cn/blog_migrate/dcb597663e81f4db3fc00406f742362b.webp?x-image-process=image/format,png)
运行结果,参数已经正确替换并前后匹配
![12966103-ac9809a378e78b71.png](https://i-blog.csdnimg.cn/blog_migrate/13cd1cca4ee3e4b4159f001a105de631.webp?x-image-process=image/format,png)
![12966103-bf5a214db8d47021.png](https://i-blog.csdnimg.cn/blog_migrate/cf565e77fa40cf0fe4126048635da157.webp?x-image-process=image/format,png)
参数文件截图
![12966103-cb34a4a379a55872.png](https://i-blog.csdnimg.cn/blog_migrate/cbf848b6f77b5422426952c699f72bbf.webp?x-image-process=image/format,png)
脚本设置
一般常用设置为运行时设置,点击 回放>运行时设置进入
![12966103-c79da92284860cb0.png](https://i-blog.csdnimg.cn/blog_migrate/5b1e164f52272604409324076c8c6c19.webp?x-image-process=image/format,png)
迭代次数各个模块迭代执行的次数
![12966103-bb618cee2a31a494.png](https://i-blog.csdnimg.cn/blog_migrate/c7ee5926128c1490559f9f879542648a.webp?x-image-process=image/format,png)
迭代间隔时间的设置
![12966103-f03e0820bf9335bf.png](https://i-blog.csdnimg.cn/blog_migrate/f3af278636f65972e957ad29df1c7a1a.webp?x-image-process=image/format,png)
日志设置
注意,标准日志没有参数替换(用了变量参数,多用于调试时看是否取对参数)显示
![12966103-cc904ce84969e964.png](https://i-blog.csdnimg.cn/blog_migrate/615e1f052955f071ac2452f1030e0304.webp?x-image-process=image/format,png)
思考时间
比如我们实际发空间动态时,在输入了内容之后不是立马点击发布,会查看一下,这个思考时间就是更加模拟实际情况(思考时间有多种概念,在ui自动化测试的时候,也会用到类似的,页面加载需要时间,如果不设置等待时间就会存在页面上一些控件未加载出来就去获取了,就会出现异常)。
![12966103-8f3f686cd2a34f2f.png](https://i-blog.csdnimg.cn/blog_migrate/0234b893b4401ccc23e4c7ca903c1be7.webp?x-image-process=image/format,png)
发送错误时继续执行
![12966103-6428bdcc2fee3f7b.png](https://i-blog.csdnimg.cn/blog_migrate/0829482652ff2d9b0f49926414b3ca98.webp?x-image-process=image/format,png)