jmeter接口测试、压力测试简单实现

jmeter测试的组件执行顺序:

测试计划--->线程组--->配置元件--->前置处理器--->定时器--->逻辑控制器--->取样器--->后置处理器--->断言--->监听器

组件的作用范围:

  • 同级组件
  • 同级组件下的子组件
  • 父组件

目前市面上的三类接口

1、基于webservice协议接口,通过xml传输数据

2、基于dubbo协议接口,通过json传输数据

3、基于http协议接口,通过json传输数据

\]:数组,多个值 { }:对象,键值对 接口项目实战: 端口号:http:80 https:443 ## 接口测试实战 * 创建一个线程计划 * 在线程计划中创建一个线程组 * 在线程组中添加配置元件(HTTP信息头管理器、HTTP请求默认值、HTTP Cookie管理器、用户定义的变量) * 在线程组添加一个结果树来查看测试结果 ![](https://file.jishuzhan.net/article/1685109010040098817/3ae80442219a4a3ea6f039a5348f49a3.jpeg) 在HTTP请求默认值中配置测试接口的请求协议、ip、端口号。在这里统一配置后,在接口测试时就不用重复配置这些前缀,只需要把URL填上即可。 ![](https://file.jishuzhan.net/article/1685109010040098817/633c1bef5513422588eebc2f13e56fc3.jpeg) 在 HTTP信息头管理器,添加请求头信息 ![](https://file.jishuzhan.net/article/1685109010040098817/ad8a7bc26bd84ee099fba0f6e2d9ee26.jpeg) 在线程组添加一个取样器---HTTP请求。这个组件就是填写要测试接口的信息。接口路径、参数、返回格式都在这里填写。 比如,我要测试的一个接口为用户登录接口,填写好接口路径以及参数后,点击运行,即可在查看树查看结果。 ![](https://file.jishuzhan.net/article/1685109010040098817/3078948282b648d5b577eabd37eca27b.png) 填写完接口信息后,点击运行按钮,然后在结果树查看测试结果。 ![](https://file.jishuzhan.net/article/1685109010040098817/5388153f587f47e6a36e2632aa17e467.png) ![](https://file.jishuzhan.net/article/1685109010040098817/79ba62b49b1940f59d781f03d788fb8d.png) 现在正式开始一组接口测试: 要测试的接口流程: 验证码加载==\>用户登录==\>查看商品信息==\>添加商品到购物车==\>结算生成订单==\>查看订单 **用户登录接口:** 方法:post 地址:/sysUser/listb 参数: * username: admin * password: admin * code: aaaaa * picture: aaaaa * 不需要鉴权 结果: {"msg":"操作成功!","code":200,"data":{"jwt":"token值","username":"用户名"}} **查看信息接口:** 方法:get 地址:/login 参数:无 结果: {{"code":200,"msg":"操作成功!","data":\[{数据}\]}} **添加商品到购物车** 方法:post 地址:/sysUser/insertcar 参数: ``` { "gname": "string", "num": 0, "price": 0, "seller": "string", "username": "string" } ``` 结果: {{"code":200,"msg":"操作成功!","data":\[{数据}\]}} **结算生成订单** 方法:post 地址:/sysUser/insertcar 参数: ``` { "oid": "string",   "address": "string", "buyer": "string", "gname": "string", "num": 0, "seller": "string", "created": "2023-07-26T09:11:10.237Z", } ``` 结果: {{"code":200,"msg":"操作成功!","data":\[{数据}\]}} **查看订单** 方法:get 地址:/sysUser/insertcar 参数: * ``` name(当前的用户名) ``` 结果: {{"code":200,"msg":"操作成功!","data":\[{数据}\]}} ### **测试登录接口** 现在开始测试用户登录接口 添加一个http请求 填入传输类型post,填入url,填入参数 ![](https://file.jishuzhan.net/article/1685109010040098817/223c270f9fa54c9cbc9a0e58d9b2497f.png) 然后,运行,查看结果树 ![](https://file.jishuzhan.net/article/1685109010040098817/00a6c973bc364233b3688b8a7afadd1d.png) ### 测试查看商品的接口 测试查看商品的接口,除了登录接口的其他接口都需要登录时生成的token,也就是上图的jwt值,没有这个值,是无权进行查看接口这个操作。登录接口与查看商品接口有关联的,我们需要获取到这个token值,添加到后续接口的请求头。 **接口关联:**有两种方法 正则表达式提取器 ![](https://file.jishuzhan.net/article/1685109010040098817/dc6e48612bd64433b73a5fa2262c3b11.jpeg) 1、变量名:可以随意定义 2、正则表达式:要包括左边界、右边界以及(.\*?), 3、$1$表示取第一个正则。$2$表示取第二个正则 4、匹配数字,1表示取第一个匹配到的值 5、默认值,没有匹配到使用默认值。 然后在HTTP信息头管理器添加token信息 ![](https://file.jishuzhan.net/article/1685109010040098817/b69d3cc2154b45fd9478e0944c8f8f8a.png) JSON提取器 例子 {"jwt":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY5MDM1OTczNiwiZXhwIjoxNjkwOTY0NTM2fQ.1HPGr2RLQpW8SzcRfHzWhMmJ9zMOVQXqe8g69tkOPF-QbdEPj7N0ASXW86lL0KxQ_rGcNdZ-WYmV9cbUpj8dCw","username":"admin"} 语法规则:只适用于json数据 * $代表根目录 * .代表子节点 $.jwt=\>eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY5MDM1OTczNiwiZXhwIjoxNjkwOTY0NTM2fQ.1HPGr2RLQpW8SzcRfHzWhMmJ9zMOVQXqe8g69tkOPF-QbdEPj7N0ASXW86lL0KxQ_rGcNdZ-WYmV9cbUpj8dCw * $.username=\>admin * $.\* 取所有的值即jwt和username的值 如果没有通过鉴权测试,是无法访问其他接口的 ![](https://file.jishuzhan.net/article/1685109010040098817/f3f2e738635b4e1d98193a6b8a048125.jpeg) **在登录接口添加一个正则表达式管理器来获取token值** ![](https://file.jishuzhan.net/article/1685109010040098817/7056f350ed704c6093638f398c577231.jpeg) **在线程组添加一个HTTP请求(查看商品接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置** ![](https://file.jishuzhan.net/article/1685109010040098817/0c1c2688911742f29b9ca4156436c46a.jpeg) **然后在查看商品接口填写传输方式:get,参数:无;** ![](https://file.jishuzhan.net/article/1685109010040098817/6e048badfa8e487ba049ba9333c5dc49.jpeg) **运行测试,可以看到成功获得商品列表** ![](https://file.jishuzhan.net/article/1685109010040098817/d5f7c434dfb3484ba28de3121be5bab8.jpeg) ### 测试**添加商品到购物车** **在线程组添加一个HTTP请求(添加商品接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置。** **在添加商品接口内填写:** **传输方式:post** **参数:** ``` { "gname": "苹果手机", "num": 1, "price":4000.00, "seller": "root", "username": "${username}" } ``` username为当前登录的用户名,所以我们可以通过json提取器来获得登录时的用户名,并在此引用。 **然后启动测试,查看结果数** **![](https://file.jishuzhan.net/article/1685109010040098817/ad1e8d3cd03c4c859a5963cbea41e8a1.jpeg)** ### 测试结算生成订单接口 **在线程组添加一个HTTP请求(生成订单接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置** **在添加商品接口内填写:** **传输方式:post** **参数:** ``` [ {"gname": "苹果手机", "num": 1, "buyer": "${username}", "seller": "root", "address": "广东省xx市xx区", "created": "2023-06-27T03:19:43.460Z" } ] ``` **运行测试,得到结果** ![](https://file.jishuzhan.net/article/1685109010040098817/2037e705d9af4a6ab089c970df4790ad.jpeg) ### **测试查看订单接口** **在线程组添加一个HTTP请求(查看订单接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置** **传输方式:post** **参数:** ``` String username ``` ![](https://file.jishuzhan.net/article/1685109010040098817/aaaf384e206c49beb2b110a8423145da.jpeg) **运行,查看结果树** ![](https://file.jishuzhan.net/article/1685109010040098817/b4c09bc630db4675b97607017bd29aec.jpeg) 以上就是jmeter测试接口的基本流程,但是以上例子都是正例。我们可以csv参数化来设置正例、反例来测试接口。以登录接口为例。 ## csv参数化 * 创建一个csv文件 * 打开文件 * 输入数据 ![](https://file.jishuzhan.net/article/1685109010040098817/775b2fbe3a4847718824fc8bd2be1831.jpeg) 第1行为属性名 username为登录接口的账号,password为密码,code和picture为验证码,duanyan为断言 第1行下面的则为属性值 第2行:账号密码、验证码都正确 第3行:账号为空,密码、验证码正确 第4行:账号、验证码正确、密码为空 第5行 :账号、密码正确、验证码错误 然后再登录接口下面添加一个csv数据文件设置,并配置 ![](https://file.jishuzhan.net/article/1685109010040098817/aa33ca6edfc34fdf819ad00bc15ee0a4.png) 然后修改接口的参数 ![](https://file.jishuzhan.net/article/1685109010040098817/39a00050f1674fdb836d1724076ac43c.png) 在线程组添加一个循环控制器 ,因为这里有4个用例,所以循环次数为4 ![](https://file.jishuzhan.net/article/1685109010040098817/1f8738ce3c7646baa8b10b2bec46c674.png) 把验证码接口和登录接口放到循环控制器中,运行测试,查看结果树,可以得到4组测试结果 ![](https://file.jishuzhan.net/article/1685109010040098817/9766bb5100f645a295f87ff2532805ec.png) ![](https://file.jishuzhan.net/article/1685109010040098817/4a27e05fc7db42e9a40c63f3c0d8673b.jpeg) ![](https://file.jishuzhan.net/article/1685109010040098817/dd99f13f53a54dc3b9e2822d058658c4.jpeg) ![](https://file.jishuzhan.net/article/1685109010040098817/f06e7e931f1c4ec08721040986024b49.jpeg) # 压力测试 添加一个线程组,设置线程数为10,线程多少内启动完成,循环次数为1. ![](https://file.jishuzhan.net/article/1685109010040098817/7ed0ce1f93e94b408090d4280b7c5444.png) 然后添加查看结果的页面:(聚合报告)、表格统计结果界面(根据需要,可选)、添加图形结果页面(根据需要,可选)。 然后添加要压力测试的接口,运行测试。 我要测试登录接口以及获取商品库存的接口,添加两个http请求,填好数据(如接口测试那样操作)。运行测试,查看结果: **聚合报告** **![](https://file.jishuzhan.net/article/1685109010040098817/1622048e03bb45639243b673928287be.png)** **表格统计** **![](https://file.jishuzhan.net/article/1685109010040098817/a55f7cd90d38480baf4e768b3598f243.png)** 性能测试主要关注如下三个指标 * 吞吐量:每秒钟系统能够处理的请求数、任务数,该值越大越好 * 响应时间:服务处理一个请求或一个任务的耗时 * 错误率:一批请求中结果出错的请求所占比例

相关推荐
Wyc7240930 分钟前
HTML:入门
前端·html
Sunny_lxm30 分钟前
自定义列甘特图,原生开发dhtmlxgantt根特图,根据数据生成只读根特图,页面展示html demo
前端·html·甘特图·dhtmlxgantt
熊猫钓鱼>_>1 小时前
建筑IT数字化突围:建筑设计企业的生存法则重塑
前端·javascript·easyui
GISer_Jing3 小时前
前端性能指标及优化策略——从加载、渲染和交互阶段分别解读详解并以Webpack+Vue项目为例进行解读
前端·javascript·vue
不知几秋3 小时前
数字取证-内存取证(volatility)
java·linux·前端
水银嘻嘻5 小时前
08 web 自动化之 PO 设计模式详解
前端·自动化
Zero1017137 小时前
【详解pnpm、npm、yarn区别】
前端·react.js·前端框架
&白帝&7 小时前
vue右键显示菜单
前端·javascript·vue.js
Wannaer7 小时前
从 Vue3 回望 Vue2:事件总线的前世今生
前端·javascript·vue.js
羽球知道7 小时前
在Spark搭建YARN
前端·javascript·ajax