首页 > 其他分享 >Jmeter 性能接口一本通

Jmeter 性能接口一本通

时间:2024-06-14 21:13:41浏览次数:33  
标签:控制器 匹配 请求 一本 响应 线程 接口 Jmeter

前言

学习Jmeter 接口自动化的难点在于场景设计和模块间的组合使用,因此实际操作过程中我们会遇到过很多难以解决的问题。本书既是对 jmeter 知识框架的一个总结,也是为了方便大家更好的学习使用它。从 jmeter 基础介绍入手,逐级深入,一直延伸到接口自动化持续集成框架和 DDT 数据驱动。内容涵盖了 jmeter 的各元件用法和组合场景使用方法,以及一些不常见的测试技巧。同时也对一些常用的性能指标和瓶颈分析做出了阐述。高阶内容涉及到了 Docker 的使用命令,java 测试脚本的编写,网络爬虫的实际操作。相信大家认真阅读完这本书之后,在技术上一定会有一个质的提升!

Jmeter 性能接口一本通

1:环境部署
1:http://jmeter.apache.org/下载最新版本的 JMeter,解压文件到任意目录2:安装JDK,配置环境变量
JDK 环境变量配置
3:应当避免jdk 路径与jmeter 路径有中文和空格,否则会有异常

2:面板介绍

3:核心组件

3.1:线程组与压力测试

3.1.1:线程组

线程组是一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下。线程组控制 JMeter 执行你的测试计划中的线程数量。它允许你:

设置线程数
设置ramp-up period
设置测试要执行的次数

每个线程都会独立的运行测试计划,互不干扰。多个线程用于模仿对服务器的并发访问。

ramp-up period 指 JMeter 用于执行全部请求的时间
如果设置了 100 个线程,并且 ramp-up period 是 2 秒,那么 JMeter 将在 2 秒钟之内启动 100 个线程.如果循环次数是 2,那么 jmeter 将在 2 秒之内发送 200 个请求(100*2) 如果循环次数设置为永远,那么 jmeter 将以最大可能去发送请求,以此测试出最大并发数

3.1.2:阶梯加压线程组(Stepping Thread Group)

1:this group will start:表示总共要生成的线程数,如图:设置为:200 个,表示总共会加载到 200 个线程
2:first,wait for:第一个线程从点击执行之后多长时间开始加载,如图:设置为 0 秒,表示点击执行之后立即执行
3:then start:初次加载多少个线程,如图:设置为 0 个,表示初次不加载线程

4:next add:之后每次加载多少个线程,如图:设置为 20 个,表示每个梯次加载 20 个线程

5:threads every:当前运行多长时间后再次加载线程,及每一次加载完成之后的持续时间,如图:设置为 5 秒,每梯次加载完线程之后运行 5 秒
6:using ramp-up:加载线程的时间,如图:设置为 0 秒,表示每一次加载立刻完成

7:then hold load for:线程全部加载完之后运行多长时间,如图:设置为 50 秒,表示最后 200 个线程加载完之后再持续 50 秒

8:finally,stop/threads every:每多长时间释放多少个线程,如图:设置为 20 个和 5 秒,表示所有
持续负载结束之后每 5 秒钟释放 20 个线程
注意:阶梯加压线程组需要和 Active Threads Over Time(不同时间活动数量展示)结合起来,这样能看到动态的阶梯加压效果

3.1.3:Arrivals Thread Group(到达线程组)

官方解释,到达的意思就是一个线程迭代的开始。也可以理解为一个虚拟用户开始迭代。它是描述负载的另一种方式。试用场景:“当用户每分钟需要购买 100 张票的时候,系统能否保持良好的性能?”

脚本框架实例讲解:

1:利用我们的平台设计一个登录接请求
2:在请求下面添加常量计时器
3:添加一些监听器,比如聚合报告,吞吐量,活动线程数,响应时间,点击率等等
利用 Arrivals 线程组进行负载:
当所有 user 都开始迭代时,JMeter 将依据压力自动创建新线程,因此可能会产生大量线程并导致”内存不足”,可以使用Concurrency Limit 字段来限制最大线程数。
目标到达率:(到达/分钟):120 加速时间(分钟):1
步进(加速几次):2
保持目标到达率(分钟):2
目标到达率定义了目标负载在一分钟内开始的迭代次数。我们设置为每分钟 120(每秒2)。
加速时间:定义了达到目标负载水平的时间。步进:定义实现目标负载级别的步骤数
保持目标到达率时间:定义目标负载水平持续时间。这里我们有两个选择:分钟或秒。Thread Iterations Limit 定义为每个虚拟用户运行的迭代次数。字段为空说明每个用户将运行无限次迭代,直到测试计划结束。

调整定时器
我们将定时器修正为 0ms,它意味着每次迭代都可以快速通过,大概时间是 50ms

观察运行结果发现,jmeter 从始至终只启动了一个线程,并且在三分钟左右的时间内迭代了 331 次

它说明了这种场景下,一个线程就足够在约定时间内完成迭代次数,不需要启动多余的线程。
我们接下来尝试另一种场景
现在我们把定时器调整为一分钟,也就是 60000ms,然后再次运行脚本


观察结果发现,jmeter 在一分钟的时间点瞬时启动了 90 个线程,陆续启动了 121 个线
程去满足预期负载,最终迭代次数依然为 331 次

3.2:测试片段(Test Fragment)

jmeter 测试片段使用的时候需要和 include Controller(包含控制器)或者Module Controller(模块控制器)配合,主要的作用是模块化测试流程,将复用性高的脚本封装成模块,简化测试流程。

3.3:逻辑控制器

逻辑控制器允许我们定制JMeter 发送的请求。它控制器可能包话如下的子元件:取样器(请求),配置元件,其它的逻辑控制器。逻辑控制器能够更改它元件中的请求顺序。他们可以自己修改请求,使 JMeter 重复请求,等等。

3.3.1:ForEach 控制器

ForEach 控制器一般和用户自定义变量一起使用,用于可以遍历读取相关的返回值。该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。
·Input Variable Prefix:输入变量前缀
·Output variable name:输出变量名称
·Start index for loop(exclusive):循环开始的索引(默认从 1 开始,如果没有 1 开始的变量,执行时会报错)
·End index for loop(inclusive):循环结束的索引
·Add””before number:输入变量名称中是否使用“”进行间隔。
注:foreach 控制器通常和表达式提取器一起使用。表达式提取值应为-1,表示取全部值,然后 sampler 在 foreach 控制器下执行遍历。


3.3.2:循环控制器

指定其子节点运行的次数,可以使用具体的数值,也可以设置为变量
1:勾选永远:表示一直循环下去
2:如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘。(线程数*循环控制器数值)

3.3.3:While Controller

While 控制器,与开发语言中的While 功能一致。直到条件为false 时,停止运行循环执行一个请求,仅判断一种状态下退出循环
Condition 条件如下:
1:为空(不输入任何值) -- 直到某次请求执行失败才退出循环
2:LAST -- 直到最后一个请求请求失败才退出循环
3:其它-- 条件值等于"false"时,退出循环
4:Contion 可以输入计算结果等于“false”的变量、函数。
例:\({num} ==10 判断变量num 的值是否为 10,不为 10 则退出循环 \){ javaScript(${count}<A&& \({code}=="B")} 表示同时满足\){count}<A 和${code}=="B" 两个条件才进入循环体

\({ javaScript("\){stopWhile}"!="OK")} 表示当我的控制器没有接收到stop=while 回执时, 控制器内的程序将持续进行。直到 stopwhile=ok 时,跳出循环体

3.3.4:If Controller(判断接口分支)

根据给定表达式的值决定是否执行该节点下的子节点,默认使用 javascript 的语法进行判断
Interpret Condition as Variable Expression?:判断变量值是否等于字符串true(不区分大小写)
Evaluate for all children:在每个子结点执行前都会计算表达式

3.3.5:交替控制器(交替执行控制器下的业务)

ignore sub-controller blocks:勾选后,子控制器每次只能发起一个请求Interleave accross threads:勾选之后,控制器下的子元素会依次执行
如果交替控制器挂在循环控制器之下,那么循环次数与线程数的作用相同

6:Switch Controller

Switch 控制器通过给该控制器中的 Value 赋值,来指定运行哪个采样器。有两种赋值方式:
·第一种是数值,Switch 控制器下的子节点从 0 开始计数,通过指定子节点所在的数值

来确定执行哪个元素。
·第二种是直接指定子元素的名称,比如采样器的 Name 来进行匹配。当指定的名称不存在时,不执行任何元素。
当Value 为空时,默认执行第 1 个子节点元素。例:Switch Controller 选择的值为客服登录

3.3.6:模块控制器(允许跨线程组调用)

模块控制器,用于跳转到选定的控制器位置并执行对应的控制器下的sampler。常用来做接口自动化的业务解耦。
注:sampler 一定要在某个控制器下,否则不能执行

应用场景: 业务逻辑的跳转
Module to Run: 选择需要跳转到的目标控制器

3.3.7:Runtime Controller

运行时间控制器,设置控制器中的请求运行时间,单位:秒
Runtime(seconds): 配制需要设置的运行时间,单位秒在约定时间内,脚本会持续运行

3.3.8:事务控制器

勾选了generate 之后,事务控制器下的所有 sampler 在结果树中都会被归入一个模块。并且在聚合报告中,这些sampler 的响应数据会被汇总

3.4:核心配置元件

3.4.1:CSV Data Set Config

在使用JMeter 的时候,往往需要参数化一些数据,常用到的就是CSV Data Set Config Filename:文件名,指保存信息的文件目录,可以相对或者绝对路径(比如:D:\ceshi.Txt) File encoding:csv 文件编码,可以不填
Variable Names:变量名,多个变量用“,”分开。
Delimiter:csv 文件中的分隔符(用”\t”代替tab 键)(一般情况下,分隔符为英文逗号)
Allow quoted data:是否允许引用数据
Recycle on EOF :到了文件尾处,是否循环读取参数,选项:true 和false。因为
CSV Data Set Config 一次读入一行,分割后存入若干变量交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入
Stop thread on EOF:到了文件尾处,是否停止线程,选项:true 和false


2:HTTP Cookie 管理器
用来存储浏览器产生的用户信息
Clear Cookies each Iteration:每次迭代清空 cookies,GUI 中定义的任何 cookie 都不会被清除。
Implementation: 默 认 HC4CookieHandler Cookie Policy:将用于管理 Cookie 的 cookie 策略

3:HTTP 信息头管理器

3.4.2:HTTP 请求默认值

默认http 请求的值,如server、ip、port、Protocol 甚至path、parameters,都可以设置

Advanced:
Proxyserver:设置代理服务器,设置成功之后可以用 fidder 或者其它的抓包工具反向抓取jmeter 的请求:
Response timeout:设置响应超时时间,与响应时间断言配合使用。如果请求的响应时间超出该值,请求会中断并在断言结果里面打印异常

3.4.3:JDBC Connection Configuration

做JDBC 请求,首先需要两个 jar 包:mysql 驱动-mysql-connector-java-5.1.13-bin.jar 和sqlServer 驱动-sqljdbc4.jar,将这两个jar 包放到Jmeter 目录中的lib 文件下,然后重启Jmeter

Variable Nam
数据库连接池的名称,因为一个测试计划可以有多个 JDBC Connection Configuration,每个可以取不同的名称。在jdbc request 中通过这个名称选择合适的连接池进行使用。Connection Pool Connetion:连接池参数配置,基本保持默认,根据需要进行修改; Max Number of Connections: 最大连接数;如果做性能时,建议填 0,如果默认为 10, 最大只能连接 10 个线程;
Max Wait(ms):最大等待时间,单位毫秒;
Time Between Eviction Runs(ms):有空闲的线程数,释放不使用的线程; Auto Commit:自动提交,默认为true,如修改数据库时,自动 commit; Transaction isolation:事务隔离(默认);
Connection Validation by pool:验证连接池; Test While idle:
Soft Min Evictable Idle Time(ms):
Validation Query:
Database Connection Configuration:数据库连接配置:
Database URL:数据库连接url;jdbc:mysql://localhost:3306/dbname JDBC Driver class:数据库驱动;com.mysql.jdbc.Driver

Username:用户Password:密码

附上一些常用的,没用到的数据库连接配置
MySQL
Driver class com.mysql.jdbc.Driver org.gjt.mm.mysql.Driver Database URL jdbc:mysql://host[:port]/dbname PostgreSQL
Driver class org.postgresql.Driver Database URL jdbc:postgresql:{dbname} Oracle
Driver class oracle.jdbc.OracleDriver Database URL
jdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no}))(c onnect_data=(sid={sid})))
Microsoft SQL Server (MS JDBC driver)
Driver class com.microsoft.sqlserver.jdbc.SQLServerDriver Database URL jdbc:sqlserver://host:port;DatabaseName=dbname

3.4.4:Random Variable

配置生成随机数,自定义输出格式,最大最小值,以及是否为每个线程单独生成
Variable Name: 随机数变量名Output Format: 生成的随机数前缀Minimum Value: 最小值
Maximum Value: 最大值
Per Thread (User): True 每个线程生成一个随机数

3.4.5:用户定义的变量

当前的线程组内所有取样器(即博主的HTTP 请求)都可以引用变量


3.4.6:计数器

启动:初始值
递增:每次执行增加的值最大值:计数上限
Number format:计数格式,如果为 0,结果就是 1,2…;如果填 00,结果就是 01,02…
引用名称:引用计算器使用的名称 ${引用名称}
与每用户独立的跟踪计数器:当使用多线程运行的时候,选择该项,会给每个线程配置一个独立的计数器
计算器以循环次数为依据,每次循环递增


3.5:各种类型的请求

取样器指示JMeter 向服务器发送请求

3.5.1:Debug Sampler

Debug Sampler 会把我们自定义的变量输出在response data 中,方便我们调试的时候使用

3.5.2:HTTP 请求

名称:用于标识一个请求
注释:对于测试没任何影响,仅用来记录用户的注释信息
服务器名称或IP:http 请求发送的目标服务器名称或者 IP 地址,比如
http://www.baidu.com
端口号:目标服务器的端口号,默认值为 80
协议:向目标服务器发送http 请求时的协议,http/https,大小写不敏感,默认 http
方法:发送http 请求的方法

路径:目标的URL 路径(不包括服务器地址和端口)
Content encoding :内容的编码方式,默认值为 iso8859
自动重定向:如果选中该项,发出的http 请求得到响应是 301/302,jmeter 会重定向到新的界面
Use keep Alive:jmeter 和目标服务器之间使用 Keep-Alive 方式进行HTTP 通信(默认选中)
Use multipart/form-data for POST:勾选之后解决请求参数中文乱码

3.5.3:JDBC Request

这个Sampler 可以通过sql 语句向数据库发送一个jdbc 请求,并对获取返回的数据进行操作。它经常需要和JDBC Connection Configuration(配置数据库连接的相关属性)一起使用
Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration 的Variable Name Bound Pool 名字保持一致
Query:填写的sql 语句
Parameter valus:参数值
Variable names:保存sql 语句返回结果的变量名
Result variable name:创建一个对象变量,保存所有返回的结果Query timeout:查询超时时间
Handle result set:定义如何处理由callable statements 语句返回的结果

3.5.4:Dummy Sampler(模拟请求)

它用于模拟一个接口请求,效果类似于Mock。
我们可以设置响应码、响应信息、延迟时间(latency)、响应时间、模仿响应时间、请求数据、响应数据;
它的意义在于:当服务器还没有开发完成时,帮助我们调试脚本;
我们可以通过后置处理器获取Dummy Sampler 里面的信息,供后面的业务使用;

3.5.5:Java 请求

Jmeter 中的 java 请求,同 Dummy Sampler 一样, 可以用来模拟一个接口的请求和返回。
Sleep_Time:预置接口响应时间ResponseCode:预置响应码ResponseMessage:预置响应信息
Status:设置接口返回状态(通过或者不通过) SamplerData:预置请求信息
ResultData:预置响应信息实例如下:


3.5.6:FTP 请求

ftp 请求分为两种,一种是从 ftp 下载文件,一种是从 ftp 上传文件。只需要配置 ftp sampler 即可。

确保ftp 的用户名和密码能正确连接,即可上传或者下载文件。

3.5.7:SSH Command(远程 ssh 连接)

在jmeter 中,可以使用SSH 协议连接主机进行相关操作,步骤如下首先添加一个ssh command

在 command 中填写远程连接的必要信息

结果树中可以看到 linux 命令执行的结果

然而在实际测试中,不能确定我们的的机器能够正常连接。这里就要用到 while 循环设置重连,如下添加 while 控制器,写入循环语句。
当提取到结果信息时,跳出循环体,同时保证只重连三次

如图,三次失败之后,跳出循环体

3.6:表达式与提取器

3.6.1:JSON 提取

Variable names : 名称
JSONPath Expression:JSON 表达式
Match Numbers:0 代表随机,1 代表第 1 个,-1 代表全部
Default Value:未取到值的时候默认值下面举例来讲解 jsonpath 的写法

$..Name:列出所有省份

\(..Province[0].Name 提取 Province 中第一个 list 中的 Name ![](/i/l/?n=24&i=blog/2796365/202406/2796365-20240614204205046-1486441521.png) \)..[?(@.Name=='Beijing')] 筛选出省份名为 Beijing 的所有 list 数据

$.Province[:2].population 筛选前两条数据

注意:
\(.Province[:2].population 是筛选出前两条数据 ; \).Province[2].population 是排除前两条数据;
$.Province[-2].population 是排除后两条数据,千万别弄混了哦这里做一下总结:
1: 冒号在前
:index 正序取值,取数为 index
例:1 表示正序取 1 条数据(正数第一条)

:-index 倒序过滤,取数为 index
例:-1 表示倒序过滤一条数据(倒数第一条)

2:没有冒号
index 表示顺序取 index+1 的值例: 1 取第二条数据

3:冒号在后
index: 顺序过滤,取数为 index
例: 1: 表示正序过滤第一条数据

-index:倒序取值,取数为 index
例:-1: 表示倒序取一条数据

这是一个多层嵌套的 jsonlist,需要提取所有 cabinInfos 列表下,patFlag=Y 时的cabin,standardPrice 和finallyPrice。

\(..[?(@.patFlag=="Y")].["cabin","standardPrice","finallyPrice"] **注:JSON Extractor 使用 json path 表达式匹配,可以一次取多个变量值。\)表示响应的根对象。取子对象或对象的属性用. 取数组里的对象用[],数组索引从 0 开始**
示例:
下面这个响应是一个list 组,可以提取前两个 list 里面的 Name

1:添加一个JSON Extractor 表达式,分号分隔多个参数名;分号分隔多个 json 表达式;分号分隔多个匹配数字;分号分隔多个默认值(必填)
2:所有的个数一定要匹配,任一个不匹配该请求都不会在提取成功

也可以用表达式匹配所有值,然后用 match no 获取想要的值

提供一个mock 接口的地址,直接访问即可
https://easy-mock.com/mock/5b88b27476b79510db917603/example/query1

3.6.2:XPath 提取

Xpath 基础语法:
//[@class,'A']/@href 从根目录下定位所有 class=A 的href
//
[@class,'A '] 从根目录下定位所有 class=A 标签内的文本
//[contains(@class,'A')] 从根目录下@class 值中包含A 的节点
substring-before(//
[@class='A']/text(),'0') 返回根目录下[@class='A']/text()中第一个'0'前面的部分,如果不存在'0',则返回空值
substring-after(//[@class='A']/text(),'0') 返回根目录下[@class='A']/text()中第一个'0'后面的部分,如果不存在'0',则返回空值
//
//a/text() 返回根目录下a 标签中所有文本
//[starts-with(@class,’A’)]模糊匹配以 A 开头
//
[ends-with(@class,’A’)] 模糊匹配以A 结尾

3.6.3:正则表达式提取

它通过正则表达式获取接口响应,并传入下个接口引用名称:定义一个变量,供后续请求引用
一般(.+?)和(.?)能够满足我们 80%的使用场景。所以,一般的正则表达式都可以写成下面这 2 种
左边界(.+?)右边界
左边界(.
?)右边界

left 对应匹配目标的起始字符
right 对应匹配目标的结束字符
正则表达式:利用正则将需要的数据提取出来
() 括起来的部分就是需要提取的,对于你要提的内容需要用小括号括起来
. 点号表示匹配任何字符串

  • 一次或多次
    ? 在找到第一个匹配项后停止
    模板:用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来),则可以是\(N\)等,表示提取第N 个括号里面的值
    -1 代表所有值,此时提取结果是一个数组,其余正整数代表第几个匹配的内容提取出来。
    如果匹配数字选择的是-1,还可以通过\({XXX_1}的方式来取第 1 个匹配的内容,\){XXX_2}
    来取第 2 个匹配的内容。
    缺省值:正则匹配失败时取的值例 1:提取第一个Name


例 2:提取全部Name

例 3:表达式同时提取Name 和population,并传出两个参数

例 4:拆分身份证号码,提取生日
一个 18 位的身份证号码,前 1-6 位是地区,7-14 位是生日,15-17 位是顺序码,最后 1
位是校验码,试图通过正则从身份证号中提取地区和生日正则表达式:
{"(.{6})(.{8})(.{3})"}
(.{6}):任意字符匹配 6 次,对应匹配结果中的前 6 位字符(地区)
(.{8}):任意字符匹配 8 次,对应匹配结果中的第 7-14 位字符(生日) 从身份证号码中取出地区和生日,对应的正则表达式为: (.{6})(.{8})(.{3})(.)
匹配第二组→\(2\)

例 5:条件判断取值
提取population=800 的城市


3.7:接口断言

3.7.1:Bean Shell 断言

利用beanshell 脚本,获取实际响应字段与预期值进行比对,自定义断言结果

3.7.2:响应断言

要测试的响应字段:针对响应的不同部分进行匹配
响应文本:响应服务器返回的文本内容,http 协议排除header 部分响应代码:匹配响应代码,比如http 请求中 404,200,503
响应信息:匹配 message,例如”处理成功”
Response Header:匹配响应头中的信息

匹配规则:
包括:响应内容包括需要匹配的内容就算成功
匹配:响应内容要完全匹配匹配内容,不区分大小写
equals:完全相等,区分大小写
否:选择否表示预期断言结果不应存在,如果实际结果与预期值不一致,则结果树标红不选择否,表示预期断言结果应该存在,如果实际结果与预期值不一致,结果树标红可以通过添加断言结果来查看断言的执行情况。


3.7.3:断言持续时间

约定响应时间,响应时间如果超出约定,则断言为失败


3.7.4:JSON Assertion(json 断言)

判断方式:
如果响应结果不是json 格式的,fail 如果json path 找不到元素,fail
如果json path 找到元素,没有设置条件,pass 如果json path 找到元素了,不符合条件,fail 如果json path 找到元素,且符合条件,pass
如果json path 返回的是一个数组,迭代判断是否有元素符合条件,有则pass,无则fail

3.9:插件管理器

不要手动安装各种插件,jmeter 提供了用户界面来完成插件的安装、升级、卸载。

它管理的插件包括 jmeter-plugins.org 上面常用的插件,和各种第三方插件甚至核心 JMeter 插件。

安装插件管理:
1、下载 plugins-manager.jar

2、将 plugins-manager.jar 放到 ...\apache-jmeter-3.2\lib\ext 目录下。

3、双击 ApacheJMeter.jar 启动 Jmeter。

4、菜单栏会多出一个“Plugins Manager”的选项。

点击 “Plugins Manager” 选项打开 Jmeter 插件管理:

插件管理窗口分三个标签页:

Installed Plugins:显示已安装的插件。
Available Plugins: 显示可安装的插件。
Upgrades: 显示可以升级的插件。

通过勾选/取消勾选插件,并点击右下角 "Apply Changes and Restart JMeter" 按钮来卸载、安装、升级插件。

4:基础操作

4.1:代理服务器

4.1.1:录制 http 请求

工作台下创建代理服务器

配置代理,选择录制控制器

