jemter做接口测试

Jmeter做接口测试

Jmeter脚本编写一般分五个步骤:
  1. 添加线程组

  2. 添加 http 请求

  3. 在 http 请求中写入接入 url、路径、请求方式和参数

  4. 添加查看结果树

  5. 调用接口、查看返回值

本次用来测试的接口地址的api:httpbin.org

一、实施1-2步骤:

添加线程组、http请求

二、配置http请求的相关参数

在 http 请求中写入接入 url、路径、请求方式和参数,当前选择请求的方式为GET方式。

三、调用接口,查看返回值

  1. 添加查看结果树

  2. 调用接口,得到返回值

四,请求方式改为post方式来进行请求

改为post进行测试,得到的响应数据

五,http请求默认值

通过上面两个请求我们发现,Web 服务器中的协议和服务器名称或 IP 这两个值都是一样,每次重复输入其实比较麻烦,因此我们可以使用 HTTP 请求默认值来管理这些公共的配置数据。

添加步骤:

线程组——添加——配置元件——HTTP 请求默认值

然后进行如下配置,并把该元件放置到请求前面。

经过请求默认值的配置后,后续我们增加新的请求,如果这两项值是一样的话,那么则无需再重复填入该值。

六,断言设置

Jmeter 可以针对每一个请求响应进行断言。

设置步骤:

选中一个请求,如 http-get,然后右键选择:

添加——断言——响应断言。

各个匹配模式含义如下

包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式

匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则表达式。

Equals:响应内容要完全等于需要匹配的内容才代表成功,大小写敏感,需要匹配的内容是字符串正则表达式

Substring:返回结果包含指定结果的字串,但是 subString 不支持正则字符串

如下图所示匹配返回的字符串是否包含:http://httpbin.org/get

如果断言成功,则查看结果树为绿色标志,如果断言失败则为红色显示,如下图所示:

七,参数设置

Jmeter 支持通过 Query String Parameters 或者 Request body 请求体来传递参数。

Query String Parameters

如果希望在请求 URL 中添加参数,则可以在 Http 请求界面的 Parameters 选项里面添加参数。该参数会通过 Query String Parameters 方式传递给服务器,也就是在 URL 中传递参数。 如下图如所示设置参数:

Request body

在 Post 请求中参数一般在 body 中传递,Jmeter 也支持在 body 中传递参数。如传递 Json 格式的参数,在 BodyData 编辑框输入如下参数:

{“username”:”Test1234”}

image-20210909181352243

另外还需要指定参数的格式,因此需要添加 HTTP 信息头

添加步骤:

选定请求——添加——配置元件——HTTP 信息头管理器,然后在管理器里面添加参数类型

Content-Type :application/json 如下图所示:

八,变量

在请求过程中,有时我们需要在请求中设置一些变量来测试不同的场景。

Jmeter 支持以下类型变量:

  1. 用户自定义变量

  2. 函数生成变量

  3. 数据文件变量

(1) 用户自定义变量

设置步骤: 选中请求——添加——前置处理器——用户参数 设置变量名称为 user,值为 Test1234

在请求时引用变量如下所示: 变量引用格式为:${user}

(2)函数生成变量

Jmeter 有许多内置的函数,可以生成随机数。

创建步骤:

点击菜单栏选项——函数助手对话框——下拉选择__Random()函数 函数配置如下:

(3)CSV数据文件变量

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

设置步骤:

选择请求——添加——配置元件——CSV 数据文件设置

创建 csv 文件: 注意文件编码为 UTF-8 文件内容如下:

Test1234,Test1234

data.csv

CSV 数据文件设置如下:

在 Post 请求中引用变量数据如下:

image-20210909182059478

得到的请求数据

GET http://httpbin.org/?user=Test1234&pwd=Test1234

GET data:

Test1234Test1234{“username”:”Test1234”}

[no cookies]

(4)csv参数化

针对之前的 POST 接口进行如下参数遍历测试:

接口如下:

http://httpbin.org/post

发送参数:user1.csv

user1,user1

user2,user2

user3,user3

在之前的 csv 数据文件设置需要需改配置如下:

