Jmeter 接口测试总结

news2024/11/17 9:26:23

背景介绍

对于 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.coloradmin.cn/o/906332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14. 实现业务功能--帖子列表

1. 版块帖子列表 对应版块中显示的帖子列表以发布时间降序排列(desc)不传入版块 Id 返回所有帖子 2. 实现逻辑 用户点击某个版块或首页时,将版块 Id 做为参数向服务器发送请求 服务器接收请求,并获取版块 Id,查询对…

多领域模型效果测试指南

在我最近的写作创作实践中,我尝试了使用不同的模型来测试它们的效果。通过这些测试,我发现每个模型在不同任务上的表现和适用性都有所不同。 首先,对于写作创作领域,我发现生成式模型可以很好地生成创意性的文章和故事。当我使用…

STM32都学什么

一、什么是STM32? 对于STM32,从字面意思上来理解,ST是意法半导体,M是Microelectronics的缩写,其中32表示的是32位,那么整合起来理解就是:STM32就是指的ST公司开发的32位微控制器。在如今的32位控制器中&am…

【二叉树构建与遍历1】先序遍历+中序遍历构建一个二叉树并输出后序遍历 C++实现

思路: 先来一个例子: 先序遍历序列为:FDXEAG 中序遍历序列为:XDEFAG 要根据先序序列和中序序列确定这个二叉树,通用的步骤为: 1.根据先序序列的第一位确定这棵树的根; 2.在中序序列中找到…

LVS之keepalived

1、keepalived 概述 总结:Keepalived 软件就是通过VRRP协议来实现高可用功能。 应用场景:企业应用中,单台服务器承担应用存在单点故障的危险 单点故障一旦发生,企业服务将发生中断,造成极大的危害 VRRP通信原理&…

【CASS精品教程】CAD2016+CASS11.0安装教程(附CASS11.0安装包下载)

文章目录 一、CAD2016_x64安装二、CASS11.0安装1. 安装程序2. 安装补丁3. 安装注册机三、CASS11.0下载地址一、CAD2016_x64安装 CASS11.0.0.8 支持 AutoCAD2010-2023,大家可以根据自己的情况安装对应的版本,本文以CAD2016为例,CAD安装过程略去。 二、CASS11.0安装 点击订…

Pytorch 手写数字识别-MINIST 数据集训练

CNN 前期文章我们分享了tensorflow 的手写数字识别的训练以及识别过程,有网友私信是否写一下pytorch训练识别过程,本期文章我们来分享一下pytorch的手写数字训练人工智能TensorFlow(十六)MNIST手写数字识别 说到图片识别就不得不提卷积神经网络,我们会在后期详细介绍,或者…

docker启动容器失败:STATUS:‘ Exited ‘

先查看正在运行的容器 # 查看正在运行的容器 docker ps # 查看所有的docker容器 docker ps -a 这个时候如果显示的是up状态,那就是启动成功了。 状态为exited,所以没有启动成功。 解决问题 1、移除镜像 先把镜像移除掉 //移除一个镜像(出现问题可以移…

一篇文章看懂前端性能优化(2023详解)

性能优化这个词我们经常会在前端的工作或面试中遇到,这个东西说难好像也并不怎么难,毕竟谁都能说上几点。但是如果你想在工作上遇到各种场景的性能瓶颈时都有直击本质的性能方案,或者在面试时让面试官眼前一亮,那就不能只拘泥于『…

nodejs+vue+elementui大学生就业管理系统hch86

本学生就业管理系统以vue作为框架,b/s模式以及MySql作为后台运行的数据库, 本系统主要包括首页,个人中心,辅导员管理,学生管理,企业管理,工作类型管理,企业招聘管理,投简…

TOWE机房电源线的用料成分及导体材质大揭秘

在IDC数据机房中,各种制式的电源转换线是一个连接设备端与供电端的重要配件产品。平常我们在各大电商平台搜索电源转换线产品,会发现同一种电源线,有卖几十块钱的,也有十块钱不到的。同一产品出现较大价差的现象,最根本…

信息监理工程师-----监理内容

文章目录 信息监理工程师的监理内容1 四控1.1 质量控制1.2 进度控制1.3 投资控制1.4 变更控制 2 三管2.1 信息管理2.2 合同管理2.3 信息安全管理 3 一协调3.1 协调 信息监理工程师的监理内容 监理活动的主要内容被概括为"四控,三管,一协调". 1 四控 四控&#xff…

ES:一次分片设计问题导致的故障

### 现象: 1. 单节点CPU持续高 2.写入骤降 3.线程池队列积压,但没有reject 4.使用方没有记录日志 ### 排查 1.ES监控 只能看到相应的结果指标,无法反应出原因。 2.ES日志:大量日志打印相关异常(routate等调用栈&a…

docker安装Oracle11gR2

文章目录 目录 文章目录 前言 一、前期准备 二、具体配置 2.1 配置oracle容器 2.2 配置navicat连接 总结 前言 使用docker模拟oracle环境 一、前期准备 安装好docker #拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g #启动 docker run -…

书单背景图怎么设置,怎么把书单转成视频?

书单是一种记录阅读内容的方式,它可以让我们更好地跟踪我们的阅读进度并分享我们的阅读心得。有时候你想要将自己的书单转化为视频格式来与更多人分享,但你不知道如何做到这一点。在本文中,我将向你介绍如何设置书单背景图并将书单转成视频。…

操作系统-笔记-第二章-锁

目录 二、第二章——【锁】 1、互斥锁​编辑 2、信号量机制 (1)信号量机制——整形信号量 (2)信号量机制——记录信号量 (3)总结(重点——记录信号量) 3、信号量机制——实现…

数仓分类及基本概念

【数仓建设系列之二】数仓分类及基本概念 随着移动互联网的快速发展,数据的生产也成几何式的增长,传统意义上的数据库已经无法满足日益增长的需求,建设一个好的数仓,不仅可以为企业的决策和发展带来具有价值的指导意义&#xff0c…

Python自动化测试代理程序可用性

在网络爬虫和数据采集过程中,代理服务器扮演着重要的角色。然而,代理服务器的可用性经常会受到影响,给爬虫工作带来一定的挑战。本文将介绍如何使用Python自动化测试代理程序的可用性,为您提供具备实际操作价值的解决方案。让我们…

同为科技(TOWE)65W快充插排插线板,快人一步,乐享生活

在现代生活中,手机、平板、笔记本电脑等电子设备已成为人们生活中不可或缺的工具。然而,诸多电子产品在充电方面也出现了许多问题,比如充电过程慢、插口不够用、充电时温度过高等。随着随着技术的更新迭代,满足高功率、多接口且多…

机器学习与模式识别2:KNN(k近邻)

一、简介 首先,随机选择K个对象,而且所选择的每个对象都代表一个组的初始均值或初始的组中心值,对剩余的每个对象,根据其与各个组初始均值的距离,将他们分配各最近的(最相似)小组,然…