项目背景
这次测试的是外海项目的接口,我们的轨迹上传走是的2条不通的通道,一个是MQTT协议(实时上传,付费通道),一个是HTTP协议(断网时缓存下来的轨迹在联网后上传,免费通道)。目前先搞定的是HTT协议,固先过程记录下来,防止自己也忘啦
测试结构
因为我们上传轨迹需要先绑定设备,才能上传。但因为我们的账号有个唯一标识码(相当于身份证),所以要请求到这个标识码才能上传轨迹。所以请求接口顺序为:绑定设备→请求服务器获取账号唯一标识码→上传轨迹。
EXCEL造数据
因为我们要模拟不同的用户上传,所以先用excel根据API接口文档格式按按绑定设备要求传入“imei(手机标识))、mac(车机唯一标识)参数”,先造些数据然后导出.csv文本格式等待导入使用(为了方便测试脚本构建后看下是否能执行通,数据可先弄少一下,脚本能够正常执行,再按照你们的业务场景需求去造用户数,一般先从从少的往上加:如造50个用户、再造100个、依次往上加)。
这是整个测试接口请求的顺序:
1:HTTP消息头管理器
因为我们的HTTP请求需要有请求头,固先添加请求头,请求的类型视服务器需要的类型上传,此处我们需要上传的是:content-type,值为application/json,Accept,值为*/*(如果不知道服务器需要上传的是什么类型,问下写这个业务的开发同事)
2:HTTP请求默认值
因此次测试的接口有多个,共用的一些信息是相同的,所以为了简化脚本固添加了一个HTTP请求默认值:
此时在线程组→配置原件→CSV文件设置,读取配置的上传文件(为文章开始造的.csv文本)
3:CSV数据文件上传
4:【绑定设备接口】
5:设备号接口调用接口生成的校验码
6:正则表达式提取器
7:缓存轨迹上传
此处测试遇到的一个坑是:
上传压缩的数据时,jmeter自动去掉了压缩数据里面的一个转义符,所以我们再在上面添加个转义符再上传(上传数据报错时,我们可以根据上传到服务器的数据来排查是否上传的数据报错)
原压缩数据:
"data": "\u001f\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000Á\rÀ0\b\u0003\u0017¢M Àn\u0019¾\"j;AN²?'\u001dÝi°\u0019\u0004 3)«r¾¸\\T\u001dHÃ\n\u0006Dû¾±+Ì;Û\/\u001emÖùfl¿\u001eúĶYü\u0000\u0000\u0000"
8:此时,我们的测试脚本结构构件完成,可以先添加个测试结果看下请求是否成功。但因为我们要模拟大量用户请求数据,为了在请求接口时不消耗计算机大量资源,所以使用命令行(即非GUI模式)来进行请求接口(jemter官方文档也说了不要使用GUI模式请求)。
备注一(查看结果的错误日志需要做出配置的地方。):
估计jmeter为了减轻客户机负担,在请求时默认没把请求信息和响应信息保存,为了我们导出来的测试结果可以查看请求信息和响应数据,我们需要先需要做出如下配置:
修改bin目录下的user.properties文件,追加配置:
jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.responseHeaders=true
修改bin 目录下的jmeter.properties
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.samplerData=true
建议做性能测试还是不要开这些配置,可能是因为写入这些信息页会消耗计算机一部分性能,感兴趣的话大家也一起去查下资料吧
备注二(查看结果的请求响应不是乱码需要配置的地方。):
正常来说在请求上面编码方式填写为:UTF-8就可以,但发现试过了很多次,这里修改并不生效,如下2种方法可以参考:
1:修改jmeter→bin目录下的jmeter.properties文件,查找关键字“ISO”,出来结果后,找到:
#sampleresult.default.encoding=ISO-8859-1(默认使用的的是ISO-8859-1,将它改为:UTF-8),切记要将前面的注释“#”去掉,保存后重启jmeter再进行测试
2:在jmeter线程组下添加:后置处理器→BeanShell PostProcessor→在“Script”添加代码:prev.setDataEncoding("utf-8"),即可解决!这也是我最喜欢的一种方法,通常我不用前面2种,直接用这个方法
10:测试完成之后,我们再次打开这个脚本,此时如果需要只查看结果的话,可以直接添加聚合报告→所有数据写入一个文件→找到生成的测试报告即可(如果需要查看请求的错误响应信息排查原因,建议添加“查看结果树”→所有数据写入一个文件→导入文件,最后勾选“仅错误日志”即可查看请求信息和响应数据)
测试报告:
网上百度了一大堆各种各样的测试接口报告,感觉不太适合,就自己简短的汇总了下信息: