JMeter接口自动化发包与示例

2024-01-22 17:44

本文主要是介绍JMeter接口自动化发包与示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

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代码:

测试计划:增加用户定义变量如下:

host192.168.3.10
port50553
longConPort60443
devNum1
projectId1
Token1

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开始的,这里结果是1thread_index = ctx.getThreadNum(); str_index = thread_index + "";log.info("当前线程编号: " + str_index );//最后生成六位字符串000001n = 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做一次完整的性能压力测试之后,也许才能真正体会到它的强大。

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

这篇关于JMeter接口自动化发包与示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/633737

相关文章

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型