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

文章目录

  • 一、背景
  • 二、尝试的解决方案
  • 三、解决方案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 randomfrom locust import HttpUser, between, task, SequentialTaskSetheaders = {'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 = Falseself.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 = Trueelse:response.failure(str(response.status_code) + str(response.text))@task(1)def test_result2(self):if self.flag:returnurl = "/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 = Trueelse:response.failure(str(response.text))@task(1)def test_result3(self):if self.flag:returnurl = "/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.mzph.cn/news/8897.shtml

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

相关文章

Spring6——入门

文章目录 入门环境要求构建模块程序开发引入依赖创建java类创建配置文件创建测试类运行测试程序 程序分析启用Log4j2日志框架Log4j2日志概述引入Log4j2依赖加入日志配置文件测试使用日志 入门 环境要求 JDK:Java17(Spring6要求JDK最低版本是Java17&…

1-Linux的目录结构

Linux的目录结构是规定好的,不可以随意进行更改! Linux的文件系统是采用级层式的树状目录结构,最上层是根目录–/,然后再在根目录下创建其它的目录。 各个目录中主要负责的功能和作用如下:(主体的结构一定…

引入第三方字体库 第三方字体库Google Fonts

googlefonts官方网站 googlefonts中国网站 本人是在微信小程序中引入 在static中建一个文件夹font-family 例如字体链接:https://fonts.font.im/css?familyKirangHaerang 将该链接的返回的资源的复制到css文件中 font-family.css /* [0] */ font-face {font-fam…

使用JMeter进行接口测试教程

安装 使用JMeter的前提需要安装JDK,需要JDK1.7以上版本目前在用的是JMeter5.2版本,大家可自行下载解压使用 运行 进入解压路径如E: \apache-jmeter-5.2\bin,双击jmeter.bat启动运行 启动后默认为英文版本,可通过Options – Ch…

使用node内置test runner,和 Jest say 拜拜

参考 https://nodejs.org/dist/latest-v20.x/docs/api/test.html#test-runner 在之前,我们写单元测试,必须安装第三方依赖包,而从node 20.0.0 版本之后,可以告别繁琐的第三方依赖包啦,可直接使用node的内置test runner…

centos中修改防火墙端口开放配置

1、直接进入文件修改 vim /etc/sysconfig/iptables 2、添加需要开放的端口 (1)添加需要开放的单个端口 4001 -A INPUT -m state --state NEW -m tcp -p tcp --dport 4001 -j ACCEPT (2)添加需要开放的某个网段端口 4001:4020 …

需求管理中最易忽视的6大重点

需求管理是产品经理的重点工作,如果无法有效进行需求管理,往往会引起需求变更、项目延期以及成本增加等问题。那么如何对需求进行高效管理,我们在需求管理中,往往最容易忽视的重点都有哪些? 1、重视项目整体管理计划 首…

VMWare虚拟机常用操作命令

今日一语:做到所有的细节都不放过,则可以避免99%已知的风险,但大多数都因懒惰而甘愿承受风险,至此悔不当初 查看虚拟机在本机网络的IP ip addr 本地向虚拟机传送文件 scp 文件 rootpath 虚拟机路径 enter后输入密码即可传输&am…

账号列表的删除编辑提交

<template><div><plan title"账号列表"><!-- selection-change"handleSelectionChange"添加这个属性就是点击可以得到你想要的value值 --><el-tablestyle"width: 100%":data"list"selection-change"h…

视频基础知识

1.视频比特率 视频的比特率是指传输过程中单位时间传输的数据量。可以理解为视频的编码采样率。单位是kbps&#xff0c;即每秒千比特。视频比特率是决定视频清晰度的一个重要指标。比特率越高&#xff0c;视频越清晰&#xff0c;但数据量也会越大。比如一部100分钟的电影&#…

K8S初级入门系列之五-Pod的高级特性

一、前言 前一篇我们了解了Pod的基本概念和操作&#xff0c;本篇我们继续研究Pod的一些高级特性&#xff0c;包括Pod的生命周期&#xff0c;pod探针&#xff0c;pod的调度等。 二、生命周期 1、Pod的生命周期 Pod的生命周期示意图如下&#xff1a; 挂起(Pending)&#xff0c…

【C进阶】指针进阶(1)_二次复习版

目录 1. 字符指针 1.1常量字符串的修改 加上const解决问题 打印常量字符串 1.2数组存放的字符串 1.3例题:数组创建与常量池的区别 2. 指针数组 2.1字符指针数组 2.2整型指针数组 2.3使用3个一维数组,模拟实现一个二维数组 2.4例题: 3.数组指针 3.1 数组指针的定义…

老年公寓人员定位管理系统:提升安全与关怀的智能解决方案

老年公寓作为提供安全居住环境和关怀服务的重要场所&#xff0c;面临着人员管理和安全控制的挑战。为了解决这些问题&#xff0c;老年公寓人员定位管理系统应运而生。基于为提供全面的安全管理和个性化关怀服务&#xff0c;华安联大便通过老年公寓人员定位管理系统的技术原理、…

数字孪生和 GIS 系统融合将为水利领域带来哪些变化?

随着科技的不断进步&#xff0c;数字孪生和 GIS 系统的融合应用逐渐成为了水利领域的新趋势。数字孪生是指通过数字化技术模拟物理实体和过程&#xff0c;将现实世界与虚拟世界相结合的技术&#xff0c;而 GIS 系统则是地理信息系统&#xff0c;用于收集、存储、管理和分析地理…

网工内推 | 售前、售后工程师,IE认证优先

01 广州佳杰科技有限公司 招聘岗位&#xff1a;IT售前工程师 职责描述&#xff1a; 1、负责所在区域 IT 产品的售前技术支持工作,包括客户交流、方案编写、配置报价、投标应标、测试、赋能等; 2、与厂商相关人员建立和保持良好的关系,相互配合,提高项目成功率和厂商满意度; 3、…

Python:使用openpyxl读取Excel文件转为json数据

文档 https://openpyxl.readthedocs.io/en/stable/https://pypi.org/project/openpyxl/ 安装 pip install openpyxl环境 $ python --version Python 3.7.0读取文件示例&#xff1a;将Excel文件读取为json数据 有如下一个文件 data.xlsx 实现代码 # -*- coding: utf-8 -…

如何恢复损坏/删除的 Word 文件

有关如何修复不可读的 Microsoft Word 文件或 Rich Text 文件中的文本的分步说明。这些说明有助于从损坏的*.doc、*.docx、*.dot、*.dotx、*.rtf文件&#xff08;任何版本和大小&#xff09;中提取文本&#xff0c;只需单击几下&#xff1a; 从此处下载奇客数据恢复 &#xff…

如何在Linux系统中安装ActiveMQ

1、环境 ActiveMQ是一个纯Java程序&#xff0c;这里安装5.18.2版ActiveMQ&#xff0c;该版MQ运行在JDK 11环境内&#xff0c;为此需要先搭建JDK 11环境&#xff0c;这里安装JDK 15。 1.1、卸载 卸载开源JDK软件包&#xff0c;如下所示&#xff1a; [rootlocalhost ~]# rpm -…

如何将表格中的状态数据转换为Tag标签显示

考虑到系统前端页面的美观程度&#xff0c;通常通过Tag标签来代替某条数据中的状态信息。仅通过一点操作&#xff0c;便能够使得页面美观程度得到较大提升&#xff0c;前后对比如下所示。代码基于Vue以及Element-ui组件实现。 修改前&#xff1a; 修改后&#xff1a; 修改前…

1.Flink概述

1.1 技术架构 应用框架层: 在API层之上构建的满足特定应用场景的计算框架&#xff0c;总体上分为流计算和批处理两类应用框架。API 层&#xff1a; Flink对外提供能力的接口 &#xff0c;实现了面向流计算的DataStream API和面向批处理的DataSet API。运行时层&#xff1a;Flin…