性能测试请求重试实现思路

news2024/11/23 13:01:08

文章目录

  • 一、背景
  • 二、尝试的解决方案
  • 三、解决方案1:jmeter retrier插件!有点用但是不是特别有用-_-||
  • 四,最终解决方案:lucust!

一、背景

最近系统需要压测一些活动,场景是新建抽奖活动之后,每隔2s查询1次(最多3次,3次后还是失败就算失败),查询到中奖为止

二、尝试的解决方案

这个是抽奖接口的response
在这里插入图片描述
一开始我的实现思路是这样的
1、 创建while controller

2、添加查询状态的http sampler

3、添加定时器,每隔2s执行一次查询

4、添加beanshell 脚本,记录轮询的次数。
我的脚本结构如下:
在这里插入图片描述
在这里插入图片描述
但是我这样查询的结果,是按照查询总次数来的
在这里插入图片描述
开发是希望如果是10个线程,那总个数是10次,看来jmeter自身是没办法实现了。
只能用bean shell或者写个java脚本搞成jar包解决问题。

三、解决方案1:jmeter retrier插件!有点用但是不是特别有用-_-||

后面我就去百度,发现有人推荐这个插件

jmeter retrier

使用方法:下载了jar包以后把它放到ext文件夹下面,然后重启jmeter,右键-添加-后置处理器-retry post processor(具体的使用方法可以去github看看readme,我懒哈哈哈)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是这个使用过程中还是有问题,它的重试条件还是不灵活,比如上面的,我要同时满足比如响应状态码为200,还有返回的data.code=0,但是这边好像没办法这么配置(可能是我不会用),没办法很灵活的用

四,最终解决方案:lucust!

罢了,还是直接换个工具吧,用了lucust写脚本更灵活,也很简单,而且出来的报告又好看,谁不喜欢呢哈哈哈

import os
import random

from locust import HttpUser, between, task, SequentialTaskSet

headers = {'x-auth-token': 'GUIDE_4hFNGkOkQvuSPk86P2iEsypewK', 'Content-Type': 'application/json'}

