使用locust1.0进行压力测试

因为locust更新了一版,之前的代码不是警告就是报错,很烦,然后各种找资料没找到,最后根据官方文档重新写了一个,希望对大家有帮助

需求:测试查看红包和抢红包的接口,难点是需要传用户的token和红包的id,解决办法是读取excel的值再处理存入栈中。

# encoding: utf-8
# @author: 山东少年先锋队
# @email: 1253039341@qq.com
# @time: 2020/6/28 16:26

import random
import subprocess
import json
from queue import Queue
from locust import HttpUser, task, between
from openpyxl import load_workbook


class ForumSection(HttpUser):
    wait_time = between(0, 2)  # 模拟用户在执行每个任务后等待0到2秒
    ws = load_workbook("token.xlsx")['Sheet1']  #在相同文件夹下存放了token.xlsx文件,表名是Sheet1
    first_column = ws['A']  # 读取excel的第一列
    token_red = Queue(maxsize=0)  # 先进先出,<1 是长度不限
    start_num = 255
    stop_num = 334
    live_id = '17812' 
    for i in range(start_num, stop_num):  # 取后台红包id,因为新建的红包时连续的
        for x in range(len(first_column)):
            data = [i, first_column[x].value]
            token_red.put_nowait(data)  # 产生数据(列表)红包id+token

    @task(2) # 这个请求的数量是下面的两倍
    # 这个是get请求
    def red_detail(self):
        item_id = random.randint(self.start_num, self.stop_num)
        header = {
            "cq-token": "{0}".format(token_1),  # token
            "orgid": "29",  # 组织
        }
        with self.client.get(f"/v1/app/reddetail?red_id={item_id }", catch_response=True,
                             headers=header) as response:
            if response.status_code == 200:
                print("查看id是" + str(item_id ) + '的红包成功')
            else:
                assert response.status_code == 200

    @task(1)
    # 这个是post请求
    def red_start(self):
        token_1, red_1 = None, None
        try:
            data_one = self.token_red.get()  # 消费数据
            token_1 = data_one[1]
            red_1 = data_one[0]
        except self.token_red.empty():  # //队列取空后,直接退出
            print('no data exist')
            exit(0)

        header = {
            "Content-Type": "application/x-www-form-urlencoded",
            "cq-token": "{0}".format(token_1),  # token
            "oid": "29",  # 组织
        }
        body = {"live_id": self.live_id,  # 直播id
                "red_id": "{0}".format(red_1),  # 红包id
                }
        print('token:' + str(token_1) + '       红包id:' + str(red_1))
        with self.client.post("/v1/app/grab", data=body, headers=header) as response:
            try:
                res = json.loads(response.text)
                if response.status_code == 200:
                    if str(res['code']) == '1':
                        print('抢到了' + str(int(res['data']) / 100) + '元')
                    elif str(res['code']) == '0' and res['data'] == '红包已抢完':
                        print('红包已抢完')
                    else:
                        print('错误信息:' + res['data'])
                else:
                    assert response.status_code == 200
            except:
                print('返回数据格式错误:' + response.text)


if __name__ == "__main__":
    subprocess.Popen("locust -f hong.py", shell=True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值