表示把所有数据读取一遍,且不重复。

读取的数据:

九,用例分离

用例设计

之前我们的用例数据都是配置在 Jmeter Http 请求中,每次需要增加,修改用例都需要打开 jmeter 重新编辑,当 用例越来越多的时候,用例维护起来就越来越麻烦,有没有好的方法来解决这种情况呢?

其实我们可以将用例的数据存放在 csv 文件中,然后通过 csv 文件配置来读取用例中的数据,执行测试。用例数据如图所示:

用例名称变量含义:

1.${caseSeq}:用例编号

2.${apiType}:api 类型

3.${apiSeq} :api 版本号

4.${apiName}:api 名称

5.${priority}:优先级

6.${url}:api 路径

7.${methods}:请求方法

8.${parameter}: 请求参数

9.${expectValue}:期望值,用于断言

Jmeter设置步骤:
1.新建一个线程组,命名为:数据驱动

2.创建一个 http 请求默认值,设置如下:

3.添加一个循环控制器

步骤为:线程组——添加——逻辑控制器——循环控制器。

循环控制器的作用可以控制整个用例循环执行的次数。默认值是 1 根据用例数量可以修改为 4

4.在循环控制器节点下创建 CSV 文件设置,具体配置内容如下——注意csv文件为上面的用例设计这步

5.创建一个 if 控制器

步骤为:循环控制器——添加——逻辑控制器——if 控制器

if 控制器的作用为根据不同条件执行不同的用例,例如这里根据不同的接口请求类型,分别创建了 GET 和 POST 两个控制器。

GET 设置的条件语句如下:

条件语句为:**”${methods}”==”GET” 其中${methods}表示引用 csv 中的methods中的值**。

参数:

• Interpret Condition as Variable Expression?:如果这个选项被选中,将不会使用 js 解析;条件表达式的值必须是 true(忽略大小写),这里我们取消勾选状态。

Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式

6.创建 GET 请求类型的用例如下:

7.POST请求设置:POST 条件语句设置为:”${methods}”==”POST”

用例名称格式:${caseSeq}_ ${apiSeq}_${apiName}

断言设置如下:${expectValue}引用 csv 中对应的值。

十,测试报告

批量执行完接口测试之后,我们需要查看测试报告,在之前单个接口调试我们是通过查看结果树查看结果,但是当大

批量执行接口测试之后依旧这样查看那么肯定会很低效 那么该如何设置呢?

聚合报告

聚合报告是一个比较精简的报告元件,可以查看每个接口的性能情况与执行结果。 设置步骤:选中线程组——添

加——监听器——聚合报告。报告各个参数含义如下:

• Samples – 本次场景中一共完成了多少个请求

• Average – 平均响应时间(单位:ms)

• Median – 响应时间的中值(单位:ms)

• 90% Line – 所有请求中 90%的响应时间。

• Min – 最小响应时间(单位:ms)

• Max – 最大响应时间(单位:ms)

• Error – 出错率

• Troughput – 吞吐量

• Received–响应数据大小

• KB/sec – 以流量做衡量的吞吐量

HTML 报告

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

生成步骤:

打开 cmd 进入 jmeter 目录 bin 目录

执行命令:

jmeter -n -t httpbin_test.jmx -l httpbin.jtl -e -o C:\Users\Administrator\Desktop\Report

命令的参数:

-n :以非 GUI 形式运行 Jmeter

-t :jmeter 脚本路径

-l :result.jtl 运行结果保存路径(.jtl)此文件必须不存在。

-e :在脚本运行结束后生成 html 报告

-o :用于存放 html 报告的目录,不加该参数默认生成到

参考拓展资料

https://blog.csdn.net/zhizunyu2009/article/details/79011413

https://blog.csdn.net/gld824125233/article/details/52842914

https://blog.csdn.net/defonds/article/details/53517247

https://blog.csdn.net/wuyou10206/article/details/77539791

https://blog.csdn.net/huangjuyan/article/details/52993758

https://www.cnblogs.com/imyalost/p/10239317.html

© 2021 Hero All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero