在本章节,你可以学习到:
1、Locust代码实例展示及解读:
①官网代码示例
②demo模板代码
2、Loucst的高级用法:
①关联
②参数化
③检查点
3、Locust的运行模式:
①单进程运行模式
②多进程分布式运行
4、Locust界面展示及结果分析
我们来看看官网的第一个例子,
很简单:
# -*- coding: utf-8 -*- """ @ auth : carl_DJ @ time : 2022-07-23 """ from locust import HttpUser, between, task class WebsiteUser(HttpUser): #设置等待时间间隔 wait_time = between(5, 15) def on_start(self): self.client.post("/login", { "username": "test_user", "password": "" }) @task def index(self): self.client.get("/") self.client.get("/static/assets.js") @task def about(self): self.client.get("/about/")
这里有几点说一下:
1、between: 设置等待时间, 5s~15s;
2、client.get/ client.post: 用法跟request是一样的。
其他的就没有什么可以重点强调的!
这段代码,小鱼展示两点:
1、locust demo模板;
2、locust 代码执行顺序。
代码示例
# -*- coding: utf-8 -*- """ @ auth : carl_DJ @ time : 2022-07-23 """ from locust import HttpUser,TaskSet,task ''' 执行顺序: Locust setup → TaskSet setup → TaskSet on_start → TaskSet tasks → TaskSet on_stop → TaskSet teardown → Locust teardown ''' class UserBehavor(TaskSet): #启动locust是运行setup方法 def setup(self): print('task setup') def teardown(self): print('task teardown') #虚拟用户启动task时运行 def on_start(self): print('start') #虚拟用户结束task时运行 def on_stop(self): print('end') @task(2) def index(self): self.client.get('/') @task(1) def profile(self): self.client.get('/profile') class WebsitUser(HttpUser): def setup(self): print('locust setup') def teardown(self): print('locust teardown') host = 'http://xxx.com' task_set = task(UserBehavor) min_wait = 100 max_wait = 5000 if __name__ == '__main__': pass
虽然小鱼展示了模板,可以直接使用,但是,里面的内容,需要各位大佬自己填充~~
毕竟 业务不同,填充的内容也不一样!!
小屌丝:鱼哥,感觉你在开车,但是没证据!!
小鱼:都快一点了,你还不睡觉,白富美不香吗!!!
小屌丝:…
关于locust类的详细讲解,放在了第一章节,因为
小鱼觉得:先了解基础,再去看代码,这样就不至于看代码想看天书,至少遇到一个类,能有一个印象。
这里,为了方便大家,点击下方带颜色的文字即可进入第一章节:
《深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust》
回归正题,老规矩,先上代码,再逐层分析
# -*- coding: utf-8 -*- """ @ auth : carl_DJ @ time : 2020-9-23 """ from locust import HttpUser,task,TaskSet ''' 在版本10.1,已经不再使用HttpLocust 和Locust, 取而代之的是HttpUser 和User ''' # 定义ScriptTasks类,继承TaskSet类 class ScriptTasks(TaskSet): #初始化,每个locust用户开始做的第一件事 def on_start(self): #放置 用户名和密码 self.client.post('/login', { "username":"carl_dj", "password":'111111' }) #@task()装饰的方法为一个事务,方法的参数用于指定该行为的执行权重,参数越大每次被虚拟用户执行的概率越高,默认为1 @task(2) #创建index方法, def index(self): self.client.get('/') @task(1) def about(self): #self.client 属性使用python的request库的方法,调用和使用方法和request一样 self.client.get('/about') @task(2) def demo(self): payload = {} headers = {} self.client.post('/demo', data = payload,headers = headers) #TaskSet类,该类定义用户任务信息(模拟用户信息), class WebsitUser(HttpUser): #指向一个定义的用户行为 task_set = task(ScriptTasks) #被测系统的host, host = 'http://www.xxxxxx.com' #每个用户执行两个任务间隔时间最小值,单位是(毫秒,默认是1000ms) min_wait = 100 # 每个用户执行两个任务间隔时间最大值,单位是(毫秒) max_wait = 5000
这里小鱼在强调一次:
1、关于 HttpUser 和User的使用, 在版本10.1之后,就需要换成HttpUser 和 User,否则报错;
>>>因为小鱼发现,很多网站的大佬都在使用HttpLocust 和Locust,如果你的Locust 版本是 9.x或者8.x,可以使用,不做强要求。
1、TaskSet类实现了虚拟用户所执行任务的调度算法,包括:
①规划任务执行顺序:schedule_task;
②挑选下一个任务:execute_next_task;
③执行任务:execute_task;
④休眠等待:wait;
⑤中断控制:interrupt;
2、在1的基础上,就可以在TaskSet子类中进行以下操作:
①描述虚拟用户的业务测试场景;
②对虚拟用户的所有行为进行组织和描述;
③对不同任务的权重进行配置;
3、 @task
①通过@task()装饰的方法为一个事务。
>>>参数越大每次被虚拟用户执行的概率越高,默认是1。
4、TaskSet子类中采用2种方式定义任务信息:
① @task
② tasks属性
1、采用@task装饰器定义任务信息:
# -*- coding: utf-8 -*- """ @ auth : carl_DJ @ time : 2020-9-23 """ from locust import task,TaskSet class UserBehav(TaskSet): @task(2) def test_case1(self): self.client.get("/testcase1") @task(4) def test_case2(self): self.client.get("/testcase2")
2、采用tasks属性定义任务信息:
# -*- coding: utf-8 -*- """ @ auth : carl_DJ @ time : 2020-9-23 """ from locust import TaskSet def test_case1(self): self.client.get("/testcase1") def test_case2(self): self.client.get("/testcase2") class UserBehav(TaskSet): tasks = {test_case1:2,test_case2:4} #另一种写法 # tasks = [(test_job1,1), (test_job1,3)]
上面的代码,没有什么难度,这里就不做解释。