Jmeter接口测试教程

文章目录

  • 1 发送请求
  • 2 添加HTTP信息头管理器
  • 3 查看结果
  • 4 断言
  • 5 用户参数&函数助手
    • 5.1 用户自定义变量
    • 5.2 函数生成变量
    • 5.3 BeanShell变量
    • 5.4 CSV数据文件变量
  • 6 正则匹配
  • 7 JMeter接口测试数据分离驱动应用
    • 7.1 HTTP请求默认值
    • 7.2 HTTP信息头管理器
    • 7.3 循环控制器
    • 7.4 CSV数据文件设置
    • 7.5 IF控制器处理GET请求
      • 7.5.1 添加IF控制器
      • 7.5.2 在IF控制器下添加HTTP请求
      • 7.5.3 给HTTP请求添加响应断言及查看结果树
    • 7.6 IF控制器处理POST请求
  • 8 Cookie的介绍与应用
  • 9 授权设置
    • 9.1 Basic Auth
    • 9.2 Digest Auth
  • 10 接口测试报告讲解
    • 10.1 聚合报告
    • 10.2 HTML报告

安装: JMeter详细安装教程
打开:双击ApacheJMeter.exe即可
Jmeter接口测试教程_第1张图片

1 发送请求

右击测试计划 - 添加 - 线程(用户)- 线程组 >> 右击线程组 - 添加 - 取样器 - HTTP请求
Jmeter接口测试教程_第2张图片

2 添加HTTP信息头管理器

右击HTTP请求 - 添加 - 配置元件 - HTTP信息头管理器
Jmeter接口测试教程_第3张图片

3 查看结果

右击HTTP请求 - 添加 - 监听器 - 查看结果树
Jmeter接口测试教程_第4张图片

4 断言

右击HTTP请求 - 添加 - 断言 - 响应断言
各个匹配模式含义如下:

  • 包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式。
  • 匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,不区分大小写,支持正则表达式。
  • 相等:响应内容要完全等于需要匹配的内容才代表成功,区分大小写,需要匹配的内容是字符串正则表达式。
  • 字符串:返回结果包含指定结果的字符串,不支持正则表达式。
  • 否:不进行匹配
    Jmeter接口测试教程_第5张图片

5 用户参数&函数助手

JMeter支持以下类型变量:

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

5.1 用户自定义变量

右击HTTP请求 - 添加 - 前置处理器 - 用户参数。例如:设置变量名为app,值为weather.today,在请求时引用变量格式为:${app}
Jmeter接口测试教程_第6张图片
Jmeter接口测试教程_第7张图片

5.2 函数生成变量

JMeter由许多内置的函数,可以生成随机数。
点击菜单栏”工具“选项 - 函数助手对话框 - 下拉选择Random函数。
Jmeter接口测试教程_第8张图片

5.3 BeanShell变量

什么是Bean Shell?
BeanShell是一种完全符合Java语法规范的脚本语言,并且拥有自己的一些语法和方法;
BeanShell是一种松散类型的脚本语言(这点和JS类似);
BeanShell是用Java写出的一个小型的、免费的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简;
BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和与语法。
官网:https://beanshell.github.io/intro.html

JMeter有哪些Bean Shell?

  • 定时器: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 - 写入信息到JMeber.log文件

    log.info("hello JMeter!");

BeanShell实践案例
右击HTTP请求 - 添加 - 前置处理器 - BeanShell预处理程序
Jmeter接口测试教程_第9张图片
Jmeter接口测试教程_第10张图片

5.4 CSV数据文件变量

CSV数据文件变量是指从外部csv文件读取数据出来作为变量。
设置步骤:

  1. 创建CSV数据文件(推荐用Notepad++创建,文件编码为UTF-8)
    Jmeter接口测试教程_第11张图片
  2. 右击HTTP请求 - 添加 - 配置元件 - CSV数据文件设置 - 浏览
    Jmeter接口测试教程_第12张图片

6 正则匹配

问题思考:接口测试过程中经常需要接口之间关联调用,比如获取上一个接口的返回值,作为另一个接口的请求参数,那么该如何处理呢?
操作案例:从“实时天气-当天”请求的响应数据中匹配weaid的值,然后创建“实时天气-未来7天”请求引用weaid作为参数。
设置步骤:右击HTTP请求 - 添加 - 后置处理器 - 正则表达式提取器,字段说明如下:

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

正则表达式说明

  • ()括起来的部分就是要提取的。
  • .匹配任何字符串。
  • +一次或多次。
  • ?在找到第一个匹配项后停止。
    Jmeter接口测试教程_第13张图片
    Jmeter接口测试教程_第14张图片
    Jmeter接口测试教程_第15张图片

7 JMeter接口测试数据分离驱动应用

CSV数据文件:
在这里插入图片描述

7.1 HTTP请求默认值

设置步骤:右击线程组 - 添加 - 配置元件 - HTTP请求默认值
Jmeter接口测试教程_第16张图片

7.2 HTTP信息头管理器

设置步骤:右击线程组 - 添加 - 配置元件 - HTTP信息头管理器
Jmeter接口测试教程_第17张图片

7.3 循环控制器

设置步骤:右击线程组 - 添加 - 逻辑控制器 - 循环控制器
Jmeter接口测试教程_第18张图片

7.4 CSV数据文件设置

设置步骤:右击循环控制器- 添加 - 配置元件 - CSV数据文件设置
Jmeter接口测试教程_第19张图片

7.5 IF控制器处理GET请求

7.5.1 添加IF控制器

设置步骤:右击循环控制器 - 添加 - 逻辑控制器 - IF控制器
Jmeter接口测试教程_第20张图片
Jmeter接口测试教程_第21张图片

