Locust性能压测脚本

# *-* 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

 

posted @ 2021-07-30 20:44  cforcnb  阅读(369)  评论(0)    收藏  举报