当前位置:网站首页>JMeter接口自动化发包与示例
JMeter接口自动化发包与示例
2022-08-03 08:03:00 【软件测试凡哥】
目录
前言
JMeter接口自动化发包与示例
近期需要完成对于接口的测试,于是了解并简单做了个测试示例,看了看这款江湖上声名远播的强大的软件-Jmeter靠不靠谱。
官网:Apache JMeter - Apache JMeter
1简介
- Apache-Jmeter是一个使用java语言编写且开源,可拓展性较强的测试框架,设计初期用于web应用的压力性能测试较多,但现在功能已经非常丰富,不仅是压力,而目前的接口自动化都可以使用该工具完成
- 本次需求只依据业务,简单设置定时任务,往指定的接口发送接口数据,对接口返回数据做assert断言判断结果,体验一下该软件与postman有何差异。
2结构
Jmeter左上角点击文件-新建,即生成一个测试计划,相当于一个project,并创建以下层级结构
聚合报告
查看该测试计划的执行结果报告,每个执行的接口都统计在这,如果是做压力测试的话,就可以得出很多次执行的一个接口的性能情况。
查看结果树
查看每个测试接口的执行情况,包括该接口实际发送的包以及接口的响应都可以在这看到。
Http信息头管理器
消息头信息可以在这里定义,没定义就是按照默认的头发包。
setUp线程组
该线程组在整个项目的自动化时,可以将部分鉴权接口、参数生成与配置等放入该模块,以便确保该模块优先执行。
线程组
前置预处理程序
这里我选择beanshell预处理程序,构造后面接口发的数据,可以看到脚本上边有个tips(scripts variable:ctx vars props prev sampler log),即Jmeter提示在编写脚本的时候可以使用ctx、vars等类去调用相应的API,这些值比如ctx的具体用法可到官网:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html,常见的API:
- ctx - ( [JMeterContext ](http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html)) - gives access to the context - vars - ( [JMeterVariables ](http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html)) - gives read/write access to variables: vars.get(key); vars.put(key,val); vars.putObject("OBJ1",new Object()); vars.getObject("OBJ2"); - props - (JMeterProperties - class java.util.Properties) - e.g. props.get("START.HMS"); props.put("PROP1","1234"); - prev - ( [SampleResult ](http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html)) - gives access to the previous SampleResult (if any) - sampler - (Sampler)- gives access to the current sampler
业务请求代码{单个/多个http请求/循环压测等}
后置预处理程序
//一般来说提取响应内容等打印出来 String statusCode = prev.getResponseCode(); log.info(statusCode);
tearDown线程组
该线程组将是最后处理的线程组,可以将清除测试数据等放在该模块内部执行。
3代码:
测试计划:增加用户定义变量如下:
host 192.168.3.10 port 50553 longConPort 60443 devNum 1 projectId 1 Token 1 beanshell预处理程序中处理需要往接口中带入的一些随机变量,这里需求是要依据主设备的MAC地址等信息,携带子设备的相关信息通过接口上报给服务器,于是需要在预处理脚本中新增易于维护的MAC地址信息,也便于后续压力测试的时候生成百千万个设备数据时候做改写。以下定义一台主设备,31台子设备的MAC地址代码如下:
/** * 生成的device_mac为00-00-0X-00-00-00,其中X这里定义为了进程号。整个生成规则可自己依据需求定义 * 对应的25个连接中断的MAC地址也可自定义,client_mac为00-00-0X-00-00-01、00-00-0X-00-00-02……00-00-0X-00-00-25 */ pre_mac = ""; //getThreadNum获取当前进程编号,进程号从0开始的,这里结果是1 thread_index = ctx.getThreadNum(); str_index = thread_index + ""; log.info("当前线程编号: " + str_index ); //最后生成六位字符串000001 n = 6 - str_index.length(); for (int i=0; i<n; i++) { pre_mac += "0"; } pre_mac += str_index; //正则,每隔两位数字就在后面插入一个“-”,使其符合mac地址的规范,最后pre_mac变成00-00-01,device_mac00-00-01-00-00-0X为mac地址一共12位, pre_mac = pre_mac.replaceAll("(.{2})", "$1-"); device_mac = pre_mac + "00-00-00"; //将生成的值存入对象vars中,后续在脚本中都可以直接使用//vars.put("client_mac_"+i, client_mac_i)这个参数后面就可以使用${变量名}直接使用; vars.put("device_mac", device_mac); for (int i=1; i<10; i++) { client_mac_i = pre_mac + "00-00-0" + i; vars.put("client_mac_"+i, client_mac_i); log.info(client_mac_i); } for (int i=10; i<31; i++) { client_mac_i = pre_mac + "00-00-" + i; vars.put("client_mac_"+i, client_mac_i); log.info(client_mac_i); } //Token的定义规则,可以用函数生成,也可以在前面的参数中直接加上 deviceToken = "test" + str_index; vars.put("deviceToken", deviceToken);
http请求格式
依据前面在测试计划中设定的值,在这个页面相应的位置写上引用即可(格式${变量名}),并依据接口文档定义,把需要发的包的数据编辑好附在body中并为该用例添加一个断言即完成一个用例的编写。
循环发送
如下图所示
4运行结果
经过上面处理后,下面可以启动测试计划,并观察执行的结果如下图: |
5 小结
Jmeter做上述简单接口的测试上与postman相差无几,而Jmeter还有很多定时器、监听器等功能还未使用到,后面使用jmeter做一次完整的性能压力测试之后,也许才能真正体会到它的强大。
下面是一份非常优质的学习资源,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
以上软件测试资料需要的可以私信我都可以免费获取
这还有一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。
结语
欢迎留言,或是关注我的专栏和我交流。
边栏推荐
猜你喜欢
随机推荐
Docker启动mysql
C# 一周入门高级编程之《C#-继承》Day One
并发之固定运行和交替运行方案
ArcEngine(三)通过MapControl控件实现放大缩小全图漫游
Roson的Qt之旅#104 QML Image控件
【TPC-DS】DF的SQL(Data Maintenance部分)
Redis的基础与django使用redis
How does Mysql query two data tables for the same fields in two tables at the same time
Transformer、BERT、GPT 论文精读笔记
requests库
基于SSM开发的的小区物业管理系统小程序源码
Docker starts mysql
23届微软秋招内推
ArcEngine (six) use the tool tool to realize the zoom in, zoom out and translation of the pull box
并发之ReentrantLock
Nacos使用实践
Poke the myth of Web3?Poke the iron plate.
frp: open source intranet penetration tool
Pyspark - an empty string is replaced by None
Redis分布式锁