tokens = [
    "Bearer 7PhvW-0F_0XOyXwFq1P5IvkO2d3CpshBLSi_NRMaK3uWAFX9WRd51uyedKG_y3JC5uXT]
class activity_coupon(SequentialTaskSet):
    wait_time = between(2, 2)

    @task(1)
    def test_apply(self):
        self.flag = False
        self.token = random.sample(tokens, 1)[0]
        url = "/consumer/draw/participate/18a74f0020002?brand=10039"
        headers = {
            'Host': 'consumer-fat.myaiwecom.com',
            'content-type': 'application/json;charset=UTF-8',
            'Authorization': self.token,
            'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.34(0x18002231) NetType/WIFI Language/zh_CN',
            'Referer': 'https://servicewechat.com/wxfe6b58432a64a957/39/page-frame.html'
        }
 with self.client.request(method='get', url=url, headers=headers,
                                 catch_response=True) as response:
            if response.status_code == 200:
                # print(444,response.text)
                self.trace_id = response.json()['data']['traceId']
                response.success()
            else:
                print(555, response.status_code, response.text)
                response.failure(str(response.status_code) + str(response.text))

    @task(1)
    def test_result1(self):
        url = "/consumer/draw/result/{}?activityId=18a74f0020002&brand=10039".format(self.trace_id)
        headers = {
            'Authorization': self.token
        }
        with self.client.request(method='get', url=url, headers=headers, name='result1',
                                 catch_response=True) as response:
            if response.status_code == 200:
                response.success()
                if response.json()['code'] == 0:
                    print(111, response.json())
                    self.flag = True
            else:
                response.failure(str(response.status_code) + str(response.text))

    @task(1)
    def test_result2(self):
        if self.flag:
            return
        url = "/consumer/draw/result/{}?activityId=18a74f0020002&brand=10039".format(self.trace_id)
        headers = {
            'Authorization': self.token
        }
        with self.client.request(method='get', url=url, headers=headers, name='result2',
                                 catch_response=True) as response:
            if response.status_code == 200:
                response.success()
                if response.json()['code'] == 0:
                    print(222, response.json())
                    self.flag = True
            else:
                response.failure(str(response.text))

    @task(1)
    def test_result3(self):
        if self.flag:
            return
        url = "/consumer/draw/result/{}?activityId=18a74f0020002&brand=10039".format(self.trace_id)
        headers = {
            'Authorization': random.sample(tokens, 1)[0]
        }
        with self.client.request(method='get', url=url, headers=headers, name='result3',
                                 catch_response=True) as response:
            if response.status_code == 200:
                if response.json()['code'] == 0 and response.json()['data']['winPrize'] == True:
                    response.success()
                else:
                    response.failure(str(response.text))
            else:
                response.failure(str(response.text))
      class MOCPerf(HttpUser):
    tasks = [activity_coupon]
    host = 'https://consumer-fat.m1.com'


if __name__ == "__main__":
    os.system("locust -f %s " % __file__)
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 稀疏数组

实际需求(应用场景) 稀疏数组基本介绍 上面表格的第一行中的6、7、8 表示左边的二维数组一共有 6 行 7 列,在数组中有 8 个不同的值,分别是22、15、 11、17、 -6、 39、 91、 28. 表格的其他行表示每个值所在的行列信息&#xff0…

斯坦福开源FlashAttention,大模型速度翻倍

一年时间,斯坦福大学提出的新型 Attention 算法 ——FlashAttention 完成了进化。这次在算法、并行化和工作分区等方面都有了显著改进,对大模型的适用性也更强了。 近来,几种长上下文语言模型陆续问世,包括 GPT-4(上下…

【C#性能】C# 语言中的数组迭代

一、说明 可迭代性,是数组等操作的根本;在C程序开发过程中,可迭代操作是非常普遍、非常广泛的,然而,对这种操作知道多少,又不知道多少,都将影响开发灵活性、开发的进度。因此,本文干…

vs2013 编译wxwidgets界面库

首先进入官网下载,本人再git上下载的基本都编译失败 https://www.wxwidgets.org/ 在网站里面找最新的就可以,下载之后放在一个目录,找到vs的目录 然后找到wx_vc12.sln,打开编译即可 Debug、Release编译出来的是静态库 DLL Deb…

P1149火柴棒等式题解

P1149[NOIP2008 提高组] 火柴棒等式 题目描述 给你 n n n 根火柴棍,你可以拼出多少个形如 A B C ABC ABC 的等式?等式中的 A A A、 B B B、 C C C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0 0 0)。用…

华南理工大学电信学院信号与系统实验1~4(杨俊美老师)

博客中仅放了题目,源码在下方链接: 链接:https://pan.baidu.com/s/1TpRAiNltybYWimETKHFKWA?pwd88ux 提取码:88ux --来自百度网盘超级会员V4的分享 有可能实验的序号可能编错码或者放错文件夹(因为老师给的时候很多…

题目4 命令执行(保姆级教程)

url:http://192.168.154.253:84/ #打开http://XXX:81/,XXX为靶机的ip地址 审题 1、打开题目看到有一个提示,此题目需要通过利用命令执行漏洞执行Linux命令获取webshell,最后从根目录下key.php文件中获得flag 2、开始答题 第一步&…

【Kafka】消息队列Kafka基础

目录 消息队列简介消息队列的应用场景异步处理系统解耦流量削峰日志处理 消息队列的两种模式点对点模式发布订阅模式 Kafka简介及应用场景Kafka比较其他MQ的优势Kafka目录结构搭建Kafka集群编写Kafka一键启动/关闭脚本 Kafka基础操作创建topic生产消息到Kafka从Kafka消费消息使…

GB/T 25000.51解读——软件产品的可靠性怎么测?

GB/T 25000.51-2016《软件产品质量要求和测试细则》是申请软件检测CNAS认可一定会用到的一部国家标准。在前面的文章中,我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容以及对软件产品的八大质量特性中的功能性…

re学习(24)攻防世界 Hello CTF(进制转换)

一.题目链接: https://adworld.xctf.org.cn/challenges/list 二.使用步骤 int __cdecl main(int argc, const char **argv, const char **envp) {int i; // ebxchar v4; // alint result; // eaxint v6; // [esp0h] [ebp-70h]int v7; // [esp0h] [ebp-70h]char Buffer[2]; //…

微信内测朋友圈可以置顶了

我是卢松松,点点上面的头像,欢迎关注我哦! 微信现在算是垄断了聊天平台,每出个小功能都引起争议,这次朋友圈置顶就是个很好的例子:**微信内测朋友圈可以置顶了。已经上了大新闻、大热门!**如下图所示&…

10个流行的硬盘数据恢复软件:轻松恢复丢失的文件!

数据丢失对于个人和企业来说都是一场噩梦。无论是由于意外删除、硬件故障还是恶意攻击,丢失重要数据都可能导致重大挫折。 这就是硬盘数据恢复软件的用武之地!使用正确的数据恢复工具,您可以检索有价值的文件并迅速回到正轨。我们将探索十种…

OpenCV系列__chapter2

这里写目录标题 1 图像加减乘除位运算1.1 加法 img cv2.add(img1, img2)1.2 减法 img cv2.subtract(img1, img2)1.3 乘法 img cv2.multiply(img1, img2)1.4 除法 img cv2.divide(img1, img2)1.5 位运算 2 图像增强2.1 线性变换2.2 非线性变换 3 图像几何变换3.1 裁剪、放大…

需求分析案例:餐厅排队叫号送券需求

本文介绍一个餐饮系统的排队送券需求,针对该需求进行边界划分和技术实现方案的过程。 1、需求提出 还是前文说的互联网餐饮系统,提供了餐厅排队叫号能力。 因为有些热门餐厅,吃饭的人太多了,就出现了很多排队时间长,…

SkyWalking链路追踪-技术文档首页

SkyWalking 文档中文版(社区提供) (skyapm.github.io)https://skyapm.github.io/document-cn-translation-of-skywalking/ SkyWalking-基本概念 SkyWalking链路追踪是一个用于分布式系统的性能监控工具,它帮助开发人员了解系统中各组件之间…

【如何训练一个中译英翻译器】LSTM机器翻译模型部署之ncnn(python)(四)

ncnn:https://github.com/Tencent/ncnn 1、.h5模型保存为TFSaveModel格式 import tensorflow as tf from keras.models import load_model# 加载Keras模型 model load_model(encoder_model.h5)# 转换为SavedModel类型 tf.saved_model.save(model, TFSaveModel)2、…

ssm 图书借阅管理系统 【纯干货分享,免费领源码06780】

大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在图书馆的要求下,开发一款整体式结构的图书借阅管理系统&#xf…

5.44 综合案例2.0-矩阵键盘信息输入上传-OLED屏幕

综合案例2.0-矩阵键盘信息输入上传-OLED屏幕 案例说明1、应用场景2、M320矩阵引脚说明3、接线说明 搭建云平台环境1.添加设备2.创建设备类型3.功能定义(创建物模型) 代码1.更改MQTT信息 测试 案例说明 矩阵键盘输入信息显示在OLED显示屏上。按确定键可以…

Django 图书管理系统

一、功能及页面设计 二、页面展示 (1)首页 (2)注册 (3)登录 (4)普通用户登录 4.1查看图书页面 4.2查看图书详情页 4.3修改密码 (5)管理员登录 5.1添加图书 5.2添加图片 三、代码展示 因为代码太多不好一个个展示 所以需要源码的小伙伴可以找我要代码 感谢三连支持&#xff0…

云计算需求激增带来的基础设施挑战及解决方案

云计算的指数级增长迅速改变了我们消费和存储数字信息的方式。随着企业和个人越来越依赖基于云的服务和数据存储,对支持这些服务的强大且可扩展的基础设施的需求已达到前所未有的水平。 云计算需求的快速增长 我们的日常生活越来越多地被新技术所渗透。流媒体服务、…