场景:发起订单,再取消订单。测试大批量用户同时下单到服务器以及取消订单时对数据库进行操作,服务器性能问题。
PS:下单之后会返回订单号,订单号作为取消订单时的参数传入,涉及到简单的jmeter中的正则表达式取参数,以及参数获取,如果只想知道怎么获取,可直接跳转到第8步。
后台服务和数据库都在一台服务器上,下单时会有数据库操作,向数据库中插入订单数据。取消订单会更新数据库数据
1.增加线程组
2.设置jmeter为代理,录取从app上下发的请求消息
3.添加http代理之后,配置端口和选择为线程组录制
端口设置可以任意,这个一会从手机上取设置代理时,要写入这个相同的端口号,保持一致就行。点击开始,手机上设置完代理之后就会录取手机上的请求消息了,录完之后停止,要不然会一直拦截到请求。
4.手机上设置代理(手机和电脑连接同一个wifi)
地址写电脑IP地址,端口写上一步设置的端口
5.手机上去操作,一直点击到要测试性能的步骤(比如要测试下单购买时,下单时大批量性能,那就在手机上点击一直到购买)
6.点开jmeter线程组前面的三角,打开子菜单,发现已经将要录制的请求录好了。
因为手机上有多种软件,有可能也将其他软件的请求也抓取到了,删除不用的请求消息,只保留要测试的部分。
7.增加结果树,能看到发送请求响应信息
监听这有很多可以增加,第二个聚合报告可以查看到发送许多请求时的失败率,多线程测试时也需要添加上
8.先运行一次,查看各个请求的响应是否正常,也可以查看到各个请求的请求参数。由于我这个订单号是下单请求返回的参数,取消订单时就需要用到,所以要获取这个参数。直接录制的参数是个确定的值,肯定不行
9.下单请求(要获取响应中参数作为请求参数的那个请求)上添加正则提取器
10.编辑正则提取参数
变量名:自己去取变量名,后面调用时用到。
真正则表达式的书写,可以根据需要网上搜。我要取得是orderNo值,所以先定位到orderNo,小括号()表示提取,也就是说对于你想要提取的内容要用它括起来。取得值就是括号中括起来得值:"orderNo":"(.*?)"。
模板: 模板是使用提取到的第几个值。因为可能有多个值匹配,所以要使用模板。从1开始匹配,依次类推。这里只有一个,所以使用即可。
匹配数字表示如何取值(网上查资料,有些-1代表全部取值,有些是1代表全部取值)。这个其实是跟后面调用时参数怎么写有关。比如这块填写了1,那后面调用这个参数时就要写成{orderNO_1},对这块还是比较模糊,哪位要是明白这块,也欢迎给解惑啊,谢谢。
11.获取到的参数作为请求,直接调用
这块说一下,因为我第一次写的时候,直接就只写了参数调用${orderNO},然后调用查看响应,发现报错了
查看请求消息,发现订单号是个字符串类型的,直接写成${orderNO},会只取值,并不会给其加上双引号,所以再调用时要加上双引号。
所有的都设置好之后,再调用一次,看下每个请求的响应是不是正常,正常时,就可以设置线程数去跑性能了。
别忘了添加聚合报告,能查看到出错率。