jmeter使用之请求体包含多个数据
在使用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)

浙公网安备 33010602011771号