在locust中,所有的测试场景都是继承HttpUser类,每个测试场景都是HttpUser类的子类。
在HttpUser类的子类中,通过task调用对应的测试用例 。
TaskSet是任务的集合,每次执行场景时,Locust都会先从Task中随机挑选一给任务并执行,可以通过@task(x)来指定权重,设置那个测试用例的概率会更大一点。
- from locust import HttpUser, TaskSet, task
-
- # 定义用户行为(测试用例)
- class TestCase(TaskSet):
-
- @task(1) # 设置权重为1
- def index(self):
- self.client.get('/HelloWorld') # 访问路径
-
- @task(3) # 设置权重为3
- def index2(self):
- self.client.get('/HelloWorld2') # 访问路径
-
- @task(2) # 设置权重为2
- def index3(self):
- self.client.get('/HelloWorld3') # 访问路径
-
-
- # 设置场景
- class WebsiteUser(HttpUser):
- tasks = [TestCase] # 将测试用例添加到测试套件中
- min_wait = 1
- max_wait = 2
- host = 'http://127.0.0.1:5000'

PS:通过图表分析reqs,设置了权重越大的接口压测次数就越多
因为locust默认是随机执行taskset里面的task的。
index,index2,index3 权重分别设置为1:3:2
所以实际执行测试用例的次数会是:index2 > index3 > index1
- from locust import HttpUser, task, SequentialTaskSet # 导入equentialTaskSet
-
- # 定义用户行为(测试用例)
- class TestCase(SequentialTaskSet):
- @task()
- def index(self):
- self.client.get('/HelloWorld') # 访问路径
-
- @task()
- def index1(self):
- self.client.get('/HelloWorld2') # 访问路径
-
-
- # 设置场景
- class WebsiteUser(HttpUser):
- tasks = [TestCase] # 将测试用例添加到测试套件中
- min_wait = 1
- max_wait = 2
- host = 'http://127.0.0.1:5000'

设置 SequentialTaskSet后,分析图表各个接口的请求数差别不大
task不止一个时,可以通过@tag给task打标签进行分类,在执行测试时,通过--tags name执行指定带标签的task。
- from locust import HttpUser, TaskSet, task, tag # 导入tag
-
- # 定义用户行为(测试用例)
- class TestCase(TaskSet):
- @tag("tag1") # 设置标签名为tag1
- @task(1)
- def index(self):
- self.client.get('/HelloWorld') # 访问路径
-
- @tag("tag3") # 设置标签名为tag3
- @task(2)
- def index2(self):
- self.client.get('/HelloWorld2') # 访问路径
-
- @tag("tag1") # 设置标签名为tag1
- @task(2)
- def index3(self):
- self.client.get('/HelloWorld3') # 访问路径
-
-
-
-
- # 设置场景
- class WebsiteUser2(HttpUser):
- tasks = [TestCase] # 将测试用例添加到测试套件中
- min_wait = 1
- max_wait = 2
- host = 'http://127.0.0.1:5000'
locust -f .\test2.py --host=http://127.0.0.1:5000 --headless -u 1 -r 1 --run-time 1m --tags tag1
执行含有 tag1 标签的 测试用例