使用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任务都会从队列取数,这样就保证数据的唯一性,并在并发场景中循环使用,利用这个特点可以很好的处理多用户流程执行脚本的时候,出现数据错位的情况。

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

猜你喜欢

转载自blog.csdn.net/weixin_50829653/article/details/132216287