Jmeter并发测试接口

本文详细介绍了如何使用JMeter进行接口并发测试,包括固定参数、可变参数、事务性控制器的使用,以及如何从CSV文件读取参数。通过实例展示了创建线程组、设置请求参数、添加监听器、使用前置处理器和后置处理器等步骤,帮助读者理解JMeter在接口测试中的应用。
摘要由CSDN通过智能技术生成

目录

Jmeter并发测试接口

固定参数

 新建计划:   File → New 。 在Name中可以输入计划名称

    2. 新建线程组:在刚刚新建的计划上右键 → add → Threads(Users) → ThreadGroup

   3.  创建请求样例:右键上一步创建的线程组 → Add → Sampler → Http Request

4. 新建接口配置:右键上一步新建的http request → Add → Config Element → HTTP Header Manager

5. 创建请求监听器

6. 执行请求测试

可变参数

1. 创建请求前置器

2.更改Http Rrequest的请求参数:

3.执行请求

4. 查看结果

可变参数 + 事务性控制器

1.创建事务性控制

2.添加需要被绑定的http请求

3.添加后置处理器

4. 执行请求

Jmeter添加自己的脚本

1.根据上文创建好线程组,http请求,结果监听器等

2.编写每次生成uuid的脚本

3.添加自己的脚本

每次的参数从CSV文件中读取参数

1.在test.csv中准备好自己的参数

2.添加CSV DATA Set Config



Jmeter并发测试接口

 

固定参数

场景:每次请求接口时使用同样的参数。

  1.  新建计划:   File → New 。 在Name中可以输入计划名称

    2. 新建线程组:在刚刚新建的计划上右键 → add → Threads(Users) → ThreadGroup

 

Name: 线程组名称

Comments:附加信息

Action to be taken after s Sample error: 当出现测试例失败时,选择的措施。 (继续 ,开始下一轮循环,停止线程,停止测试,立刻停止测试)

Number of Threads(Users): 线程(用户)的数量

Ramp-up period(seconds): 设置的线程数在多少秒之内全部准备好

Loop Count : 线程组循环的次数。 勾选 Infinite 代表无限循环

   3.  创建请求样例:右键上一步创建的线程组 → Add → Sampler → Http Request

 

protocol : 请求的协议

server name or ip: 接口的域名或者ip

port number:访问端口

Http Request那一栏: 选择请求类型GET POST UPDATE DELETE; path:请求的路径

Body Data:传参,body。

根据上面例图,对应的请求是:

Post   http://127.0.0.1:8080/sorting/ports

body  {

"sortingId": "TEST-2",
"billCodes": ["1609823422497"],
"pipeline": "1",
"sortMode": "sorting"
}

如果你的接口还需要通过header传输信息,如身份校验,需要新建配置。

4. 新建接口配置:右键上一步新建的http request → Add → Config Element → HTTP Header Manager

 

Name: header的key   Value: header内该key的value。

结合上面的,请求的报文信息如下:

POST /v1/sorting/ports HTTP/1.1
Host: 127.0.0.1:8080
Authorization: key=app_01,timestamp=1471924244823,nonce=86cb646a267c4602913f2034bce0cea4,signature=1mwEjYTjOPIUDz7TalC1zf07RoryyvhnWZV9XWOGDrw=
Content-Type: application/json
Content-Length: 118

{
    "sortingId": "TEST-2",
    "billCodes": ["1609823422497"],
    "pipeline": "1",
    "sortMode": "sorting"
}

5. 创建请求监听器

用于查看请求结果

5.1 创建聚合报告

右键创建的Http Request → Add → Listener → Aggregate Report

 

5.2 创建树形结果报告

右键创建的Http Request → Add → Listener → View Results Tree

 

6. 执行请求测试

点击顶部的绿色按钮

结果如下图:

 

可变参数

场景:需要使用不同的参数来测试接口。 比如一个请求登录的接口测试,使用不同的UserId 不同的 password来测试接口。

1. 创建请求前置器

右键创建的Http Request → Add → Pre Processors → BeanShell PreProcessor

 

vars.put("sortingId","TEST-2");
vars.put("pipeline", "1");

在脚本块里添加了两个变量: sortingId 和 pipeline。

2.更改Http Rrequest的请求参数:

 

3.执行请求

点击顶部的执行按钮

4. 查看结果

