在使用jmeter做压测时,除了增加并发数,还可能在请求体中增加多个字段相同的list。如图:

如果是几百条可以复制粘贴,但是几千上万条复制粘贴就比较费时费力了。另外可能这些数据并不是完全相同,可能还需要并发执行。

一.数据容器

当请求体是由多个字段相同的list组成时,可以把这些list存放在txt文件里,通过CSV数据文件设置传参给请求体。

二.数据来源

但是成千上万条list要如何在txt文件中生成呢?

这里使用python循环,然后通过python读写文件,把循环得到的数据存入文件中,得到一个txt文件。

三.造数据代码

1.请求体里每个json数据完全相同

import json
data_text=[]
for x in range(2):
a={ #a为list
"value1": "京东"
}
data_text.append(a) #把a添加到列表里,循环多次
filename="data.txt" #在当前路径下的txt文件
with open(filename,"a",encoding="utf-8") as fd: #需要加utf-8,否则写入的内容会出现中文乱码
fd.write(json.dumps(data_text,ensure_ascii=False)) #写入内容
fd.write("\n")
fd.close()

文件输出结果:

得到一行list数据相同的数据。

2.并发数为1,请求体里json的字段相同但是某些字段的数据不同

import json
data_text=[]
for x in range(2):
a={
"value1": "京东"+str(x+1) #每次循环a的value1字段的值都不同
}
data_text.append(a)
filename="data.txt"
with open(filename,"a",encoding="utf-8") as fd:
fd.write(json.dumps(data_text,ensure_ascii=False))
fd.write("\n")
fd.close()

文件输出结果:

得到一行list数据不同的数据,如果执行多个并发时,传入txt文件的数据是相同的。

3.并发数为1,请求体里的json里包含多个相同的json

如图:嵌套循环得到数据。c包含3个a,每个a里包含2个b。

data_text=[]                 #放置a的list
for x in range(3): #循环3次
data_text1 = [] #放置b的list
for y in range(2): #循环2次
c={
"orderList":data_text
}
b = {
"orderLineNumber": "test_1" + str(x + 1)+ str(y + 1),
"orderNumber": "test_d" + str(x + 1)
}
a = {
"orderNumber": "test_d" + str(x + 1),
"orderLineList": data_text1
}
data_text1.append(b) #内层循环把b添加到data_text1数组里
data_text.append(a) #外层循环把a添加到data_text数组里
filename="2_5.txt"
with open(filename,"a",encoding="utf-8") as fd:
fd.write(json.dumps(c,ensure_ascii=False))
fd.write("\n")
fd.close()

输出结果:

4.并发数大于1,请求体里json的字段相同但是某些字段数据不同

import json
def coniface_list(numi,numj):
i = 1 #i为需要的并发数
while i <= numi:
a = []
j = 1 #j为列表包含的list数量
while j <= numj:
b = {
"value1": "京东"+ str(i) + str(j) #每次循环b的value1字段不同
}
a.append(b)
j += 1
filename = "data.txt"
with open(filename,"a",encoding="utf-8") as f:
f.write(json.dumps(a, ensure_ascii=False))
f.write("\n")
i += 1
f.close()
coniface_list(3,3) #调用函数

文件输出结果:

得到三行不同数据,可以在并发大于1时传入txt文件的数据,每个并发传入的数据是不同的。

四.python代码操作

1.随机数

sa=[]
num="0123456789"
for i in range(6):
sa.append(random.choice(num)) #把选择的随机数添加到sa里
salt="".join(sa)

2.随机值

sourcePlatform=["天猫","抖音","京东"]
Platform=random.choice(sourcePlatform)
print(Platform)

3.转义

json.dumps(json.dumps(c))

4.转字节数组

c=json.dumps(c)                #json转str
c=bytes(c.encode('utf-8')) #str转byte
c_byte=base64.b64encode(c)

jmeter使用之请求体包含多个数据的更多相关文章

  1. Jmeter 提取http请求返回值里json数据参数化方法

    第三方插件下载地址:http://jmeter-plugins.org/downloads/all/ 插件下载后解压:找到JMeterPlugins-Extras.jar,把JMeterPlugins ...

  2. Jmeter中使用HTTP信息头管理器发送json格式请求体的接口

    Jmeter中,如果请求体的格式为x-www-form-urlencoded,则不需要添加请求头,保持默认即可,但是如果遇到接口的请求体格式为json时,就要用到HTTP信息头管理器,在线程组上右键— ...

  3. spring boot aop打印http请求回复日志包含请求体

    一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  4. 『动善时』JMeter基础 — 14、使用JMeter发送Post请求

    目录 1.Post请求参数类型说明 2.用于演示的项目说明 3.发送Post请求示例 (1)测试计划内包含的元件 (2)请求参数类型为x-www-form-urlencoded 4.请求参数form- ...

  5. iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range

    一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...

  6. 转:应用JMeter测试solr请求

    使用JMeter测试solr请求 一.安装JMeter 在官网http://jmeter.apache.org/download_jmeter.cgi下载JMeter 直接解压JMeter安装包 Li ...

  7. elasticsearch(5) 请求体搜索

    上一篇提到的轻量搜索非常简单便捷,但是通过请求体查询可以更充分的利用查询的强大功能.因为_search api中大部分参数是通过HTTP请求体而非查询字符串来传递的. 一 空查询 对于空查询来说,最简 ...

  8. HTTP请求行、请求头、请求体详解

    HTTP 请求头各参数具体含义 Header 解释 示例Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/htmlAccept-Charset 浏览器可以接 ...

  9. HTTP请求行、请求头、请求体详解(转)

    转自 https://blog.csdn.net/u010256388/article/details/68491509/     HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行+请求头+ ...

  10. body-parser Node.js(Express) HTTP请求体解析中间件

    body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日     781     声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包 ...

随机推荐

  1. Rust多线程中安全的使用变量

    在Rust语言中,一个既引人入胜又可能带来挑战的特性是闭包如何从其所在环境中捕获变量,尤其是在涉及多线程编程的情境下. 如果尝试在不使用move关键字的情况下创建新线程并传递数据至闭包内,编译器将很可 ...

  2. uni-app封装网络请求promise

    在项目的根目录下,创建http文件夹. 然后在创建request.js文件 文件代码如下 export function apiapi(myurl,myget,mydata,tou="Acc ...

  3. nginx适配Overlay以及测试工具

    本文分享自天翼云开发者社区<nginx适配Overlay以及测试工具>,作者:pan Overlay与Underlay介绍 Overlay网络和Underlay网络是一组相对概念,Over ...

  4. THUWC2024 游记

    省流:D1T3,Pretest 97,D2 和 4.so 决斗两小时(胜利). day 0 从成都早上坐火车,中午到了重庆. 坐轻轨到了酒店附近,虽然我不住酒店.lxs 带着吃了一碗面.重庆的面挺好吃 ...

  5. -bash: ./run.sh: /bin/bash^M: bad interpreter: No such file or directory 报错解决方法

  6. Processing多窗口程序范例(三)

    再来一例~另一种叠加方式呈现...看图: 程序 主程序: package syf.demo.multiwindow3; import processing.core.PApplet; import p ...

  7. 大数据之路Week10_day01 (Hbase总结 II)

    Hbase是数据库 特点: 1.面向列:Hbase是面向列的存储和权限控制,并支持独立索引.列式存储,其数据在表中是按照某列存储的,这样在查询只需要少数几个字段时,能大大减少读取的数据量. 2.多版本 ...

  8. Opencv | 图形学 | Mingw64 | 如何正确地用MinGW64编译与配置vscode的Opencv环境

    如何正确地用MinGW64编译与配置vscode的Opencv环境 1.前情提要 最近有关于图形学的授课,教授开始布置的上机打码的代码实现作业了.虽说教授为了让我们省心,直接就整了个环境已经配置好的几 ...

  9. Echarts与Vue3中获取DOM节点可能出现的异常错误

    useTemplateRef 的简单介绍 官方:返回一个浅层 ref,其值将与模板中的具有匹配 ref attribute 的元素或组件同步. 参数匹配机制‌:useTemplateRe的参数需与模板 ...

  10. 最简单的方式:如何在wsl2上配置CDUA开发环境

    step0:序言 这篇文章可以帮助你以一个最为简单的方式迈出CUDA的第一步,从此一入CUDA深似海,从此头发是路人. 前提:你需要在Windows 11上: 电脑中有nvidia显卡以及驱动,由于w ...