Jmeter 接口测试总结

背景介绍

对于 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 格式的报告。

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

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

相关文章

3d max插件CG MAGIC中的蜂窝材质功能可提升效率吗?

工作中能提升效率也都是大家所想的,对于设计师的一个设计过程中,可能想怎么样可以更快呀,是哪个步骤慢了呢? 这样的结果只能说会很多,但是建模这个步骤,肯定是有多无少的。 为了让模型更加逼真&#xff0c…

探索AIGC人工智能(Midjourney篇)(二)

文章目录 利用Midjourney进行LOGO设计 用ChatGPT和Midjourney的AI绘画,制作儿童绘本故事 探索Midjourney换脸艺术 添加InsightFaceSwap机器人 Midjourney打造专属动漫头像 ChatGPT Midjourney画一幅水墨画 Midjourney包装设计之美 Midjourney24节气海报插画…

【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

APP爬虫之-Protobuf协议逆向解析

在做APP抓取时,会发现有的APP Response回来的数据有“加密”。不知道返回的内容是什么。 如下: 如上,内容不是明文的,没办法解析数据。APP常见的对数据加密有三种情况:第一种是,用诸如AES这类加密算法对数…

HodlSoftware-免费在线PDF工具箱 加解密PDF 集成隐私保护功能

HodlSoftware是什么 HodlSoftware是一款免费在线PDF工具箱,集合编辑 PDF 的简单功能,可以对PDF进行加解密、优化压缩PDF、PDF 合并、PDF旋转、PDF页面移除和分割PDF等操作,而且工具集成隐私保护功能,文件只在浏览器本地完成&…

vs2019 ,c++的STD库全局函数 _Pocma 的思考

(1)在阅读vs2019上的 STL库的 map 源码时,遇到了这个函数,之前,在别的源码中也经常出现这个函数。那么这个函数起什么作用呢? 在1880行,有对该函数的调用。其定义如下图:&#xff0…

Jetbrains IDE新UI设置前进/后退导航键

背景 2023年6月,Jetbrains在新发布的IDE(Idea、PyCharm等)中开放了新UI选项,我们勾选后重启IDE,便可以使用这一魔性的UI界面了。 但是前进/后退这对常用的导航键却找不到了,以前的设置方式(Vi…

Java10(异常处理)

0.复习面向对象 1.异常的体系结构 异常:在Java语言中,将程序执行中发生的不正常情况.(开发中的语法错误和逻辑错误不是异常) 异常事件分两类(它们上一级为java.lang.Throwable): Error Java虚拟机无法解决的严重问…

使用kubeadm方式快速部署一个K8S集群

目录 一、环境准备 二、环境初始化 三、在所有主机上安装相关软件 1、安装docker 2、配置k8s的yum源 3、安装kubelet、kubeadm、kubectl 四、部署Kubernetes Master 五、加入Kubernets Node 六、部署CNI网络插件 七、测试k8s集群 一、环境准备 我的是CentOS7系统&am…

【Linux】socket 编程基础

文章目录 📕 网络间的通信📕 socket 是什么1. socket 套接字2. 套接字描述符3. 基本的 socket 接口函数3.1 头文件3.2 socket() 函数3.3 bind() 函数struct sockaddr主机序列与网络序列 3.4 listen() 函数3.5 connect() 函数3.6 accept() 函数IP 地址风格…

C# Winfrom通过COM接口访问和控制Excel应用程序,将Excel数据导入DataGridView

1.首先要创建xlsx文件 2.在Com中添加引用 3. 添加命名空间 using ApExcel Microsoft.Office.Interop.Excel; --这样起个名字方面后面写 4.样例 //点击操作excelDataTable dt new DataTable();string fileName "D:\desktop\tmp\test.xlsx";ApExcel.Application exA…

04.sqlite3学习——DDL(数据定义:创建和删除表)

目录 DDL(数据定义:创建和删除表) SQLite 创建表 语法 实例 字段修饰符 primary key 定义主键列 AUTOINCREMENT 自动增长 UNIQUE 字段的值唯一 NOT NULL 字段的值不为空 SQLite 修改表 增加字段add 修改表名rename to SQLite 删…

WPF基础入门-Class5-WPF命令

WPF基础入门 Class5-WPF命令 1、xaml编写一个button&#xff0c;Command绑定一个命令 <Grid><ButtonWidth"100"Height"40" Command"{Binding ShowCommand}"></Button> </Grid>2、编写一个model.cs namespace WPF_Le…

多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比

多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比 目录 多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预…

开源的经济影响:商业与社区的平衡

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

使用锐捷RG-EG210G-E路由器实现两个IP地址冲突的局域网互通

需求背景&#xff1a; 之前写过一篇博文使用路由器实现三个不同网段局域网内的计算机相互访问&#xff0c;链接如下 https://blog.csdn.net/agang1986/article/details/131862160 当前的需求又发生了变更&#xff0c;有两个独立的局域网&#xff0c;内部的计算机个数和配置的IP…

Spring boot 集成单元测试

1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> 2. 3.编写测试类 package com.enterprise;import com.enterpr…

一文1500字从0到1搭建 Jenkins 自动化测试平台

Jenkins 自动化测试平台的作用 自动化构建平台的执行流程&#xff08;目标&#xff09;是&#xff1a; 我们将代码提交到代码托管工具上&#xff0c;如github、gitlab、gitee等。 1、Jenkins要能够检测到我们的提交。 2、Jenkins检测到提交后&#xff0c;要自动拉取代码&#x…

opencv 案例实战01-停车场车牌识别实战

需求分析&#xff1a; 车牌识别技术主要应用领域有停车场收费管理&#xff0c;交通流量控制指标测量&#xff0c;车辆定位&#xff0c;汽车防盗&#xff0c;高速公路超速自动化监管、闯红灯电子警察、公路收费站等等功能。对于维护交通安全和城市治安&#xff0c;防止交通堵塞…

探讨uniapp的路由与页面生命周期问题

1 首先我们引入页面路由 2 页面生命周期函数 onLoad() {console.log(页面加载)},onShow() {console.log(页面显示)},onReady(){console.log(页面初次显示)},onHide() {console.log(页面隐藏)},onUnload() {console.log(页面卸载)},onBackPress(){console.log(页面返回)}3 页面…