Vuser 发生器定义为:
通过捕获客户端向服务器发送的HTTP请求,将这些请求录制成脚本,在回放时将捕获的http请求再次发送,以达到模拟客户行为的目的
,所以Vuser主要是生成客户行为的脚本.
脚本录制:
主要包括 四大步骤:计划,录制脚本,脚本增强和单机调试脚本.
1.计划
收集测试相关信息
这个阶段在我们项目被称为 写case 阶段, 把每个步骤都写的很清楚,这样BA (需求人员),AD(开发人员)都知道操作流程,
测试人员也有录制测试场景
我们公司case 模板如下, 可以参考下 :
写好之后要发给BA ,让他们去Review 看看是否符合客户场景,符合后然后上传到Case系统内备份.
2.录制脚本
录制虚拟用户脚本,这个过程一定要按照Case 执行,不能擅自更改,如果录制过程出问题,就需要重新来,录制过程中,要插入事务,一个step 一个事务,别忘啦要结束事务
3.脚本增强
这个就是调试的过程,需要运行 参数关联,参数化,检查点 .
4.调试脚本
运行脚本,至少要循环两次 可以在run time setting 里设置 .
录制的过程:
1.选择协议
在测试之前一定要知道被测产品所使用的协议, 如果自己不知道,最简单就是问开发,开发一定会知道的,自己不要猜测.
大部分都是 HTTP 协议,选择这个就行.
选择协议的方式:单协议脚本,多协议脚本 根据自己的需求进行选择.
2.Start Recording 对话框
Action Selection 这个是我们选择要把录制的脚本 放在哪个 Action ,我们整个流程都是分段的Action01,Action02 等, 这样有利于我们在控制器设计场景
Record 是指我们选择应用程序的类型, Web Browser 指的是B/S ,Windows Application 是指C/S 框架.
Application: 系统默认用的是IE ,如果想用Chrome ,就需要把它的exe 文件路径放到这里面.
URL Address: 首次打开的网页地址
Working Directory: 工作目录 ,默认为 LR 所在路径的Bin 目录.
3.开始录制脚本:
VuGen 作为代理来访问目标服务器,这样VuGen 就可以捕获客户端与服务器之间通过的数据包 .也是劫持数据的意思.
把数据包重新编辑下 变成API 函数,然后把函数插入VuGen 编辑器中.生成脚本.
我们在录制 选择Action 的原则是:
vuser_init 一般放登录部分,也就是登录一次就够
Action: 一般放业务场景,可以不停的循环的部分
vuser_end:放登出的部分.
4.在录制的时候会生成工具栏 ,如图:
这个工具栏里的图标的业务意思,自己查下,
当我们点击 stop 之后就会生成脚本.
结果如下:
封装http请求的函数.
4.Recording Options 设置
这里提供了两个大类的录制方式:
- HTML-based script基于HTML的脚本
这种方式录制出来的脚本是基于HTML基础的,为每个用户操作生成单独的步骤,这种脚本更容易理解和维护,也更容易处理关联。对于正常的浏览器应用程序,推荐使用HTML录制模式。
一般来说如果我们是标准使用IE访问的B/S架构,我们应该使用HTML-BASE下的A script. containing explicit URLs only方式来录制脚本,这种脚本基于URL请求完成,不会带有任何前后依赖的内容。
选择HTML Advanced,出现两种script type
A script describing user actions (web_link, web_submit_form)
脚本中的每一个函数直接对应着虚拟用户的一个动作,创建的函数主要有URL(Web_url)、link(Web_link)、image(Web_image)以及表单提交(Web_submit_form)等几类。
基于解释用户行为的脚本,注重描述用户做了什么操作类似于QTP,脚本简洁,基于用户操作模拟,浅显易懂,并且自身就包含了对象检查过程,无需校验
A script containing explicit URLs only (web_url, web_submit_data)
将所有的URL、link、image都用Web_url函数来统一处理,在表单提交时则用Web_submit_data来处理。这样做的结果是脚本没有前一种方式那么直观,但如果网页中存在较多相似类型的链接时,这样做更容易处理脚本中的参数化和关联问题。
基于URL请求的脚本录制类型,这种方式不考虑用户的操作,只考虑客户端发送的请求,注重于实际上系统做了什么。
- URL-based script基于URL的脚本
这种方式录制出来的脚本是基于URL请求的。如果我们是一个非IE标准的C/S架构,我们建议使用URL-BASE来录制脚本,这样我们可以确保不会遗漏任何HTTP请求。
这种是基于URL请求的脚本录制方式,我们会录制得到所有的http请求,导致脚本中包含了大量的web_url()函数Use web_custom_request only 自定义的http请求规则,更适合在自定义的http请求中进行二进制处理。采用这种方式生成脚本所有请求都生成web_custom_request () 函数。
对于web_link()、web_submit _form()等函数,需要前面页面的支持,也就是说必须先访问http://127.0.0.1:1080/WebTours/这个页面之后,才可以点击sign up now 按钮,如果不在http://127.0.0.1:1080/WebTours/这个页面,是无法点击sign up now 按钮的,包括web_submit _form()提交,也必须是在点击了sign up now 按钮之后的页面才可以提交。
而对于web_url(),web_submit _data()等函数则不需要要前面页面的支持,也就是说你可以直接访问http://127.0.0.1:1080/WebTours/login/p1 (相当于点击了sign up now ),而且还可以在当前页面进行提交。
两种录制模式的选择:
HTML-based优缺点:
(1)资源从内存中取出且在回放时下载。因此脚本更小且更容易阅读。
(2)由于只有较少的硬编码脚本,因此只有较少的动态值需要关联。
(3)可以插入图片检查之类的语句以检查结果是否正确。
(4)因为HTML模式回放时需要积极地解析返回的信息,因此它可能会比其他录制模式更加占用资源。
URL-based优缺点:
(1)适用于非browser的应用程序。
(2)录制来自sever的所有请求和资源,甚至抓取非HTML应用程序,因此需要做更多关联,脚本看起来也相当复杂。
综上,选择何种录制方式可以参考如下方案:
(1)如果应用是Web应用,首选是HTML-based录制模式;
(2)如果应用是使用HTTP协议的非Web应用,则首选URL-based录制模式;
(3)如果Web应用中使用了Java applet程序,且applet程序与服务器之间存在通信,则选用URL-based录制模式。
(4)程序使用了https 安全协议,使用 URL-based 模式,如果使用HTML 不能成功回放, 也要考虑改用URL-based 模式来录制.
(5)程序使用了JavaScript 要用URL-based 录制
针对非html的元素,录制时有三种方式:
1.Record within the current script step
录制的非HTML 资源, 不单独分开, 用 EXTRARES 表示 .
2.Record in separate steps and use concurrent groups
用并行组进行封装
格式为:
web_concurrent_start 和 web_concurrent_en 表示
我们都是用的这种
3.Do not record :不记录, 对于非HTML 元素不记录,暂时不推荐这个方法,因为非HTML 元素的加载也是消耗时间的.
5.Correlation 选项卡:
这个主要是为了关联属性进行设置, 关联有两种方式 第一 系统自带的内置关联规则,第二是自己新建关联规则.
如果上边两种方式都达不到,就需要自己人工进行替换,这个很繁琐.
6.Run Time Setting 选项卡
这个选项卡作用很大的,设置运行脚本迭代次数, 间隔实际,Think Time 时间
这里面注意Miscellaneous 这选项卡,里面有让选是 进程还是线程, 一般都是进程, 用进程可以在任务管理器可以看到,
进程名字为 mmdrv.exe ,可以计算出每台负载机最多可以并发多少虚拟用户数.
在log 选项一定要 选择 Extended log ,再选择 Parameter substitution
脚本完善
1.插入事务,
这个插入的事务名字 要和 case 的name 保持一致, 都是在脚本录制的时候就开始插入 事务 ,保证不会遗漏需要插入的事务点
插入事务 会引申 一个问题, 事务运行的成功和失败 是根据是否运行来判断, 如果运行失败他也是反映为pass , 如果解决这个问题呢,
答案是 使用检查点 ,这样才比较合理,
2.插入集合点
集合点 是为了真正的并发业务操作, 他会等所有的虚拟用户都完成了操作, 再同时触发需要压力的事务