Jmeter 接口测试总结

news/2024/5/20 6:27:15/文章来源:https://blog.csdn.net/ch1451082329/article/details/132404182

背景介绍

对于 Android 项目来说,使用的是 Java 开发,网络请求接口的数量庞大且复杂,测试人员无法很直观的判断、得出网络请求是否存在问题。另一方面,为了验证请求接口是否能够在大负荷条件下,长时间、稳定、正常的运行,也需要我们借助工具来验证。对于上述问题,通过使用 Jmeter,可以很好的得到解决。JMeter 全称 Apache JMeter,是 Apache 组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

工具和方法

Fiddler

进行接口测试的第一步,是确认接口。从开发人员那里获取接口文档,接口文档应该包括完整的功能接口、接口请求方式、接口请求URL、接口请求参数、接口返回参数。如果当前项目没有接口文档,则可以使用 Fiddler 对 APP 进行抓包确认。

Fiddler 是一个 http 协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断点,查看所有的“进出”  Fiddler 的数据(cookie,html,js,css 等文件)。在接口测试中,Fiddler 是一个非常好的工具,可以辅助 JMeter 对网络请求接口进行抓包、验证、确认。Fiddler 的安装及环境配置,本文将不详述,可参见相关文档。这里注重说明两点:

  • 因为 Fiddler 抓包的原理就是通过代理,所以被测终端需要和安装fiddler的电脑在同一个局域网中
  • 开启 Fiddler 的远程连接,Fiddler 主菜单 Tools -> Fiddler Options…-> Connections 页签,选中Allowremote computers to connect,并记住端口号为 8888,等会设置手机代理时需要,设置好后重启fiddler保证设置生效。手机连接热点时,修改高级选项,设置完毕后,即可使用 Fiddler 进行抓包操作。如下图所示:
  • JMeter

  • 安装使用 JMeter 前,需要先配置对应的计算机环境。当前版本的 JMeter(2.11r1554548),需要安装 jdk1.7及以上版本,并配置环境变量,正确安装配置后,打开 jmeter.bat 即可显示 GUI 操作界面,如下图所示。(具体的安装配置操作,详见相应的文档)

  • 使用 JMeter 进行接口测试的第一步,是新建一个线程组,对线程组的相关属性进行设置。线程组的属性包括:

    线程数:虚拟用户数,即并发数,一个线程表示一个虚拟用户

    Ramp-Up Period:所有线程启动的时间,单位 s。通过这个参数可以设置每个线程间的启动间隔,防止给电脑造成太大性能压力;例如线程数 500,Ramp-Up Period为 50,意味着 50s 内,就要完成所有的 500 次请求,平均每秒进行 10 次请求

  • 循环次数:测试循环的次数,如果勾选了“永远”,那么所有线程会一直发送请求,直到手动停止运行脚本

  • 第二步:添加一个 http 请求,并配置相应的 ip、端口、地址、请求类型等,如果是 GET 方法的请求,请求参数直接写在 URL 后面即可;如果是 POST 的方法,则需要在 Body Data 中填入包含请求参数的数据(Body Data 可以从 Fiddler 抓的包中获取,将 Fiddler 抓取的到数据包中 Inspectors-TextView 中的数据复制到 Body data 中即可)。另外,由于该服务接口仅接受 json 格式数据,需要设定 header 信息。此时我们在线程组中添加 Http 信息头管理器,添加 Content-Type 参数,值为 application/json。如下图所示:

  • 第三步:为了验证接口请求数据、返回数据结果的正确性及完整性,我们需要添加一个“察看结果树”,来直观的察看请求数据及返回数据。如下图所示:

  • 第四步:启动线程,察看结果,如下图所示:
  • 细心同学可能会发现,以上操作步骤中,无论是请求数据还是返回数据,都是经过加密后的数据。由于保证数据传输过程中的安全性,需要对传输的数据进行加密和解密操作。对于使用 Jmeter 进行接口测试来说,可以使用一下方法,进行数据进行加密、解密操作。首先,将加密、解密算法的 jar 包,放到 jmeter 的安装路径下,例如 F:\Program Files\apache-jmeter-2.11\lib\ext。加密:创建一个前置处理器 BeanShell PreProcessor,调用加密算法,如下图所示:  解密:接口请求,返回的响应数据都是加密后的数据,要想直观的看到响应数据,需要对响应数据进行解密。创建一个后置处理器 BeanShell PostProcessor,调用解密算法: 

  • 查看测试结果时我们会发现有时候网络侧返回数据不符合要求时,Jmeter 给出的结果仍是通过的。这时候我们需要通过断言来判断网络的返回数据是否符合要求。比如,我们可以添加一个断言来检查返回信息中是否包含关键字 “errMsg” 来判断错误信息。首先添加一个相应断言,在要测试的响应字段中选择响应文本,在模式匹配规则中选择包括,勾选否,在要测试的模式中添加提一条,输入关键字“errMsg”。意思是检查网络返回结果中不包含“errMsg” 的才会判定为通过。如图所示:

  • 我们做压力测试时,想要测试多用户登陆时要怎么做?可以在线程属性中配置多个线程,

    但是这样只是同一个用户多次登录,多个不同的用户需要输入不同的用户名密码。当然我们可以写多个登录的 HTTP 请求,每个请求输入不同的参数,但是这样太傻了。这个时候我们可以通过CSV Data Set Config 来定义两个变量代表用户名和密码,然后传入不同的值即可实现多用户的登录:
    在登录的 case 中添加一个 CSV Data Set Config(添加-配置元件-CSV Data Set Config)

  • Filename:指定读取用户名和密码的文件我们会所有的用户名密码写到该文件中;

    File Encoding::写入用户名密码文件编码格式,不写的时候默认为 ANSI

    Varible Names定义文本文件中的变量用户名 =user 密码 =pwd,变量之间逗号分隔

  • 到上面 Filename 的路径下创建该文件并写入用户名密码,用户名和密码之间用逗号分开,不同用户名密码之间换行

  • 到 Jmeter 的脚本中将原本的用户名密码改为变量名,由于我们使用的是 Post 方法,所以到Body Data 中修改

  •  常见问题

  • 使用Jmeter进行接口测试或压力测试时,可能会遇到一些问题,下面简单列举几个常见问题

    JMeter异常关闭

    有时候在运行 JMeter 的过程中突然 JMeter 崩溃,这种异常关闭的情况多数是由于内存溢出的原因,在不设置 JVM Heap 大小的情况下,默认是 512MB。下图是 JMeter 2.13 版本的默认设置,文件在 %JMETER_HOME%/bin/jmeter.bat 中。

    可以根据实际情况适当加大,如果你的计算机有 4GB 以上的可用内存且是 64 位系统,建议把 -Xms 与 -Xmx 都设置成 2GB,其他参数都不用改变。

  • 响应数据中有乱码

    使用录制下来的测试脚本进行测试的时候,查看结果树,可能会出现响应数据中有乱码。

    方法一:找到安装目录 /bin 下面的 jmeter.properties 配置文件,打开 jmeter.properties 配置文件,找到 “sampleresult.default.encoding” 这个配置项,将原来的默认值 “ISO-8859-1” 修改为 “utf-8” ,重启jmeter,重新执行测试

  • 方法二:指定请求节点下,新建后置控制器 "BeanShell PostProcessor" ,其脚本框中输入:prev.setDataEncoding("UTF-8") ,并保存

  • 总结

  • Jmeter 除了可以在本地进行压力测试和接口测试外,还可以与 Jenkins 集成,构建整体化的压力测试方案。通过 Jenkins 运行 Jmeter 脚本,测试完毕后生成格式为 xml 的测试报告,调用 Ant 打包转换成 html 格式的报告。

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

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

