Locust是一款开源的Python性能测试工具,它可以模拟大量并发用户对网站或者其他接口进行压力测试
1. 关联:精确模拟用户操作
在某些场景下,我们需要将之前请求的响应参数关联到后续请求中,以模拟用户操作。这在会话管理(如session_id的传递)中很常见。通过关联,将上一个请求的响应数据应用到下一个请求中。示例:
from locust import TaskSet, task
from lxml import etree
class UserTasks(TaskSet):
@task
def login_and_continue(self):
# 模拟业务流程
response = self.client.get('/login')
session_id = self.extract_session_id(response.text)
self.client.post('/continue', json={"session_id": session_id})
def extract_session_id(self, html):
""这个函数只提供获取数据,不作为任务执行 ""
tags = etree.HTML(html)
return tags.xpath("//input[@name='session_id']/@value")[0]
使用extract_session_id
方法从响应中提取会话ID,并在后续请求中应用。
2. 数据循环:多用户操作模拟
如我们需要使用3个用户对一批URL压测,每个用户都需要访问到每个url,可以使用数据循环的方式实现:
from locust import TaskSet, task
class UserTasks(TaskSet):
def on_start(self):
self.url_index = 0
@task
def visit_multiple_pages(self):
url = self.user_data["urls"][self.url_index]
self.url_index = (self.url_index + 1) % len(self.user_data["urls"])
self.client.get(url)
def setup(self):
self.user_data["urls"] = ['page1', 'page2', 'page3', 'page4', 'page5']
通过setup
方法设置了循环的URL列表,然后在visit_multiple_pages
任务中实现了URL的循环使用,模拟不同用户对不同页面的操作。
3. 队列数据控制:并发数据模拟
为了并发测试数据的唯一性,可以使用队列参数化技巧。通过从队列中顺序取数然后重新放入队列:
from locust import TaskSet, task
import queue
class UserTasks(TaskSet):
@task
def unique_concurrent_actions(self):
try:
data = self.user_data_queue.get()
except queue.Empty:
print('数据已用尽,测试结束。')
exit(0)
self.client.post('/action', json=data)
self.user_data_queue.put_nowait(data)
def setup(self):
self.user_data_queue = queue.Queue()
for index in range(100):
data = {
"param1": f"value{index:04d}",
"param2": f"value{index:04d}"
}
self.user_data_queue.put_nowait(data)
用户共享同一组数据,先将数据放入队列,所有用户开始执行unique_concurrent_actions
任务都会从队列取数,这样就保证数据的唯一性,并在并发场景中循环使用,利用这个特点可以很好的处理多用户流程执行脚本的时候,出现数据错位的情况。
最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。