栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JMeter-接口测试

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JMeter-接口测试

持续更新…
标记

文章目录
  • 1. JMeter开始
    • 1.1 JMeter简介
    • 1.2 安装JMeter
    • 1.3 JMeter和LoadRunner的区别
  • 2. JMeter应用
    • 2.1 JMeter发送GET请求
    • 2.2 JMeter发送POST请求
    • 2.3 JMeter请求参数类型(参数、消息体数据、文件上传)
    • 2.4 JMeter的HTTP请求默认值
    • 2.5 断言(做判断)
    • 2.6 设置变量
      • 2.6.1 用户自定义变量
      • 2.6.2 函数生成变量
      • 2.6.3 BeanShell变量
      • 2.6.4 CSV数据文件变量
    • 2.7 JMeter的正则表达式
    • 2.8 测试用例分离(测试驱动)
    • 2.9 JMeter的cookie管理器
    • 2.10 JMeter的授权设置
    • 2.11 测试报告-聚合报告
    • 2.12 如何将JMeter做成自动化测试平台
    • 2.13 优化自动化模板
    • 2.14 JMeter连接MySQL数据库


1. JMeter开始 1.1 JMeter简介

Apache JMeter是Apache组织开发的基于Java的压力测试工具。

适用的测试领域:

  • 用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。他可以用于测试静态和动态资源,例如静态文件,Java,小服务程序,CGI(公共网关接口),脚本,Java对象,数据库,FTP,服务器等等;JMeter可以用于对服务器,网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。
  • JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序是否返回了预期的结果;为了最多限度的灵活性,JMeter允许使用正则表达式创建断言。
  • JMeter可以用于对静态和动态资源(文件、Servlet、Perl脚本、Java对象、数据库和查询、FTP服务等等)的性能进行测试
  • 接口测试
  • 数据库压力测试
  • 批量产生测试数据
1.2 安装JMeter

下载JMeter
选一个下载


解压

JMeter是免安装的,所以我们直接将文件夹移动到想要存放的位置即可

配置环境变量
当前我的JMeter的路径为D:InstalledSProgram Filesapache-jmeter-5.4.1

新建系统变量
变量名:JMETER_HOME
变量值:D:InstalledSProgram Filesapache-jmeter-5.4.1

配置Path环境变量 %JMETER_HOME%bin

配置Classpath
添加%JMETER_HOME%libextApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar;

测试

启动JMeter

  • bat方式
  • jar方式

jar的方式,直接双击


使用bat的方式,双击,是在cmd中命令行中打开

cmd窗口关闭,jmeter也关闭

将ApacheJMeter.jar发送到桌面快捷方式,重命名,更改图标


接口文档 docsapiindex.html:


1.3 JMeter和LoadRunner的区别
  • 都是压力测试工具,都可以用来做性能测试,但是JMeter比较轻量级;
  • JMeter是用java语言编写的,需要java环境,LR不需要;
  • JMeter更偏向于功能和技术,LR更偏向于业务;
  • LR有强大的图表系统,但是JMeter这一方面的表现稍弱。
2. JMeter应用 2.1 JMeter发送GET请求

eg:
1)添加线程组
添加->线程(用户)->线程组

2)发起一个HTTP请求
添加->取样器->HTTP请求

3)填写信息



4)添加<察看结果树 >查看请求结果
添加->监听器->察看结果树

5)运行

关于响应结果是乱码的形式
我们这里要进行设置

对配置文件进行修改 bin目录下的jmeter.properties

查找sampleresult.default.encoding将编码方式改为utf-8,将#去掉
保存

重启JMeter,运行,发现已经没有乱码了

2.2 JMeter发送POST请求

eg:


添加<管理员登陆>POST请求

添加HTTP信息头
添加>配置元件->HTTP信息头管理器 Content-Type:application/json

添加<察看结果树>,运行


保存测试计划
文件->保存测试计划为
保存完成后

2.3 JMeter请求参数类型(参数、消息体数据、文件上传)


参数:键值对

参数和消息体数据只能二选一,设置了其中一个就无法设置另一个

消息体数据:可以是json或xml格式的参数
比如下面这种情况:

文件上传

2.4 JMeter的HTTP请求默认值

作用:HTTP请求默认值,会在发送HTTP请求发送的时候,自带参数,当你不填写请求信息的时候生效,填写信息后会取代默认值。
设置了默认值,方便我们后期改动地址。

