当前位置: 代码迷 >> 综合 >> Locust :locust测试数据的处理
  详细解决方案

Locust :locust测试数据的处理

热度:105   发布时间:2023-10-24 21:21:42.0

通过归纳,发现其实也可以概括为三种类型。
循环取数据,数据可重复使用:e.g. 模拟3用户并发请求网页,总共有100个URL地址,每个虚拟用户都会依次循环加载这100个URL地址;
保证并发测试数据唯一性,不循环取数据:e.g. 模拟3用户并发注册账号,总共有90个账号,要求注册账号不重复,注册完毕后结束测试;
保证并发测试数据唯一性,循环取数据:模拟3用户并发登录账号,总共有90个账号,要求并发登录账号不相同,但数据可循环使用。
通过以上归纳,可以确信地说,以上三种类型基本上可以覆盖我们日常性能测试工作中的所有参数化场景。

参数化

1.共享同一份测试数据
所有并发虚拟用户共享同一份测试数据,各虚拟用户在数据列表中循环取值
例如,模拟3用户并发请求网页,总共有100个URL地址,每个虚拟用户都会依次循环加载这100个URL地址;加载示例如下表所示。

在这里插入图片描述

 from locust import TaskSet, task, HttpLocustclass UserBehavior(TaskSet):def on_start(self):self.index = 0@taskdef test_visit(self):url = self.locust.share_data[self.index]print('visit url: %s' % url)self.index = (self.index + 1) % len(self.locust.share_data)self.client.get(url)class WebsiteUser(HttpLocust):host = 'http://debugtalk.com'task_set = UserBehaviorshare_data = ['url1', 'url2', 'url3', 'url4', 'url5']min_wait = 1000max_wait = 3000

2.保证并发测试数据唯一性,不循环取数据
所有并发虚拟用户共享同一份测试数据,并且保证虚拟用户使用的数据不重复。
例如,模拟3用户并发注册账号,总共有9个账号,要求注册账号不重复,注册完毕后结束测试;加载示例如下表所示。

在这里插入图片描述

from locust import TaskSet, task, HttpLocust
import queueclass UserBehavior(TaskSet):@taskdef test_register(self):try:data = self.locust.user_data_queue.get()except queue.Empty:print('account data run out, test ended.')exit(0)print('register with user: {}, pwd: {}'\.format(data['username'], data['password']))payload = {'username': data['username'],'password': data['password']}self.client.post('/register', data=payload)class WebsiteUser(HttpLocust):host = 'http://debugtalk.com'task_set = UserBehavioruser_data_queue = queue.Queue()for index in range(100):data = {"username": "test%04d" % index,"password": "pwd%04d" % index,"email": "test%04d@debugtalk.test" % index,"phone": "186%08d" % index,}user_data_queue.put_nowait(data)min_wait = 1000max_wait = 3000

3.保证并发测试数据唯一性,循环取数据

所有并发虚拟用户共享同一份测试数据,保证并发虚拟用户使用的数据不重复,并且数据可循环重复使用。
例如,模拟3用户并发登录账号,总共有9个账号,要求并发登录账号不相同,但数据可循环使用;加载示例如下表所示。
在这里插入图片描述

from locust import TaskSet, task, HttpLocust
import queueclass UserBehavior(TaskSet):@taskdef test_register(self):try:data = self.locust.user_data_queue.get()except queue.Empty:print('account data run out, test ended.')exit(0)print('register with user: {}, pwd: {}'\.format(data['username'], data['password']))payload = {'username': data['username'],'password': data['password']}self.client.post('/register', data=payload)self.locust.user_data_queue.put_nowait(data)class WebsiteUser(HttpLocust):host = 'http://debugtalk.com'task_set = UserBehavioruser_data_queue = queue.Queue()for index in range(100):data = {"username": "test%04d" % index,"password": "pwd%04d" % index,"email": "test%04d@debugtalk.test" % index,"phone": "186%08d" % index,}user_data_queue.put_nowait(data)min_wait = 1000max_wait = 3000