原来jmeter接口测试还可以这么做...

JMeter是一个Java应用程序,是基于开源的性能测试工具。它可以用来对Web应用程序或FTP服务器进行压力测试,以便确定它们在高负载下还能否正常运行。JMeter支持各种协议,如HTTP、HTTPS、FTP、SOAP、REST等。

本文将介绍JMeter的详细使用教程,包括安装、界面、测试计划、元件、断言、监听器、命令行运行和报告生成等内容。

安装

在开始之前,需要先安装Java环境。然后,下载JMeter最新版本的二进制文件,解压缩到任何目录下即可开始使用。

界面

JMeter的主界面分为两部分:左侧是测试计划树和元件面板,右侧是元件属性编辑区域和运行日志区域。

测试计划

测试计划是JMeter执行测试的基础。在测试计划中,可以设置全局变量、用户定义变量、线程组等信息。

元件

元件是测试计划的基本构成单元,包括Sampler、逻辑控制器、定时器、配置元件、前置处理器、后置处理器和监听器等。

Sampler:表示对被测应用程序发送的请求,例如HTTP请求、FTP请求等。

逻辑控制器:控制Sampler的执行次数、顺序、并发度等。

定时器:控制Sampler发送请求的时间间隔,例如线程睡眠、恒定时间、高斯随机函数等。

配置元件:用于设置Sampler的参数,例如HTTP头、FTP服务器、数据库连接等。

前置处理器:在Sampler发送请求之前执行的操作,例如正则表达式提取变量、JSON提取器等。

后置处理器:在Sampler接收到响应之后执行的操作,例如正则表达式提取变量、JSON提取器等。

断言

断言是用于判断被测应用程序的响应是否符合预期的元件。JMeter提供了多种类型的断言,如响应代码、响应文本、比较器等。

监听器

监听器是用于对测试结果进行分析和展示的元件。JMeter提供了多种类型的监听器,如图形结果、聚合报告、查看结果树等。

命令行运行

可以使用JMeter自带的命令行工具jmeter来执行测试计划。例如:jmeter -n -t test.jmx -l result.jtl -e -o report。

报告生成

JMeter提供了HTML格式的测试报告,可以通过jmeter自带的Ant任务或者Jenkins插件来生成。
 

  1. 准备工作

  2. 首先需要下载并安装JMeter,并启动它。然后创建一个新的测试计划,在测试计划中添加线程组和HTTP请求元素。

  3. 设置线程组

  4. 设置线程组属性,如启动用户数、Ramp-up时间和循环次数等。例如,设置10个并发用户并逐步增加到100个用户,Ramp-up时间为60秒,循环3次,则线程组属性应该如下所示:

  5. Number of Threads: 10

  6. Ramp-up Period: 60

  7. Loop Count: 3

  8. 设置HTTP请求

  9. 设置HTTP请求元素,包括URL、请求方法和请求参数等。例如,设置URL为https://example.com/api/login,请求方法为POST,请求参数包括username和password字段,值分别为testuser和testpassword,则HTTP请求应该如下所示:

  10. Method: POST

  11. Path: /api/login

  12. Parameters:

  13. - username: testuser

  14. - password: testpassword

  15. 添加断言

  16. 添加断言元素以验证响应是否符合预期。例如,添加响应代码断言以确保响应状态码为200:

  17. Type: Response Code

  18. Test Field: Response code

  19. Expected Value: 200

  20. 添加监听器

  21. 添加监听器元素以收集响应数据并生成报告。例如,添加聚合报告以查看每个样本的平均响应时间、吞吐量和错误率等:

  22. Type: Aggregate Report

  23. 运行测试

  24. 单击运行按钮以运行测试。JMeter将向目标API发送请求,并收集响应数据。

  25. 分析结果

  26. 通过查看聚合报告或其他监视器来分析执行结果。可以根据需要对报告进行导出、分享或存档等操作。

  27. 示例代码

  28. 以下是使用Java语言编写的JMeter接口测试的示例代码:

  29. java

  30. import org.apache.jmeter.config.Arguments;

  31. import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;

  32. import org.apache.jmeter.report.dashboard.ReportGenerator;

  33. import org.apache.jmeter.reporters.ResultCollector;

  34. import org.apache.jmeter.reporters.Summariser;

  35. import org.apache.jmeter.save.SaveService;

  36. import org.apache.jmeter.testelement.TestElement;

  37. import org.apache.jmeter.testelement.TestPlan;

  38. import org.apache.jmeter.threads.ThreadGroup;

  39. import org.apache.jmeter.util.JMeterUtils;

  40. import org.apache.jmeter.visualizers.ViewResultsFullVisualizer;

  41. import org.apache.jorphan.collections.HashTree;

  42. import java.io.File;

  43. public class JMeterApiTest {

  44. public static void main(String[] args) throws Exception {

  45. // 设置jmeter_home路径

  46. File jmeterHome = new File("/path/to/apache-jmeter-5.4.1");

  47. if (!jmeterHome.exists()) {

  48. throw new IllegalArgumentException("JMeter home not found at '" + jmeterHome + "'");

  49. }

  50. // 初始化jmeter并设置参数

  51. JMeterUtils.setJMeterHome(jmeterHome.getPath());

  52. JMeterUtils.loadJMeterProperties(jmeterHome.getPath() + "/bin/jmeter.properties");

  53. JMeterUtils.initLocale();

  54. // 设置测试计划

  55. HashTree hashTree = new HashTree();

  56. TestPlan testPlan = new TestPlan("Test Plan");

  57. hashTree.add("testPlan", testPlan);

  58. // 设置线程组

  59. ThreadGroup threadGroup = new ThreadGroup();

  60. threadGroup.setName("Thread Group");

  61. threadGroup.setNumThreads(10);

  62. threadGroup.setRampUp(60);

  63. threadGroup.setScheduler(false);

  64. threadGroup.setDuration(180);

  65. testPlan.addThreadGroup(threadGroup);

  66. // 设置HTTP请求

  67. HTTPSamplerProxy httpSampler = new HTTPSamplerProxy();

  68. httpSampler.setDomain("example.com");

  69. httpSampler.setPath("/api/login");

  70. httpSampler.setMethod("POST");

  71. httpSampler.addArgument("username", "testuser");

  72. httpSampler.addArgument("password", "testpassword");

  73. threadGroup.addSampler(httpSampler);

  74. // 添加断言

  75. ResponseCodeAssertion assertion = new ResponseCodeAssertion();

  76. assertion.setTestFieldResponseCode();

  77. assertion.setExpectedValue("200");

  78. assertion.setName("Assert Response Code");

  79. httpSampler.addTestElement(assertion);

  80. // 添加监听器

  81. Summariser

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/454492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 141. 环形链表

题目描述: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表…

【数据科学赛】光伏发电出力预测 #¥150,000

CompHub[1] 最新的比赛会第一时间在群里通知,欢迎加群交流比赛经验!(公众号回复“加群”即可) 根据比赛主页[2](文末阅读原文),使用AI辅助生成 光伏发电出力预测 比赛题目 本次比赛的题目是关于光伏发电出力预测。参…

FreeRTOS操作系统学习——中断管理

中断管理介绍 嵌入式实时系统需要对整个系统环境产生的事件作出反应。这些事件对处理时间和响应时间都有不同的要求。事件通常采用中断方式检测,中断服务例程(ISR)中的处理量应当越短越好。ISR是在内核中被调用的, ISR执行过程中,用户的任务…

C语言分析基础排序算法——计数排序

目录 计数排序 计数排序基本思路 计数排序改进思路 计数排序 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。具体思路为: 统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 计数排序基本思路 基本思路分析: //以…

vue搭建脚手架遇到的一个bug

看起来运行vue init命令时出现了问题。似乎vue/cli-init插件没有被全局安装。你可以尝试使用npm(Node Package Manager)全局安装它。 按照以下命令: npm install -g vue/cli-init npm install -g vue-cli

力扣由浅至深 每日一题.05 合并两个有序列表

神明渡我,我将所有苦难都放过 —— 24.3.13 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,…

【系统架构师】-第19章-大数据架构设计理论与实践

四个特点: 大规模(Volume)、高速度(Velocity)和多样化(Variety),价值(Value)。 五个问题: 异构性(Heterogeneity)、规模…

提高螺栓连接强度——SunTorque智能扭矩系统

螺栓连接是工程中常见的一种连接方式,其强度对于设备的稳定性和安全性具有至关重要的影响。然而,由于各种因素的影响,螺栓连接在使用过程中往往会出现松动、断裂等问题,导致设备故障和安全隐患。因此,提高螺栓连接的强…

leetcode 热题 100_两数相加

题解一: 迭代:首先判断整数0,然后分别遍历两段链表,将对应位数的值相加并存入新链表,再遍历新链表,将节点值val>10的减10,并且其下一节点值val1。需要注意最后一位节点进位是将下一位节点值设…

电脑丢失msvcr120.dll文件怎么办-丢失msvcr120.dll文件的五种解决方法

今天有看到小伙伴们在问msvcr120.dll文件是什么,所以今天的这篇文章将给大家科普msvcr120.dll文件是什么,msvcr120.dll文件在电脑系统中的重要性,如果你的电脑中出现了关于msvcr120.dll文件丢失的问题,也可以参考这篇文章&#xf…

记录 Dubbo+Zookeeper 学习Demo

DubboZookeeper ZookeeperZookeeper 下载可能出现的问题 辅助程序下载dubbo-admin项目打包工程打包常见问题 SpringBoot集成Dubbo项目依赖定义服务接口服务端实现服务端配置依赖代码实现 消费端实现服务端配置依赖代码实现 启动 结合Dubbo官网学习如何完成SpringBootDubboZooke…

springBoot整合Redis(三、整合Spring Cache)

缓存的框架太多了,各有各的优势,比如Redis、Memcached、Guava、Caffeine等等。 如果我们的程序想要使用缓存,就要与这些框架耦合。聪明的架构师已经在利用接口来降低耦合了,利用面向对象的抽象和多态的特性,做到业务代…

Cesium ion 简介

Cesium ion SaaS 是一个强大、可扩展且安全的 3D 地理空间数据平台。可以上传您的数据,Cesium ion 会将其优化为 3D Tiles,并将其托管在云端,并将其流式传输到任何设备。 Cesium ion 包括访问精选的全球 3D 内容,包括 Cesium Wor…

jeecg 项目 springcloud 项目有一个模块 没加载进来 只需要 把这个模块放到 可以加载到模块的位置 刷新依赖

springcloud 项目有一个模块 没加载进来 只需要 把这个模块放到 可以加载到模块的位置 刷新依赖

04-自媒体文章-自动审核

自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后,开始审核文章 2 审核的主要是审核文章的内容(文本内容和图片) 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片,由于图片存储到minIO中&…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)

摘要:开发高效的零售柜商品识别系统对于智能零售领域的进步至关重要。本文深入介绍了如何运用深度学习技术开发此类系统,并分享了全套实现代码。系统采用了领先的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5进行了性能比较,呈现了诸如…

算法学习系列(四十):贡献法

目录 引言概念一、孤独的照片二、牛的基因学三、字串分值 引言 关于这个贡献法考的不是很多,主要题型是出现在需要枚举每一个组合这类题,出现的次数较多。没有固定的模板,就是一种思想,跟贪心一样,每个题都是不一样的…

基于opencv的手势识别

当然可以,下面是一个使用OpenCV实现简单手势识别,并在摄像头捕捉的视频中描绘出手部轮廓为线条的示例。该代码会读取摄像头流,然后检测出手部,并用线条描绘出手的轮廓。 首先,你需要安装OpenCV库。如果你还没有安装&am…

C# 第三方曲线库及其特点

在 C# 中,有几个第三方库可以用于绘制曲线图,每个库都有自己的特点和优势。以下是一些常见的 C# 第三方曲线库及其特点,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.LiveC…

普通人也能年入百万的超级秘籍!2024超级机会,低薪人的第二事业

一、选对行业与把握时机尤为关键。 入场时机的选择,往往决定了你的起跑线。那些在行业赛道上升期便早早布局的人,无疑占据了极大的优势。想象一下,你置身于一个市场需求持续增长、发展空间巨大的行业,成功的机会自然大增。比如现…