使用Locust进行接口性能测试:关联与参数化技巧分析(三)
“ 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
任务都会从队列取数,这样就保证数据的唯一性,并在并发场景中循环使用,利用这个特点可以很好的处理多用户流程执行脚本的时候,出现数据错位的情况。
总结
以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注我:公众号\博客\CSDN\B站:测试玩家勇哥
;我会不定期地分享更多的精彩内容。感谢你的阅读和支持!
题外话,勇哥打算把新建的技术交流群,打造成一个活跃的高质量技术群。工作中遇到的技术问题,都可以在里面咨询大家,还有工作内推的机会。有兴趣的小伙伴,欢迎加我(记得备注是进群还是报名学习)👇👇👇****
👆****👆********👆长按上方二维码2秒,关注我
勇哥,10年落魄测试老司机,技术栈偏python,目前在一家超大型房产公司担任自动化测试主管,日常工作比较繁杂,主要负责自动化测试,性能测试、软件质量管理及人员管理。工作之余专注于为粉丝进行简历修改、面试辅导、模拟面试、资料分享、一对一自动化测试教学辅导等副业发展。目前已服务十多位小伙伴,取得高薪offer。
关注公众号,测试干货及时送达
本文来自博客园,作者:测试玩家勇哥,转载请注明原文链接:https://www.cnblogs.com/Nephalem-262667641/articles/17620560.html