# -*- coding: UTF-8 -*-
import requests
import datetime
import xlrd
from locust import HttpLocust,TaskSet,task
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# 循环队列算法实现
class sqqueue(object):
def __init__(self, maxsize):
self.queue = [None] * maxsize
self.maxsize = maxsize
self.front = 0
self.rear = 0
# 如果队列未满,则在队尾插入元素
def enqueue(self, data):
if (self.rear + 1) % self.maxsize == self.front:
print("The queue is full!")
else:
self.queue[self.rear] = data
self.rear = (self.rear + 1) % self.maxsize # 队尾往后移
class set_task (TaskSet):
@task(1)
def post_api (self):
nowTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
orderno = str(nowTime)
try:
# 依次循环读取
vicky = self.locust.q.queue[self.locust.n]
self.locust.n = (self.locust.n + 1) % 1000
except:
print("accont data run out,test ended.")
exit(0)
payload = {
'orderno': orderno,
'name': vicky['name'],
'idcardno': vicky['idcardno'],
'mobileno': vicky['mobileno']
}
req = self.client.post("/url", data = payload )
if req.status_code == 200:
print("success")
else:
print("fails")
class apiUser(HttpLocust):
task_set = set_task
min_wait = 5
max_wait = 50
host = 'http://ip:post'
q = sqqueue(1001) #循环队列大小为读取行数+1
# 打开excle
data = xlrd.open_workbook(r'D:\vicky_test\pf_f.xls')
# 获取sheet
sheet_table = data.sheet_by_name(u'test')
# 按行依次读取并存入队列
for n in range(1, 1001):
row_vicky = sheet_table.row_values(n)
data = {
"num": "%s" % row_vicky[0],
"name": "%s" % row_vicky[1],
"idcardno": "%s" % row_vicky[2],
"mobileno": "%s" % row_vicky[3],
}
q.enqueue(data)
n = 0
python3 locust通过循环队列实现参数化
最新推荐文章于 2024-07-15 14:40:44 发布