学习笔记-locust入门

2020-03-20  本文已影响0人  sofiiii

1、性能测试定义

2、测试分类

3、流程

4、locust优点

5、locust示例

class WebsiteTasks(TaskSet):
    def on_start(self):
        #进行初始化的工作,每个Locust用户开始做的第一件事
        self.readyaml = ReadYamlTool()
        #添加cookie
        cookie = self.readyaml.get_cookie(ApiData.projectName, 'cookies', 'COOKIESCONF', 'test_sudiyicas')
        jar = self.client.RequeststookieJar()
        jar.set('sudiyi.cas.test', cookie)
        self.client.cookies.update(jar)

    @task(weight=1)  #表示一个Locust实例被挑选执行的权重,数值越大,执行频率越高
    def run_city_rank(self):
        #调用城市排名接口
        jsonTansfer = JsonTransfer(ApiData.prjectName, ApiData.moduleName, ApiData.jsonFileName[0])
        # 获取接口数据
        api_data = jsonTansfer.read_api_data(ApiData.moduleName, ApiData.apiName[0])
        # 获取校验数据
        check_data = jsonTansfer.read_check_data(ApiData.moduleName)
        httpcode = check_data['httpcode']
        code = check_data['code']
        message = check_data['message']
        api_url = api_data['api_url']
        body_data = api_data['body_data']
        headers = authTool.makeHeaders(ApiData.HEADER_TYPE, 'POST', api_url)

        res = self.client.post(url=api_url,data=body_data,headers=headers,catch_response=True)

        re_httpcode = res.status_code
        re_code = res.json()['code']
        re_message =  res.json['message']

        #检查结果
        try:
            if re_httpcode == httpcode and re_code ==code and re_message==message:
                res.success()

            else:
                res.failure('[FailInfo]:{}'.format(str(res.json())))

        except Exception as e:
            res.failure('[ErrorInfo]:{}'.format(e))


class WebsiteUser(HttpLocust):
    task_set = WebsiteTasks
    min_wait = 1000 #用户执行任务之间等待时间的下界,单位:毫秒。
    max_wait = 2000 #用户执行任务之间等待时间的上界,单位:毫秒。 在测试过程中,两次请求的间隔时间为1->2秒间的随机值。
    host = host

5、locust执行流程

6、TaskSet类

1、TaskSet类实现了虚拟用户所执行任务的调度算法,包括规划任务执行顺序(schedule_task)、挑选下一个任务(execute_next_task)、执行任务(execute_task)、休眠等待(wait)、中断控制(interrupt)等待。在此基础上,就可以在TaskSet子类中采用非常简洁的方式来描述虚拟用户的业务测试场景,对虚拟用户的所有行为进行组织和描述,并可以对不同任务的权重进行配置。

2、通过@task()装饰的方法为一个事务。方法的参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1。
TaskSet子类中定义任务信息时,采取两种方式:@task装饰器和tasks属性。

from locust import TaskSet, task

class UserBehavior(TaskSet):
    @task(1)
    def test_job1(self):
        self.client.get('/test1')

    @task(3)
    def test_job2(self):
        self.client.get('/test2')

采用tasks属性定义任务信息时

from locust import TaskSet

def test_job1(obj):
    obj.client.get('/test1')

def test_job2(obj):
    obj.client.get('/test2')

class UserBehavior(TaskSet):
    tasks = {test_job1:1, test_job2:3}
    # tasks = [(test_job1,1), (test_job1,3)] # 两种方式等价
上一篇 下一篇

猜你喜欢

热点阅读