可以看到请求的参数已经成功设置

 

可变参数 + 事务性控制器

事务性控制:先请求一个接口,随后再请求另一个接口

比如:接口一是登录接口; 接口二是修改信息接口

场景:创建100个请求,每个请求使用不同的userId个password来请求接口一去登录;接口一返回用户的唯一id后,使用唯一id作为接口二的入参去请求接口二来修改信息

1.创建事务性控制

右键创建的线程组Thread Group → Add → Login Controller → Transaction Controller

 

2.添加需要被绑定的http请求

接口一 接口二的请求内容。

接口一:

请求内容

POST /v1/sorting/ports HTTP/1.1
Host: 127.0.0.1:8080
Authorization: key=app_01,timestamp=1471924244823,nonce=86cb646a267c4602913f2034bce0cea4,signature=1mwEjYTjOPIUDz7TalC1zf07RoryyvhnWZV9XWOGDrw=
Content-Type: application/json
Content-Length: 118

{
    "sortingId": "TEST-2",
    "billCodes": ["1609823422497"],
    "pipeline": "1",
    "sortMode": "sorting"
}

返回结果:

{
    "status": 1,
    "result": {
        "sortingId": "TEST-2",
        "billCode": "1609823422497",
        "sortPortCodes": [
            "19",
            "20",
            "21"
        ]
    },
    "success": true
}

接口二

请求内容:

POST /v1/sorting/results HTTP/1.1
Host: 127.0.0.1:8080
Authorization: key=app_01,timestamp=1471924244823,nonce=86cb646a267c4602913f2034bce0cea4,signature=1mwEjYTjOPIUDz7TalC1zf07RoryyvhnWZV9XWOGDrw=
Content-Type: application/json
Content-Length: 208

{
    "sortingId": "TEST-2",
    "billCode": "1609823422497",
    "pipeline": "",
    "weight":"10",
    "sortTime": "2021-01-05",
    "sortPortCode":"20",
    "sortSource": "",
    "sortMode":""
}

返回结果:

{
    "status": 1,
    "result": "成功保存分拣结果",
    "success": true
}

创建两个Http请求

接口二 需要 用接口一 返回的3个值,去作为接口二的请求参数。sortingId, sortPortCode, billCode

接口一:

 

接口二:

 

可以看到接口二的三个参数 都是待定的, 目的从接口一的返回值取出来,然后传递到接口二。

3.添加后置处理器

为接口一添加后置处理器,用来提取返回结果的目标字段

右键Http请求一 (上图的 请求格口) → Add → Post Processors → JSON Extractor

 

Name of created variables: 你创建的变量, 与接口二的入参保持一致

 

JSON Path expressions: 提取接口一结果的JSON表达式,按照接口一返回的结果来写表达式

 

Match No. (0 for random): 表达式与变量的匹配比例

Default Values: 默认值

4. 执行请求

接口一返回值:

 

接口二请求体:

 

接口二返回值:

Jmeter添加自己的脚本

场景:有的时候请求参数需要使用随机生成的参数,参数的生成逻辑想要自己烤制。

比如:某个http请求,每次请求需要传一个新的UUID作为参数。

1.根据上文创建好线程组,http请求,结果监听器等

2.编写每次生成uuid的脚本

public class ParamUtils {
    public ParamUtils(){ }

    public String getSortingId(){
        return UUID.randomUUID().toString().replace("-","");
    }
}

3.添加自己的脚本

3.1 将ParamUtils打包成 ParamUtils.jar

3.2为Jmeter添加ParamUtils.jar依赖

单击Test Plan → 找到下方的Add directory or jar to classpath → 点击Browse → 选中刚刚导出的jar文件

3.3右键Http Request → Pre Processors → BeanShell PreProcessor

开始写逻辑

配置后,每次请求前会获取uuid,然后存放到变量,在http请求时根据${uuid}取值。

每次的参数从CSV文件中读取参数

场景:测试一个登陆接口,需要userName和password两个参数, 参数从已经存在的记录中来取。

1.在test.csv中准备好自己的参数

2.添加CSV DATA Set Config

右键Http Request → Add → Config Element → CSV Data Set Config 

在 Configure the CSV Data Source栏点击 Browse选中你的csv文件。

在Http Request里可以根据${userName} 和 ${password}来读取csv里的参数。参数变量名与CSV文件的头部保持一致即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值