一、工具介绍
Jmeter是一款使用Java开发的,开源免费的,测试工具,主要用来做功能测试和性能测试。JMeter 用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的性能情况。
二、常用组件介绍
2.1 测试计划(Test Plan)
是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
默认打开时候就存在了,可以自定义容器的名称。
2.2 线程组(Thread Group)
代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
相关参数说明:
名称:为线程组起名字。
线程属性-线程数:设置发送请求的用户数目 ,即并发数,上图为100个。
线程属性-Ramp-Up Period(in second):线程间的时间间隔,单位是秒。即所有线程在多少时间内启动。
线程属性-循环次数:请求的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复指定的次数。
2.3 取样器(sampler)
定义实际的请求内容,被线程组包含,主要用HTTP请求。
相关参数说明:
名称:HTTP请求的名字。
Web服务器-服务器名称或IP、端口号、HTTP请求,脚本录制时自动添加。
也可以手动输入。
2.4 监听器(Listener)
常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。
结果树可以用于查看请求的状态,返回值等内容
聚合报告可以用于查看请求相应时间,发送、接受字节大小等数据
2.5 逻辑控制器(Logic Controller)
逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。常用的场景就是一个用户登陆之后,保持登陆状态,循环的做同样的报错(保存数据,查看数据,指定条件查询等)
上图的例子就是表示用10个并发用户,登录后通过循环控制器,分别执行100次保存交易及提交审批的操作。
2.6 断言(Assertions)
可以用来判断请求响应的结果是否如用户预期。这个可以判断请求是否成功,隔离失败请求。
目前用过的有响应断言。
2.7 前置处理器(Pre Processors)和后置处理器(Post Processors)
前置处理器(Pre Processors)和后置处理器(Post Processors)负责在生成请求之前和之后完成工作。
前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
我们主要在动态关联中用到后置处理器的正则表达式提取器,后面的例子会列举。
2.8 定时器(Timer)
定时器(Timer)负责定义请求之间的延迟间隔(相当于loadrunner的思考时间)。
三、脚本录制
3.1 添加代理
添加组件>>代理服务器
3.2 本地设置代理
以Google Chrome为例
设置完成后,使用Google Chrome 访问指定地址,相关请求就会全部录制下来
注意,这里录制的脚本是每一次请求的,包括获取所有的图片,js,html网页资源,都会包括在里面,可以在代理界面对录制的请求做一次过滤
排除模式里面添加 .*.(js|css|PNG|jpg|ico|png|gif).*
四、脚本优化
以登录保存一笔交易为例,现在来调整脚本。
4.1 删除多余脚本脚本
以下为删除后的脚本记录
4.2 调整名字
4.3 获取Session ID并使用
获取登录的Session ID,并添加cookies管理器,统一使用
查看结果树,需要提取对应的session
登录的请求下添加正则表达式提取
添加 cookie 管理器,并获取session变量
如果成功了,可以用结果树查看
4.4 获取业务ID并使用
以这次的用户为例,保存生成的交易ID需要在提交审批时候使用,这里还需要将保存请求里面的返回ID,作为提交审批里面的参数使用
首先,查看结果树里面的保存响应数据,以及提交审批的请求数据。
所以需要提取保存请求响应数据的approve id,作为提交审批中的serial_no
综上所述,了解这些内容之后,就可以做一些接口级的并发测试了。
五、基于jmeter数据验证
这是基于外汇交易系统经常需要测试相同数据出的会计分录,头寸,台账内容是否符合预期的场景,想到一个测试思路。每一次更新代码,都需要检查,审核产生的数据,需求灭有变化的情况下,这个回归的流程都是一致的。
首先得指定一个测试库,不断的清库,修改系统日期(后者更为方便),以即期为例,维护一遍即期交易,保存提交审批并审批完成后,继续清算初审、复审,流程完成之后,会生成对应的台账、头寸、分录数据,将这个主要流程录制为jmeter脚本。
后续分别去访问这些节点(分别对应不同的请求),根据返回值的断言,来判断结果是否符合我们的预期,来判断新一轮的程序调整是否有问题。