相关文章

3、Spring之底层架构核心概念解析

BeanDefinition BeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如: class,表示Bean类型scope,表示Bean作用域,单例或原型等lazyInit:表示Bean是否是懒加载initMethodName:表示Bean初始化时要执行的方法destroyMethodName:表示Be…

善于打仗的人,没有特别大的名气和勇功

善于打仗的人,没有特别大的勇功 【安志强趣讲《孙子兵法》第15讲】 【原文】 见胜不过众人之所知,非善之善者也;战胜而天下曰善,非善之善者也。 【趣讲白话】 预判胜负没有超出常人的见识,算不上高明中最高明的&#x…

简单认识Docker的资源控制

文章目录 一、CPU资源限制1.设置CPU使用率上限2.设置CPU资源占用比(设置多个容器才有效)3.设置容器与CPU绑核 二、内存资源限制三、对磁盘I/O配额的限制 一、CPU资源限制 1.设置CPU使用率上限 Linux通过CFS(Completely Fair Scheduler&#…

【C语言学习】二分法查找有序数组中的数

二分查找的基本原理 二分查找的基本逻辑就是每次找区间的中间数,然后与要查找的数进行比较,不断的缩小区间,最后区间中只剩一个数,即为要查找的数。如果不是,则没有该数。 二分查找只适用于有序数组 以数组中的数从左…

[oneAPI] 手写数字识别-VAE

[oneAPI] 手写数字识别-VAE oneAPIVAE模型实现手写数字识别任务定义使用包定义参数加载数据VAE模型与介绍训练过程结果 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI:https://devcloud.intel.com/one…

web文件上传

文件上传指的是&#xff0c;将本地的图片、视频、音频上传到服务器&#xff0c;提供给其他用户浏览和下载的过程 前端需求 想要进行文件上传对于web前端来说有三个重要要素 1.<input type"file" name"image"> 提供这样的file文件上传格式 2. metho…

A - Bone Collector(01背包)

Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave … The bone collector had a big bag with a volume of V ,and along his tr…

IP库新增经过实践的Verilog 库

网上严重缺乏实用的 Verilog 设计。Project F 库是尝试让 FPGA 初学者变得更好部分。 设计包括 Clock- 时钟生成 (PLL) 和域交叉Display - 显示时序、帧缓冲区、DVI/HDMI 输出Essential- 适用于多种设计的便捷模块Graphics- 绘制线条和形状Maths- 除法、LFSR、平方根、正弦....…

x86 Linux系统下构建交叉编译工具(3)

接前一篇文章&#xff1a;x86 Linux系统下构建交叉编译工具&#xff08;2&#xff09; 本文参考以下文章&#xff1a; 建立交叉编译器 for arm &#xff08;binutils-2.17 gcc-3.4.6 glibc-2.3.6&#xff09; 特此致谢&#xff01; 上一回构建了binutils的交叉环境&#xff0…

虚实相生,深兰科技“产业元宇宙”探索数字经济新模式

运用深兰科技数字孪生技术生成的武汉江汉路 不用出门&#xff0c;也能在武汉江汉路逛街&#xff1f;创建虚拟数字人形象&#xff0c;用户就可以在基于数字孪生平台打造的元宇宙街区逛街购物。路过滑板店&#xff0c;地上随机掉落神奇胶囊&#xff0c;打开即发现一张满500减200的…

多模双芯LC光纤跳线应用下的光模块方案之争

从40G QSFP SR4光模块产品开始&#xff0c;多模MPO光纤跳线 逐步进入光模块用户的视野。随着新建数据中心的增多&#xff0c;该类光纤跳线也开始普及并被广泛应用。然而&#xff0c;对于不少10G/25G时代就已经建设好的“老旧”机房来说&#xff0c;机房内基本全部部署的是多模L…

lwIP更新记10:IP 冲突检测

lwip-2.2.0-rc1 版本于 2023 年 6 月 29 日发布&#xff0c;带来了我期盼已久的 IPv4 冲突检测 功能。 lwip-2.2.0-rc1 版本重新回归了 master 分支&#xff08;主分支&#xff09;&#xff0c;不再使用单独的稳定分支。 master 分支 是一个 Git&#xff08;版本控制程序&…

算法通关村——字符串反转问题解析

1. 反转字符串 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 1.1 交换 这一题的思路还是简单的&…

Linux系统简介

文章目录 1. UNIX与Linux发展史1.1 UNIX发展史1.2 Linux发展史1.2.1 Linux内核版本1.2.2 Linux主要发行版本 2. 开源软件简介2.1 典型的开源软件2.2 开源软件的特点2.3 支撑互联网的开源技术 3. Linux应用领域3.1 基于Linux的企业服务器3.2 嵌入式应用3.3 Linux在电影娱乐业 4.…

司徒理财:8.21黄金空头呈阶梯下移!今日操作策略

黄金走势分析 盘面裸k分析&#xff1a;1小时周期的行情局部于1896附近即下行通道上轨附近录得一系列的K线呈震荡下行并筑圆顶&#xff0c;上轨压制有效&#xff0c;下行通道并未突破&#xff0c;后市建议延续看下行。4小时周期局部录得一系列的纺锤线呈震荡&#xff0c;但行情整…

计算机视觉领域文献引用

Bag of freebies 炼丹白嫖加油包 Bag of freebies、致力于解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏差问题时&#xff0c;一个非常重要的问题是不同类别之间存在数据不平衡的问题。 一、数据增强篇 Data Augmentation &#xff08;1&#xff09;图片像素调整…

nodejs+vue+elementui实验室课程预约管理系统 t1g73

通过前面的功能分析可以将实验室课程管理系统的功能分为管理员、学生和教师三个部分&#xff0c;系统的主要功能包括首页、个人中心、教师管理、学生管理、教师课表管理、实验室信息管理、实验课程管理、预约记录管理、实验成绩管理、设备信息管理、借用记录管理、归还记录管理…

【西安、成都】山洪预警模拟与洪水危险性评价技术及2023年典型地区洪水淹没及损失分析复盘

气候变化背景下&#xff0c;极端天气导致的洪水事件将更加频发。快速城市化对流域下垫面的改变&#xff0c;及人类活动向洪泛区的扩张。二者共同使得全世界多数人类活动高度聚集区的洪水风险增加。洪水淹没危险性&#xff08;各种年遇型洪水淹没&#xff09;是洪水损失评估、风…

A. Two Semiknights Meet

题目描述 可知走法为中国象棋中的象的走法 解题思路 利用结构体来存储两个 K K K的位置 x , y x,y x,y&#xff0c;因为两个 K K K同时走&#xff0c;所以会出现两种情况 相向而行&#xff0c;两者距离减少 相反而行&#xff0c;两者距离不变 我们完全可以不考虑格子是好…

「2024」预备研究生mem-立体几何截面模型代绝对值得一次和二次函数

一、立体几何截面模型&代绝对值得一次和二次函数 二、练习题 凑配换元