7.5.2 在IF控制器下添加HTTP请求

设置步骤:右击IF控制器 - 添加 - 取样器 - HTTP请求
Jmeter接口测试教程_第22张图片

7.5.3 给HTTP请求添加响应断言及查看结果树

设置步骤:右击HTTP请求 - 添加 - 断言 - 响应断言
Jmeter接口测试教程_第23张图片
设置步骤:右击HTTP请求 - 添加 - 监听器 - 查看结果树,运行结果如下:
Jmeter接口测试教程_第24张图片

7.6 IF控制器处理POST请求

添加IF控制器
Jmeter接口测试教程_第25张图片
在IF控制器下添加HTTP请求
Jmeter接口测试教程_第26张图片
给HTTP请求添加响应断言
Jmeter接口测试教程_第27张图片
给HTTP请求添加查看结果树,运行结果如下:
Jmeter接口测试教程_第28张图片

8 Cookie的介绍与应用

  • 介绍
    如果你有一个HTTP请求,器返回结果里包含一个cookie,那么使用JMeterCookie管理器会自动将该cookie保存起来,而且以后所有对该网站的请求都使用同一个cookie。每个JMeter线程都有自己独立的cookie保存区域。
  • 应用
    接口文档:http://httpbin.org/
    请求url:http://httpbin.org/cookies/set,该请求会返回cookie,Cookie内容可以通过自定义参数设置。这里我们设置Cookie内容如下:
    Jmeter接口测试教程_第29张图片
    添加Cookie管理器:右击线程组 - 添加 - 配置元件 - HTTP Cookie管理器,运行之后我们可以在查看结果树中看到cookie:
    Jmeter接口测试教程_第30张图片
    禁用HTTP Cookie管理器则不会保存cookie:
    Jmeter接口测试教程_第31张图片
    自定义添加cookie
    Jmeter接口测试教程_第32张图片

9 授权设置

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

9.1 Basic Auth

基本身份验证是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和对应的密码。

实践案例
请求接口为:http://httpbin.org/basic-auth/{username}/{password},设置用户名为test,密码为2022

  1. 新建HTTP请求名称为basic-auth设置如下:
    Jmeter接口测试教程_第33张图片
  2. 添加HTTP授权管理器:右击HTTP请求 - 添加 - 配置元件 - HTTP授权管理器,配置如下:
    Jmeter接口测试教程_第34张图片
  3. 执行之后请求内容中带有授权信息Authorization: Basic dGVzdDoyMDIy,而dGVzdDoyMDIy这个数值就是用用户名:密码经过Base64编码后计算出来的。
    Jmeter接口测试教程_第35张图片

9.2 Digest Auth

Digest Auth是一个简单的认证机制,最初是为HTTP协议开发的,因此也常叫做HTTP摘要。其身份验证机制非常简单,它采用哈希加密方法,以避免用明文传输用户的口令。摘要认证就是要核实参与通信的两方都知道双方共享的一个口令。

实践案例
请求接口为:http://httpbin.org/digest-auth/{qop}/{username}/{password},{qop}这个参数规定server支持哪种保护方案。client能从列表中(auth, auth-int)选择一个。

  • auth表示仅仅进行身份查验。
  • auth-int表示进行查验外,另一些完整性保护。
  1. 新建HTTP请求:digest-auth,设置用户名为test,密码为2022,配置如下:
    Jmeter接口测试教程_第36张图片
  2. 添加HTTP授权管理器,配置如下:
    Jmeter接口测试教程_第37张图片
  3. 执行之后查看响应结果:
    Jmeter接口测试教程_第38张图片

禁用HTTP授权管理器则会运行失败,如下:
Jmeter接口测试教程_第39张图片

10 接口测试报告讲解

批量执行完接口测试之后,我们需要查看测试报告,在之前单个接口调试我们是通过”查看结果树“查看结果,但是当大批量执行接口测试之后依旧这样查看肯定会很低效,那么该如何设置呢?

10.1 聚合报告

聚合报告是一个比较精简的报告元件,可以查看每个接口的性能情况与执行结果。
设置步骤:右击线程组 - 添加 - 监听器 - 聚合报告
报告各个参数含义如下:

  • Samples:本次场景中一共完成了多少个请求
  • Average:平均响应时间(单位:ms)
  • Median:响应时间的中值(单位:ms)
  • 90%Line:所有请求中90%的响应时间。
  • Min:最小响应时间(单位:ms)
  • Max:最大响应时间(单位:ms)
  • Error:出错率
  • Troughput:吞吐量
  • Received:响应数据大小
  • KB/sec:以流量做衡量的吞吐量
    Jmeter接口测试教程_第40张图片

10.2 HTML报告

有时候我们需要将测试报告以HTML附件形式发送给各个项目成员,那么需要生成HTML报告。JMeter3.0以后引入了Dashboard Report,用于生成HTML格式图形化报告的扩展模块。

  • 生成步骤:
    打开cmd进入jmeter\bin目录执行命令:jmeter -n -t E:\JMeterProject\report.jmx -l E:\JMeterProject\report.jtl -e -o E:\JMeterProject\report
    Jmeter接口测试教程_第41张图片

  • 命令的参数:
    -n:以非GUI形式运行JMeter(直接用命令行模式启动)
    -t:jmeter脚本路径
    -l:result.jtl运行结果保存路径(.jtl)此文件必须不存在
    -e:在脚本运行结束后生成html报告
    -o:用于存放html报告目录(目录需存在),不加该参数默认生成到bin\report-output

  • 生成的测试报告样式如下:
    Jmeter接口测试教程_第42张图片
    Jmeter接口测试教程_第43张图片

你可能感兴趣的:(接口测试,JMeter,jmeter,正则表达式)