在Requests FIltering 下添加排除模式,配置正则表达式。过滤不必要的请求
..(js|css|PNG|jpg|ico)或者
.
.jpg
..css
添加包含模式(Patterns to Include).js(录制的请求只会包含js 文件,一般包含模式默认不限制)
添加排除模式(Patterns to Exclude):如“.
.html”(录制的请求不会包含.html 的请求)

过滤 url:

启动代理服务器

左侧查看录制结果

注意:如果启动代理服务器时出现如下提示
Could not create script recorder-see log for details:>>keytool 错 误 : java.lang.RuntimeException:java.io.lOException:DNSName components must begin with a letter<<
Command failed,code:1
需要确认以下几点:
1:确认 java 版本高于 7
2:确认只安装了一个 jdk
3:确认 java_home 的 jdk 路径和 path 的 jdk 路径是否一致

4.1.2:录制 app 接口请求

首先手动设置你的手机代理,配置代理 ip,需要与本机的 ip 一致!端口默认 80

配置jmeter 代理服务器ip,注意ip 与端口必须要与手机代理一致

左侧查看录制结果

4.2:四种请求

4.2.1:Post 请求

Post 请求常用于表单的提交,例如登录请求,新增请求等

4.2.2:Get 请求

GET 用于信息获取,常用于查询,请求的数据会附在 url 之后(就是把数据放置在 HTTP
协议头中),以?分割url 和传输数据,多个参数用&连接

4.2.3:PUT 请求

Put 常用于修改

4.2.4:Delete 请求

Delete 常用于删除

4.3:不同类型的参数

4.3.1:Parameters

常用于get 请求的参数填写,参数可设置为常量和变量,也可用函数填充

4.3.2:Body Data

常用于提交表单的参数填充,参数以 json 串的格式展示,可设置为常量和变量

4.3.3:File Upload

常用于上传文件,图片等。需要填写文件名称,参数名称,mime 类型,implementation 类型

常见的 MIME 类型:
超文本标记语言文本 .html,.html text/html
普 通 文 本 .txt text/plain RTF 文本 .rtf application/rtf GIF 图形 .gif image/gif
JPEG 图形 .jpeg,.jpg image/jpeg au 声音文件 .au audio/basic
MIDI 音乐文件 mid,.midi audio/midi,audio/x-midi RealAudio 音乐文件 .ra, .ram audio/x-pn-realaudio MPEG 文件 .mpg,.mpeg video/mpeg
AVI 文 件 .avi video/x-msvideo GZIP 文件 .gz application/x-gzip TAR 文件 .tar application/x-tar

5:接口自动化关联

5.1:关联的意义

关联是一种动态行为,用以后续的请求从之前的请求响应结果中直接使用指定的数据。如登录生成的token 需要被后续接口调用,或者删除请求的 id 需要从查询列表的返回值中获取。

5.2:传递 token 获取登录口令

下图是一个实际的登录接口,在响应中返回了一串 token,如下图

那么我们在接下来的接口-经验库列表中,就必须带入这一串 token,否则响应报错,如下图所示


如何获取登录的口令呢?这里详细说明一下,如图所示

在接下来的接口中可以将获取的 token 作为变量调用,变量名为${center-token},如下图

观察请求头,发现传入了一串 token,并且响应结果正确

自此,一个完整的登录关联就结束了。后续接口直接调用该 token 就可以了。

5.3:实现增删改查接口闭环

一个增删改查流程,想要做自动化检验就必须形成一个闭环,那么删除-修改-查看就必须调用同一个必填参数,例如唯一性的 id。下面是实例演示,可以看到新增的请求中返

回了一个id,我在后续接口中都必须调用此唯一性的 id

接下来写一个正则将其取出,注意与之前 token 正则的不同之处

后续接口可以调用此参数,并正确响应

一个完整的登录-查看-删除的流程到这里就可以结束了

完整目录
完整

标签:控制器,匹配,请求,一本,响应,线程,接口,Jmeter
From: https://www.cnblogs.com/cm21/p/18248601

