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')