7 locust 关联

1 关联

  • 上一个请求返回的某个值给下一个请求使用
  • 下面代码模拟登录生成 token 给 do_something 在 headers 中使用

 

import requests
from locust import TaskSet, task, HttpLocust, between


class TestLogin(TaskSet):

    token = None

    def on_start(self):
        # 调用登录接口,生成 token
        self.token = self.do_login()


    def do_login(self):
        url = 'https://www.baidu.com/login'
        data = {
                   "username": "admin1",
                   "password": "admin123456"
               }

        with requests.post(url=url,     # 使用 requests 发送请求,locust 不会进行结果统计
                              data=data,
                              catch_response=True,  # catch_response: 允许该请求被标记为失败
                              name='01_baidu_login') as resp:   # name: 结果收集是会按照 name 进行归类
            # 断言
            if resp.status_code == 200:
                if resp.json()['code'] == 1:
                    return resp.json()['data']['token']
                else:
                    return None
            else:
                return None

    @task
    def do_something(self):
        url = 'https://www.baidu.com/do'
        headers = {
            "token": self.token     # 使用登录后生成的 token
        }

        with self.client.get(url=url,
                              headers=headers,
                              catch_response=True,  # catch_response: 允许该请求被标记为失败
                              name='01_do_something') as resp:   # name: 结果收集是会按照 name 进行归类
            # 断言
            if resp.status_code == 200:
                if resp.json()['code'] == 1:
                    resp.success()
                    print(resp.json())
                    return resp.json()['data']['token']
                else:
                    resp.failure('01_baidu_login failed: code is ' + resp.json()['code'])
                    print(resp.text)
                    return None
            else:
                resp.failure('01_baidu_login failed: status is not 200')
                print(resp.text)
                return None
        pass


class RunTest(HttpLocust):  # 有变化。HttpLocust 改为 HttpUser/FastHttpUser
    task_set = {TestLogin}  # 有变化。task_set 改为 tasks。且值为 dict
    wait_time = between(0, 0)
    host = ""


if __name__ == '__main__':
    import os
    os.system('locust -f ./locustfile2.py --web-host=127.0.0.1 --web-port=9999')

 

posted @ 2021-01-27 17:49  栗子测试开发  阅读(121)  评论(0)    收藏  举报