相关文章

  • Java面向对象基本特征——抽象、接口、多态、内部类
    面向对象概述        面向对象思想是从现实世界客观存在的事物出发来构造软件系统。对象是现实生活中实际存在的事物;类是由相同类型的对象共有的特征和行为归纳构成的。    而面向对象的思想就是把现实世界中的对象所具有的特征和行为抽象出来形成一个类,再根......
  • 接口测试
    Postman接口测试中的参数化功能是的,Postman的参数化功能非常实用,它允许你在请求中使用变量,进而实现数据的动态替换。这可以通过预定义环境变量、全局变量或者集合内的数据文件(如CSV、JSON)来实现。你可以利用这些功能进行参数化测试,比如迭代测试不同用户登录、测试不同数据场景......
  • 利用某些平台(聚合API、百度AI、科大讯飞API)的API接口,利用HTTP协议向服务器发送请求,并
    要使用C语言通过HTTP协议向服务器发送请求并接收响应,你可以使用如libcurl这样的库来发送HTTP请求。libcurl是一个免费且易于使用的客户端URL传输库,支持多种协议,包括HTTP。同时,为了解析服务器响应中的JSON数据,你可以使用cJSON库,这是一个轻量级的JSON解析库。以下是一个简单的示例......
  • 设计优秀的API接口如何实现?
    电商大数据是指通过对电子商务平台产生的海量数据进行收集、存储、处理和分析,以揭示其中蕴藏的商业价值和规律性,并据此进行决策和优化的一项技术和方法体系。在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性、接口的稳定性、接口的跨域性、接口的协议......
  • 实时api接入指南|1688商品详情实时数据接口(1688.item_get)图片、库存、规格、销量等数
    接入1688商品详情实时数据接口(1688.item_get),涉及到图片、库存、规格、销量等重要信息的获取,这些数据对于电商平台来说至关重要,可用于商品展示、分析市场趋势、优化库存管理等。下面将详细讨论如何接入此API接口,并有效利用返回的数据:注册与创建应用账号注册:需要进行账号注册......
  • 进程还在,JSF接口不干活了,这你敢信?
    1、问题背景:应用在配合R2m升级redis版本的过程中,上游反馈调用接口报错,RpcException:[Bizthreadpoolofproviderhasbeenexhausted],通过监控系统和日志系统定位到现象只出现在一两个节点,并持续出现。第一时间通过JSF将有问题的节点下线,保留现场,业务恢复。报错日志如下:24-03-......
  • 讯飞有一个可以根据描述文本自动生成PPT的AI接口,有趣
    文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好100次,如果要购买的话最低要购买1344元的,没有按量付费的模式,个人小开发者可买不起。 让我们跑起来玩玩,官方提供了python的sdk,下载到本地: 不想下载sdk的,我......
  • 6.13API接口服务类漏洞探针
    ip地址解析:www.x.x.x.com,对应网站目录为d:/wwwroot/xiaodi/而127.x.x.x,对应网站目录为d:/wwwroot/,可能存在网站备份文件zip,所以ip网址端口都的扫描;协议端弱口令爆破:超级弱口令检查工具;端口服务安全问题(用于无思路时)思路:利用探针对端口探测后,对口令安全、Web漏洞、中间......
  • 1688跨境是淘系对抗拼多多Temu的一把尖刀吗?|1688开放API接口接入|1688跨境代采系统搭
    1688跨境是淘系对抗拼多多Temu的一把尖刀,这一观点在电商领域内有一定的支持。1688作为阿里巴巴集团旗下的重要电商平台,长期以来专注于B2B业务,连接着大量的制造商和采购商。随着电商平台竞争的加剧,1688也在不断地进行战略调整和业务升级,尤其是在跨境电商领域的动作频频,显示出其......
  • 闲鱼商品监控:使用商品详情数据接口跟踪价格变动
    使用闲鱼商品详情数据接口跟踪价格变动在二手市场和电商领域,价格是一个重要的动态因素,它可以受到多种因素的影响,如供求关系、季节变化、市场趋势等。对于买家而言,跟踪商品价格的变动可以帮助他们抓住最佳购买时机,节省开支;对于卖家而言,合理的定价策略能够吸引更多买家,提高销售......