2 locust1.0 新代码

from locust import HttpUser, task, between, SequentialTaskSet
import json


class TestLogin(SequentialTaskSet): # 使用 SequentialTaskSet 让 task 顺序执行

    # 企业id在我的企业页面最下变
    corpid = 'xxx'
    # 新应用可见范围必须是工作室,所有人才能接到消息
    agentid = 'xxx'
    corpsecret = 'xxx-xxx'
    # uid 在通讯录每个人的详情页,即账号
    uid = 'xxx'
    access_token = None
    message = "This is a auto message from lizi !"

    @task
    def get_token(self):
        url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}'.format(self.corpid, self.corpsecret)

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


    @task
    def send_data(self):
        headers = {
            "Content-Type": "application/json"
        }

        # access_token= self.req_get_token()
        send_url = '/cgi-bin/message/send?access_token={}'.format(self.access_token)
        send_values = {
            "touser":'daisy',
            "msgtype":"text",
            "agentid":'1000002',
            "text":{
                "content":self.message
            },
            "safe":"0"
        }
        send_msgs = (bytes(json.dumps(send_values),'utf-8'))

        with self.client.post(url=send_url,
                              headers=headers,
                              data=send_msgs,
                              catch_response=True,  # catch_response: 允许该请求被标记为失败
                              name='02_send_data') as resp:   # name: 结果收集是会按照 name 进行归类
            # 断言
            if resp.status_code == 200:
                if resp.json()['errcode'] == 0:
                    resp.success()
                    print(resp.json())
                else:
                    resp.failure('02_send_data failed: code is ' + resp.json()['code'])
                    print(resp.text)
            else:
                resp.failure('02_send_data failed: status is not 200')
                print(resp.text)


#提问:这个tasks ={Testlogin}的类对应调用Testlogin(不用传参数吗?例如host没用传,在req_get_token方法中可以直接获取了)
# 那send_data中的send_url怎么以参数的形式传递和获取呢?        
class RunTest(HttpUser):
    tasks = {TestLogin}
    wait_time = between(1,2)
    host = 'https://qyapi.weixin.qq.com'


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

 

posted @ 2021-01-31 14:12  栗子测试开发  阅读(144)  评论(0)    收藏  举报