1.参数化

方式1:循环取数据,数据可以重复使用。

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

class HttpTask(TaskSet):
index = 0
@task
def test001(self):
url = self.user.data[self.index]
self.index = (self.index + 1) % len(self.user.data)
print(url)
self.client.get(url) class MyUser(HttpUser):
host = "https://www.baidu.com"
tasks = [HttpTask]
between(0, 3)
data = ['https://www.baidu.com/',
'https://www.baidu.com/s?wd=1',
'https://www.baidu.com/s?wd=2',
'https://www.baidu.com/s?wd=3',
'https://www.baidu.com/s?wd=4']

方式2:保证并发测试数据唯一性,不循环取数据,使用队列的方法。

所有并发虚拟用户共享同一份测试数据,并且保证虚拟用户使用的数据不重复。

列如,模拟10用户并发注册账号,总共有100个账号,邀请注册账号不重复。注册完毕后自动结束测试。

class HttpTask(TaskSet):
@task
def test001(self):
try:
url = self.user.queue.get()
except queue.Empty:
exit(0)
self.client.get(url)
class MyUser(HttpUser):
host = "https://www.baidu.com"
tasks = [HttpTask]
between(0, 3)
queue = queue.Queue()
data = 'https://www.baidu.com/'
for i in range(5):
queue.put_nowait(data)

方式3:保证并发数据的唯一性,循环取数据,使用队列方法,,欸出使用完数据后在放入到队列中。

所有并发虚拟用户共享同一份测试数据,保证并发虚拟用户使用的数据不重复,并且数据可循环重复使用。

列如:模拟10用户并发登录账号。总共有100个账号,要求并发登录账号不相同,但数据可循环使用。

class HttpTask(TaskSet):
@task
def test001(self):
try:
url = self.user.queue.get()
except queue.Empty:
exit(0)
self.client.get(url)
self.user.queue.put_nowait(url)
class MyUser(HttpUser):
host = "https://www.baidu.com"
tasks = [HttpTask]
between(0, 3)
queue = queue.Queue()
data1 = ["https://www.baidu.com/",
"https://www.baidu.com/s?wd=1",
"https://www.baidu.com/s?wd=2",
"https://www.baidu.com/s?wd=3",
"https://www.baidu.com/s?wd=4"]
for i in range(0,5):
data = data1[i]
queue.put_nowait(data)

2集合

from locust import SequentialTaskSet, task, HttpUser,events
from gevent._semaphore import Semaphore
all_locusts_spawned = Semaphore()
all_locusts_spawned.acquire() def on_hatch_complete(**kwargs):
all_locusts_spawned.release() # 创建钩子方法
# events.on_hatch_complete += on_hatch_complete
# 挂在到locust钩子函数(所有的Locust示例产生完成时触发)
events.spawning_complete.add_listener(on_hatch_complete) class UserBehavior(SequentialTaskSet):
index = 0
# 限制在所有用户准备完成前处于等待状态
def on_start(self):
all_locusts_spawned.wait() @task
def test_visit(self):
all_locusts_spawned.wait() # 限制在所有用户准备完成前处于等待状态
url = self.user.share_data[self.index]
self.index = (self.index + 1) % len(self.user.share_data)
with self.client.get(url,catch_response=True) as response:
if response.status_code == 200:
response.success()
else:
response.failure("查询失败")
print('visit url: %s' % url) class WebsiteUser(HttpUser):
host = "https://www.baidu.com"
tasks = [UserBehavior]
share_data = ['https://www.baidu.com/',
'https://www.baidu.com/s?wd=1',
'https://www.baidu.com/s?wd=2',
'https://www.baidu.com/s?wd=3',
'https://www.baidu.com/s?wd=4']
min_wait = 100
max_wait = 300 if __name__ == '__main__':
import os
os.system("locust -f parameterized.py")

最新文章

  1. ubuntu安装ANSYS17.2全过程
  2. 如何在Mac OSX系统下安装Tomcat
  3. spark dataframe unionall
  4. Linux 引导修复
  5. Theano2.1.21-基础知识之theano中多核的支持
  6. CentOS6.5+nginx+tomcat负载均衡集群
  7. Unity 区分不同平台
  8. 【python cookbook】【字符串与文本】1.针对任意多的分隔符拆分字符串
  9. NodeJS学习历程 - (一)工具篇
  10. CorelDRAW 文件实用工具 CDRTools 2
  11. 九度OJ 1437 To Fill or Not to Fill -- 贪心算法
  12. IE filter & z-index bug
  13. hdoj 2199 Can you solve this equation?【浮点型数据二分】
  14. WCF—Binding
  15. jpeg和gif已经影响互联网发展进程了,他们应该被历史淘汰了!!!
  16. Lampda或Linq中的SqlFunctions.StringConvert()
  17. 201521123031 《Java程序设计》第14周学习总结
  18. oracle批量删除某个用户下的所有表
  19. 如何使用 Java 删除 ArrayList 中的重复元素
  20. SQL Server 运行状况监控SQL语句

热门文章

  1. .Net 7 高端玩法,自定义一个CLR运行时
  2. TS不能将类型“any[]”分配给类型“never[]”
  3. Node.js学习笔记----day05(在Node中操作MySQL)
  4. html 引入 js 代码的几种方式
  5. spring-in-action-day05-REST
  6. idea插件Jclasslib---查看字节码指令
  7. vue3+element表格数据导出
  8. Wpf Border圆角 设置不成功
  9. PostGIS之空间投影
  10. RocketMQ - 消费者进度保存机制