# *-* coding:utf-8 *-*
import json
import ssl
from locust import User,SequentialTaskSet,task,constant,HttpUser, events,between
import requests
import sys
#
# 预发账号
# 预发商品 spuId: , skuId:
# 预发订单 orderId=
# 预发首页 storeId=&scene=1&pageId=
# 预发环境Cookie
Cookie = 'wasxuid=6665514; wasxuid_r=6665514; xp_ut=2; Hm_lvt_e50e47b9abfec85043aeff1c109832d0=1614829015,1616681283,1617173872; Hm_lpvt_e50e47b9abfec85043aeff1c109832d0=1617173872; csrfToken=9m1INhzzjPfIsp8d56usmyKQ; b134ba8dc28f178811789df957e11f7d=a5aed52524d50bc853d30ffe90bf506d; appid=xp_entrance; uid=2000002; cookieVersion=; oauthCookie=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; wasxid-xp_ppstore=b639061d51824350bff4eb08abeabb81'
# 预发环境host
host = '。。。。。。。'
# 创建订单(创建预订单和创建订单一定要顺序执行)
class SequenceofTasks(SequentialTaskSet):
ssl._create_default_https_context = ssl._create_unverified_context # https用
# 创建预订单
@task
def creat_pre_order(self):
global host
url = '{}/api/trade/pre/create?redirectURL=http%3A%2F%2Fwww.baidu.com'.format(host)
global Cookie
headers = {
'Content-Type': 'application/json',
'Cookie': Cookie
}
# 预发环境的商品:1318471748264456194
body = {
"goodsContent": [
{"skuId": "1318471748264456194", "spuId": "1319189951258165250", "consumeAmount": 1, "buyMode": 1}]
}
# 获取预订单号
response = requests.post(url, json.dumps(body), headers=headers)
data = response.text
data = json.loads(data) # 通过json.loads()函数,将type 'unicode'转化为type 'dict'
if data['code'] == 200:
self.preTid = data['data']['preTid'] # 预订单号
elif data['code'] == 12150008:
print('!!!登录态过期了' + str(data))
sys.exit() # 登录态过期了,就直接退出
else:
self.preTid = 0
print('!!!!' * 10 + str(data))
# sys.exit() # 不建议sys.exit()退出,因为个别请求失败是在所难免的。
# 设置响应断言
with self.client.post(url, json.dumps(body), headers=headers) as response:
# 根据返回的数据,进行检查点判断
if response.content and '200' in response.content.decode('utf-8'):
pass
else:
# response.failure(response.content.decode('utf-8'))
print(response.content.decode('utf-8'))
# 创建订单
@task
def creat_order(self):
global host
url = '{}/api/trade/create?redirectURL=http%3A%2F%2Fwww.baidu.com'.format(host)
global Cookie
headers = {
'Content-Type': 'application/json',
'Cookie': Cookie
}
body = {
"preTid": self.preTid,
"source": 1,
"payType": 1,
"returnUrl": "https://pmall.cs-pre.xiaopeng.com",
"payScene": "2",
"needCredit": 0,
"needPayment": 0
}
# 设置响应断言
with self.client.post(url, json.dumps(body), headers=headers) as response:
# 根据返回的数据,进行检查点判断
if response.content and '200' in response.content.decode('utf-8'):
pass
else:
# response.failure(response.content.decode('utf-8'))
print(response.content.decode('utf-8'))
# 店铺首页
def store_index(self):
global host
url = '{}/api/store/view?storeId=1272458310670962690&scene=1&pageId=f4896e08b49142d19a14411e53971942'.format(host)
global Cookie
headers = {
'Content-Type': 'application/json',
'Cookie': Cookie
}
# 设置响应断言
with self.client.get(url, headers=headers) as response:
# 根据返回的数据,进行检查点判断
if response.content and '200' in response.content.decode('utf-8'):
pass
else:
# response.failure(response.content.decode('utf-8'))
print(response.content.decode('utf-8'))
# 商品详情
def goods_info(self):
global host
url = '{}/api/trade/goods/info?spuId=1318471748264456194'.format(host)
global Cookie
headers = {
'Content-Type': 'application/json',
'Cookie': Cookie
}
# 设置响应断言
with self.client.get(url, headers=headers) as response:
# 根据返回的数据,进行检查点判断
if response.content and '200' in response.content.decode('utf-8'):
pass
else:
# response.failure(response.content.decode('utf-8'))
print(response.content.decode('utf-8'))
# 订单列表
def merge_list(self):
global host
url = '{}/api/trade/merge/list?redirectURL=http%3A%2F%2Fwww.baidu.com'.format(host)
global Cookie
headers = {
'Content-Type': 'application/json',
'Cookie': Cookie
}
# 设置响应断言
with self.client.get(url, headers=headers) as response:
# 根据返回的数据,进行检查点判断
if response.content and '200' in response.content.decode('utf-8'):
pass
else:
# response.failure(response.content.decode('utf-8'))
print(response.content.decode('utf-8'))
# 订单详情
def order_info(self):
global host
url = '{}/api/order/info/1377592660808249345?redirectURL=http%3A%2F%2Fwww.baidu.com'.format(host)
global Cookie
headers = {
'Content-Type': 'application/json',
'Cookie': Cookie
}
# 设置响应断言
with self.client.get(url, headers=headers) as response:
# 根据返回的数据,进行检查点判断
if response.content and '200' in response.content.decode('utf-8'):
pass
else:
# response.failure(response.content.decode('utf-8'))
print(response.content.decode('utf-8'))
# 模拟用户
class MyUser(HttpUser):
# tasks = [SequenceofTasks] # 下单
tasks = [store_index,goods_info,merge_list,order_info] # 浏览
wait_time = between(2, 5)
# 复制粘贴到Terminal中
# locust -f locust_for_pp_2.py --host=http://localhost:8089/
# locust -f locust_for_pp_2.py --host=http://localhost:8089/ --no-web -c 100 -r 10