性能测试-locust

性能测试-locust


一个简单的示例

业务场景:转账(transfer),退款(return_money),收款(recv_money)三个接口。
退款和收款都要用到转账的返回值,使用USER_CREDENTIALS存储转账的返回值,退款和收款可以从这个参数取值。

import json
import random
import requests
from locust import HttpUser, task, between
from urllib3.exceptions import InsecureRequestWarning


USER_LIST = [900000000,900000001,...]  # 转账账户
USER_CREDENTIALS=[]
headers = {
        'Content-Type': 'application/octet-stream'
    }  # 请求头
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


class Demo(HttpUser):
    wait_time = between(2, 5)  # 模拟用户等待2到5s然后执行
    host = "xxxx" # 此处写你项目的地址
    @task(2)
    def transfer(self):
        headers.pop('UserId', None)
        url = "xxxx" # 此处写你接口的地址

        two_user = random.sample(USER_LIST, 2)

        payload = {
            "from_uid": str(two_user[0]),
            "to_uid": str(two_user[1]),
            "currency_type": "0",
            "amount": "100",
            "password": "123321",
            "remark": "测试"
        }
        json_string = json.dumps(payload)
        binary_data = json_string.encode('utf-8')
        print(f'【{two_user[0]}】向【{two_user[1]}】转账')
        
        with self.client.post(url=url, data=binary_data, headers=headers, verify=False, catch_response=True) as response:
            if response.status_code == 200 and response.json()['code'] == 200:
                response.success()
            else:
                print(response.text)
                print('转账的返回结果:else:', response.json())
                response.failure("Non-200 status code")
        print('转账的返回结果:',response.json())
        serial_number = response.json()['data']['serial_number']
        USER_CREDENTIALS.append((two_user[1],serial_number))
        print(USER_CREDENTIALS)
        print(response.status_code, response.text[:1000])  # 打印状态码及返回text

    @task()
    def return_money(self):
        url = "xxxx" # 此处写你接口的地址

        if len(USER_CREDENTIALS) > 0:
            UserId, serial_number = USER_CREDENTIALS.pop()
            headers['UserId'] = str(UserId)

            payload = {"serial_number": serial_number}
            json_string = json.dumps(payload)
            binary_data = json_string.encode('utf-8')

            with self.client.post(url, binary_data, headers=headers,verify=False,
                                  catch_response=True) as response:
                if response.status_code == 200 and response.json()['code'] == 200:
                    response.success()
                else:
                    print('--------------------------退款有问题的订单号:', serial_number)
                    response.failure("Non-200 status code")


            assert response.status_code == 200  # 断言请求返回200
            print(response.text)

            # 断言返回的 code 是否等于预期值
            # assert data['code'] == 200

            print(response.status_code, response.text[:1000])  # 打印状态码及返回text
            print(f'【{UserId}】操作退款')


    @task()
    def recv_money(self):
        url = "xxxx" # 此处写你接口的地址

        if len(USER_CREDENTIALS) > 0:
            UserId, serial_number = USER_CREDENTIALS.pop(0)
            headers['UserId'] = str(UserId)

            payload = {"serial_number": serial_number}
            json_string = json.dumps(payload)
            binary_data = json_string.encode('utf-8')

            with self.client.post(url, binary_data, headers=headers,verify=False,
                                  catch_response=True) as response:
                if response.status_code == 200 and response.json()['code'] == 200:
                    response.success()
                else:
                    print('--------------------------收款有问题的订单号:',serial_number)
                    response.failure("Non-200 status code")


            assert response.status_code == 200  # 断言请求返回200
            print(response.text)


            print(response.status_code, response.text[:1000])  # 打印状态码及返回text
            print(f'【{UserId}】操作收款')

运行:命令行输入locust -f xxx.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值