eg:
添加HTTP请求默认值
添加->配置元件->HTTP请求默认值

由于我们将服务器名称和端口号设置为了HTTP请求默认值
所以<登陆管理员>和<查看指定id的床位信息>请求的服务器名称和端口号都不必填写


运行

2.5 断言(做判断)

eg:
给<登录管理员-POST>请求添加断言

添加>断言>响应断言

匹配模式

  • 包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式。
  • 匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,支持正则表达式。
  • 相等:响应内容要完全等于匹配的内容才代表成功,区分大小写,需要匹配的内容是正则表达式。
  • 字符串:返回结果包括指定结果的字符串,区分大小写,不支持正则表达式。
  • 否:反转检查结果,用于表示不包含,不匹配,不等于,没有和模式字符串相匹配的字符串,不支持正则字符串。
  • 或者:一个断言可以添加多个“要测试的模式”,使用or选项后,只要其中有一个模式匹配,断言将会成功;不选择or将默认为and选项,必须所有模式都匹配,断言才会成功。

    填写响应断言,选择测试字段<响应文本>,模式匹配选择<包括>,运行

    通过

    选择测试字段<响应代码>,模式匹配选择<相等>,运行

    通过
2.6 设置变量

在请求过程中,我们需要在请求中设置一些变量来测试不同场景。
JMeter中支持以下类型变量:

  • 用户自定义变量
  • 函数生成变量
  • BeanShell变量
  • 数据文件变量
2.6.1 用户自定义变量

eg:
以<登陆管理员-POST>为例,添加用户自定义变量
添加>前置处理器>用户参数

添加两个变量,一个用户名,一个密码

用户参数的使用,${变量名}
与postman中不同的是,postman中变量使用{{变量名}}

运行,通过

在<用户参数>中,我们再添加一个用户


在线程组中,改写线程数,让其请求2次

运行,这实际是一种数据驱动的实现方式

2.6.2 函数生成变量

eg:
JMeter有许多内置函数,比如生成随机数的函数__Random()
工具>函数助手对话框

选择Random函数,填写最小和最大值,点击生成,就自动帮我们生成了函数字符串

在<登陆管理员-POST>请求的消息体数据中,添加了一句

"userId":"${__Random(1,100,)}"


运行

还有很多别的内置函数,这里有时间在补充…

2.6.3 BeanShell变量

BeanShell官网

BeanShell

  • BeanShell是一种完全符合Java语法规范的脚本语言,并且拥有自己的一些语法和方法;
  • BeanShell是一种松散类型的脚本语言(这点与js类似);
  • BeanShell是用Java写成的一个小型的,免费的,嵌入式的Java源代码解释器,具有对象脚本语言的特性,非常精简;
  • BeanShell执行标准Java语言和表达式,另外包括一些脚本命令和语法。

JMeter中的BeanShell

  • 定时器:BeanShell Timer
  • 前置处理器:BeanShell PreProcessor
  • 采样器:BeanShell Sampler
  • 后置处理器:BeanShell PostProcessor
  • 断言:BeanShell 断言
  • 监听器:BeanShell Listener

BeanShell常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
vars-(JMeterVariables)操作:JMeter变量实际引用了JMeter线程中局部变量容器,本质上是Map,它是测试用例与BeanShell交互的桥梁,常用的方法:

// 定义jmeter变量
vars.put(String key, String value);
// 从jmeter中获取变量
vars.get(String key);
// log:写入信息到jmeter.log文件
log.info("Hello JMeter");

eg:
我们以<查看指定id的床位信息-GET>请求为例
添加>前置处理器>BeanShell预处理程序
这个前置处理器就相当于postman中的
Pre-request script


编写BeanShell 预处理程序

请求<查看指定id的床位信息-GET>的参数id的值改为${id}

运行,通过

日志打印完成

2.6.4 CSV数据文件变量

CSV数据文件变量:是指从外部的CSV文件中读取数据出来作为变量。
eg:
创建一个csv文件


以请求<登陆管理员-POST>为例
添加>配置文件>CSV数据处理文件

我们要将<用户参数>禁用,因为如果<用户参数>存在的情况下,它的优先级要高于CSV数据文件变量,所以要禁用

运行该线程组,通过

2.7 JMeter的正则表达式

引出:在接口测试过程中,经常需要接口之间关联调用,比如获取上一个接口的返回值,作为另一个接口的请求参数,那么就需要使用JMeter的正则表达式提取器,通过对响应的数据来提取指定的数据。

