项目背景:
我们的平台为全国某行业监控平台,经过3轮功能测试、接口测试后,98%的问题已经关闭,决定对省平台向全国平台上传数据的接口进行性能测试。
01、测试步骤
1、编写性能测试方案
由于我是刚进入此项目组不久,只参与了其中3个模块的功能测试,一遍接口回归测试,所以在写性能测试方案时,首先将业务流程、业务功能梳理了一遍,重点对将要性能测试的接口的文档再次仔细看一遍,在导师的引导下,对各个接口响应的功能更加了解,收获最大是,性能测试应该对应各接口的实际功能,设计合适的用例,如:针对某一对象,有两种数据上传,一种是实时数据,一种是历史数据。
此时,实时数据就应该更多考虑连续上传的稳定性,而历史数据应该更多考虑数据堆积后,一次上传多条(1000条)数据的情况,要去更多关注数据上传后的正确性,完整性。
对各个接口功能和数据上传逻辑梳理清楚后,将每个接口性能测试的方法、测试项、需要的数据都设计好,整理后就是我们的测试方案了。
![](https://pic4.zhimg.com/80/v2-db4cac4f8c57c983b90290b9f991314b_720w.webp)
下面是部分截图
![](https://pic3.zhimg.com/80/v2-4563cabb683a796f281e31765c0827c6_720w.webp)
测试方案是 在即实际操作尝试可行的情况下编写的,后续施行的过程中发现的需要调整的地方,按实际需求进行了调整。
2、测试方案讨论
将测试方案提交导师审核后,小组内开会讨论了此方案,组长对不合适的地方提出改进意见,同事们提出自己的想法,还有不清楚的地方也在大家的讨论中更明朗了。通过讨论后,测试方案变得更贴合项目需要、更可行了。
本次需要修改的部分截图如下:
![](https://pic2.zhimg.com/80/v2-2341cdc50d02f0a1fde070b44e0c6c59_720w.webp)
3、性能测试执行
我们使用Jmeter工具进行测试。
接口信息如下:
![](https://pic4.zhimg.com/80/v2-6f4f262afc89a270092e8e053ba1f94f_720w.webp)
测试脚本使用Java编写,数据打包为json格式。
4、输出测试报告
5、分析数据
6、问题排查
7、性能改进
02、案例分享
下面分析详细一个接口案例--历史数据上传。
1、创建一个线程组:
打开Jmeter.bat,出现图形界面,依次点击如下图:
![](https://pic2.zhimg.com/80/v2-60851224fb4e09d18070f20b4cccba39_720w.webp)
2、添加HTTP默认请求:
添加此配件为了控制此线程组的访问地址和端口,依次点击如下:
![](https://pic4.zhimg.com/80/v2-f803c6c9121a646492d95027b9e9ffdb_720w.webp)
配置HTTP默认请求参数,根据要测试的IP和端口,如下所示:
![](https://pic3.zhimg.com/80/v2-22944bd60608b1568d8289f7372f25fa_720w.webp)
3、数据库连接配置:
因为我们要从数据库获取企业信息,所以要配置数据库连接(使用配置元件-JDBC连接配置),若你们用固定的用户名和密码登录,可以省去此步。
![](https://pic2.zhimg.com/80/v2-23eec8b106e22d706d7bf7c1165f0409_720w.webp)
JDBC连接配置:
![](https://pic3.zhimg.com/80/v2-6c7166ce51dd8e7d024896da4e6e3762_720w.webp)
4、添加仅一次控制器:
属于逻辑控制器,用来控制采样器的执行顺序。因为这里的用户只需要登录一次,所以用仅一次控制器,即表示此控制器下的内容在整个线程组运行中只循环一次。
![](https://pic3.zhimg.com/80/v2-960d5ab9f0468ec62f8fdb92ed1f69c2_720w.webp)
5、添加HTTP请求:
要添加在仅一次控制器下面,才能受它控制。HTTP请求属于Sampler(采样器),然后根据接口文档相关内容填写http请求内容。
![](https://pic2.zhimg.com/80/v2-1aeb9595da111b2bdd05794464d3a60d_720w.webp)
![](https://pic3.zhimg.com/80/v2-b773b1a053bf5b9ba93b46589ec310e2_720w.webp)
6、添加正则表达式提取器:
需要在http请求下面添加,因为要从http请求的响应结果中通过正则表达式来提取我们需要的key。
正则表达式:
- ():括起来的部分就是要提取的。
- .:匹配任何字符串。
- +:一次或多次。
- ?:不要太贪婪,在找到第一个匹配项后停止。
(3)模板:
引用起来,如果在正则表达式中有多个正则表达式,则可以是$2
3$等等,表示解析到的第几个值给引用名称的那个量(如:key)。如:$1$表示解析到的第1个值。
(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0。
(5)缺省值:如果参数没有取得到值,那默认给一个值让它取。
![](https://pic4.zhimg.com/80/v2-6db30ff8cf7556eb4b31740c38cdfe8f_720w.webp)
7、添加获取当前时间:
使用采样器里的BeanShell Sampler。为了方便在Redis里查看数据时知道是什么时间上传的。次数需要在采样器中编写提取当前时间的java脚本。
![](https://pic4.zhimg.com/80/v2-23c383aedc2cc3e76063d029a638f1a3_720w.webp)
8、使用java编写脚本设置上传数据,
此处也使用Bean Shell Sampler采样器。数据需要json格式。这里开始,采样器就要添加在线程组下面,因为数据有可能要多次循环上传,如果只部分截图如下:
![](https://pic3.zhimg.com/80/v2-1ea057a395e7e69a414d50d7838ef8a2_720w.webp)
9、添加http请求,将刚设置的符合接口要求的数据上传。
![](https://pic1.zhimg.com/80/v2-f1ec66338303e86f585249d6a57ea734_720w.webp)
10、添加监听器
![](https://pic3.zhimg.com/80/v2-a71552313e165214ad26dbcec12945ae_720w.webp)
在监听器中设置运行日志保存的位置。
11、运行后查看结果