正则表达式-语法

JMeter的<后置处理器>的<正则表达式提取器>配置表

配置项描述
引用名称请求要引用的变量名称,如填写num,则可用${num}引用它
正则表达式匹配需要的内容
模板用$num$引用起来,如果在正则表达式中有多个匹配数据,num表示匹配到的第几个值给变量。如:$2$表示匹配到第2个值存储在变量中
匹配数字0代表随机取值,1代表全部取值
缺省值如果参数没有取到值,那默认给一个值让它取

eg:
以请求<查看指定id的床位信息-GET>为例
使用BeanShell预处理程序随机生成床位的id(范围:1000~2000)

运行,通过

如果我们要提取该床位对应寝室的id去做下一步的处理(利用寝室id检索同寝室的所有床位信息),就要用到正则表达式(请求之后,用正则表达式提取数据)
添加>后置处理器>正则表达式提取器

使用正则表达式提取<查看指定id的床位信息-GET>请求的响应体中的寝室id

假设我们要提取"dormitory":{"id":426,"dor_name"这段字符串中的426,那么这个提取的部分就应该用圆括号引起来(),方便将提取到的数字放到引用变量中,即"dormitory":{"id":(),"dor_name",里面的数字我们使用正则表达式代替.*?,即最后填入的正则表达式是"dormitory":{"id":(.*?),"dor_name"
注:
特殊字符.(点,句号)在正则表达式中用来表示除了"新行"之外的所有字符;
特殊字符*代表着 0 个或多个前面的内容;
特殊字符?代表着 0个或1个前面的内容 或 前面的内容是可选的。



再添加一个HTTP请求<查找对应id寝室的所有床位信息>,它的参数值的获取,就是从正则表达式提取器中的引用变量dor_id获取的。

运行,通过

2.8 测试用例分离(测试驱动)

适用于很多不同类型的测试用例在一个用例表中一起执行的情况。

eg:
新建一个CSV文件,用来存放测试用例信息。


新建一个线程组,添加HTTP请求默认值


添加循环控制器,CSV文件中的测试用例一共有6条,我们就设置执行6次
添加>逻辑控制器>循环控制器

加载CSV文件

添加<如果(If)控制器>,添加<如果(If)控制器>的目的是为了区分请求类型,是GET请求,还是POST请求。
添加>逻辑控制器>如果(If)控制器
判断是否是GET请求,下面这种是第一种方式

我们可以使用第二种方式,如下,使用这种方式性能更好
使用内置函数Groovy生成我们需要的语句


添加HTTP请求

添加响应断言

添加结果树,运行,通过

添加<如果(If)控制器>,判断是否是POST请求

添加HTTP请求

添加响应断言

添加HTTP信息头,添加结果树,运行,通过

2.9 JMeter的cookie管理器

如果HTTP请求的响应结果包含cookie,那么使用Jmetercookie管理器会自动将该cookie保存起来,而且以后会对该网站的请求都使用同一个cookie,每个JMeter线程都有自己独立的“cookie保存区域”。

eg:
使用这个网址来操作cookie
httpbin.org-A simple HTTP Request & Response Service.



添加线程组,添加HTTP请求默认值

添加,在这个线程组中的cookie都会由它保管

添加HTTP请求<设定cookie,重定向到cookie列表-GET>

添加结果树,启动线程,通过

再添加一个HTTP请求<返回cookie数据-GET>

添加结果树,启动线程,通过

如果把cookie管理器禁用掉,就没有不能管理cookie了,cookie数据不会被保存
比如,这里我们把cookie管理器禁用掉,启动线程组,通过

我们还可以在cookie管理器中,自己设定cookie值

cookie管理器,运行线程组,通过,我们发现在cookie管理器中设定的数据,一并被添加到了cookie数据中

2.10 JMeter的授权设置

很多时候,出于安全考虑,我们的接口并不希望对外公开,这个时候就需要使用授权(Authorization)机制授权过程验证你是否具有服务器所需数据的权限。当你在发送请求的时候,通常会包含参数,以确保请求具有访问和返回所需数据的权限。jmeter提供了授权类型,可以轻松地在jmeter本地应用程序中处理身份验证协议。

2.11 测试报告-聚合报告 2.12 如何将JMeter做成自动化测试平台 2.13 优化自动化模板 2.14 JMeter连接MySQL数据库
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号