JMeter接口测试:测试中奖概率!

图片

介绍

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。

JMeter 还可以进行接口测试,本文将讲解如何使用JMeter 来测试一个抽奖接口的中奖概率是否符合需求的要求。

图片

根据需求定制测试方案

需求描述:

参与用户数量大概为2000人,整个奖品池的中奖概率,如果有2个奖品,那么各5%,如果一个抽完了,另一个变成10%,如果2个都抽完了,就不会再中奖了。

测试方案:

设定200用户同时并发(设置在实际人数的10%即可),模拟200个用户进行抽奖。

准备测试数据:

  • 根据接口文档描述,入参为record_uuid和user_uuid,在对应的数据库表中新增200条数据,模拟成200个抽奖用户;

  • 在数据库的奖品库存表中,分别将奖品A和奖品B的库存数量都设置为100。

场景:

  • 奖品A和B库存充足

  • 奖品A库存为0,奖品B库存不为0

  • 奖品A库存不为0,奖品B库存为0

  • 奖品A和B库存均为0

图片

使用JMeter设置脚本

3.1 设置线程组

图片

将线程数设置为200,模拟200个用户进行抽奖操作。

3.2 添加HTTP信息头管理器

图片

3.3 添加BeanShell PostProcessor

如果接口返回信息的结果中的中文乱码,可以添加此前置处理器。在输入框中输入prev.setDataEncoding("utf-8")

图片

3.4 添加HTTP请求

3.4.1 HTTP请求设置

Web服务器栏中,按照实际情况填写协议、ip地址和端口号,请求设置中方法选择post,再填写正确的路径

图片

3.4.2 入参

选择Body Data,这里我们需要将record_uuid和user_uuid并引用

{"recordUuid":"${recordUuid}","userUuid":"${userUuid}"}

3.4.3 添加前置处理器CSV Data Set Config

在当前HTTP请求下添加一个前置处理器CSV Data Set Config,用于将record_uuid和user_uuid参数化。

图片

需要准备好一个.txt格式的参数化文件,文件第一行为参数名称,其他行为参数值。两个参数名和参数值之间需要用,进行分隔。

图片

关于参数化的设置这里不再详述,后续发布的文章会详细讲解,可先按照图例配置。其中Filename为参数化文件的路径;Variable Names (comma-delimited)为参数化的名称,即在第(2)步Body Data的入参中引用的参数化名称;lgnore first line (only used if Variable Names is not empty)为忽略第一行,由于参数化文件中第一行为参数名称,所以选择true,表示引用的时候忽略掉第一行。

3.4.4 添加响应断言和断言结果

在HTTP请求下添加响应断言和断言结果,用于过滤中奖状态和查看结果。在响应断言下,选择“响应文本”,在测试模式中输入“"result":1”(根据接口文档中的描述,"result":1为中奖状态,"result":0为未中奖),则代表着未返回此结果的均为未中奖状态(包括异常状态),可在断言结果中查看接口请求信息。

图片

图片

3.5 添加聚合报告和察看结果树

用于查看接口请求的相关信息,我们暂时只用关注Error率就行。

图片

图片

3.6 运行脚本

设置好脚本后,点击运行按钮运行脚本,运行完成后查看聚合报告。

图片

图片

如上图所示,Error率为91%,由于我们加了响应断言,返回结果中不包含“"result":1”即为响应报错,代表着未中奖,则中奖率为100%-91%=9%,这个值与需求描述的中奖概率控制在10%相差不大。在增加并发量或多运行几次后,这个数据会更加接近10%的中奖概率。

根据我们制定的测试方案,整理出一个简单Excel来查看实际中奖概率与规定的中奖概率是否一致。

图片

根据Excel中显示,中奖概率浮动在合理范围内。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

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

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

相关文章

学习日志:JVM垃圾回收

文章目录 前言一、堆空间的基本结构二、内存分配和回收原则对象优先在 Eden 区分配大对象直接进入老年代长期存活的对象将进入老年代主要进行 gc 的区域空间分配担保 三、死亡对象判断方法引用计数法可达性分析算法引用类型总结1.强引用(StrongReference…

联想教育电脑硬盘保护同传EDU系统使用简明教程

目录 一、原理概述 二、简明使用方法 1、软件下载 2、开机引导 3、开始安装 4、使用 (1)进入底层 (2)进行分区设置 (3)系统设置 (4)安装硬盘保护驱动 (5&…

VUE3学习第三篇:报错记录

1、在我整理好前端代码框架后,而且也启动好了对应的后台服务,访问页面,正常。 2、报错ReferenceError: defineModel is not defined 学到这里报错了 在vue网站的演练场,使用没问题 但是在我自己的代码里就出问题了 3、watchEffec…

【YOLOv5/v7改进系列】引入中心化特征金字塔的EVC模块

一、导言 现有的特征金字塔方法过于关注层间特征交互而忽视了层内特征的调控。尽管有些方法尝试通过注意力机制或视觉变换器来学习紧凑的层内特征表示,但这些方法往往忽略了对密集预测任务非常重要的被忽视的角落区域。 为了解决这个问题,作者提出了CF…

算法与算法分析

目录 一.前言 二.算法的特性和要求 三.分析算法--时间效率 四. 分析算法--空间效率 一.前言 算法就是对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中,每个指令表示一个或多个操作。总而言之,我们数据结构就是通过算法实现操…

微信小程序之调查问卷

一、设计思路 1、界面 调查问卷又称调查表,是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷,可以在短时间内快速收集反馈信息。具体效果如下所示: 2、思路 此调查问卷采用服务器客户端的方式进行设计,服…

力扣141环形链表问题|快慢指针算法详细推理,判断链表是否有环|龟兔赛跑算法

做题链接 目录 前言: 一、算法推导: 1.假设有环并且一定会相遇,那么一定是在环内相遇,且是快指针追上慢指针。 2.有环就一定会相遇吗?快指针是每次跳两步,有没有可能把慢指针跳过去? 3.那一定…

大模型算法备案流程最详细说明【流程+附件】

文章目录 一、语料安全评估 二、黑盒测试 三、模型安全措施评估 四、性能评估 五、性能评估 六、安全性评估 七、可解释性评估 八、法律和合规性评估 九、应急管理措施 十、材料准备 十一、【线下流程】大模型备案线下详细步骤说明 十二、【线上流程】算法备案填报…

算法-BFS搜索

题目一 解题思路 比较标准的暴力搜索空间换时间的策略 二维数组map表示具体地图,far表示遍历过程中某点到起点的距离。 队列 q 表示在遍历过程中当前距离的所以节点坐标。 每次的节点寻找其上下左右四个方向可以继续前进的点(这里在过程中会发生两个…

pyqt designer使用spliter

1、在designer界面需要使用spliter需要父界面不使用布局,减需要分割两个模块选中,再点击spliter分割 2、在分割后,再对父界面进行布局设置 3、对于两边需要不等比列放置的,需要套一层 group box在最外层进行分割

cesium获取模型的数据包含b3dm和cmpt

getreadyPromise()方法在模型加载完成后调用 url为模型地址 // tileset模型 function tilesetM(url) {tileset viewer.scene.primitives.add(new Cesium.Cesium3DTileset({// url: ../../public/asd/tileset.json,url: url,// type: "3dtiles",maximumScreenSpace…

构建稳固与安全的网络环境:从微软蓝屏事件看软件更新流程与应急响应

“微软蓝屏”事件暴露了网络安全哪些问题? 近日,由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅让科技领域为之震动,更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件源于美国电脑安全技术公司“众击”的一…

浅谈Mike11中常见的错误及解决方法

前言: 小编对MIKE11比较熟悉,今天为大家总结了mike11中常见的一些错误及解决方法分享给大家。 一:could not open license file 当你打开MIKE11出现这种情况是一般是试用版的License没安装成功,或者安装杀毒软件导致License被当…

SEO与数据中心代理IP的结合能带来哪些便利?

本文将探讨将SEO与数据中心代理IP结合所带来的好处,以及如何利用这种组合来提升网站在搜索引擎中的排名和可见性。 1. 数据中心代理IP的作用和优势 数据中心代理IP指的是由数据中心提供的IP地址,用于隐藏真实服务器的位置和身份。与其他类型的代理IP相…

网络安全常见错误及解决办法(更新中)

# 开启代理,无法连接网络 把代理关掉 # 上一秒还在安装tree,下一秒xshell就连接不上了 —》sshd服务的key这个文件权限过高,跟装tree没有关系,装一个epel 源,epel-release​ 部分命令:chmod 600 /etc/ssh…

可见性::

目录 定义: 解决方法: ①使用synchronized实现缓存和内存的同步 修改一: 加入语句: 代码: 修改2: 在代码块中加入: 代码: 执行结果: 原因: ②使用…

hot100-双指针

283移动零 11盛最多水的容器 暴力解法(超时了)、双指针法 15三数之和 42接雨水

如何关闭页面报错的遮罩层

问题:如何关闭页面报错的遮罩层 解决方法: 在vue.config.js中添加如下配置,重启项目即可 module.exports defineConfig({devServer: {client: {overlay: false,},}})

Android P Input设备变化监听 Storage设备变化监听

InputManager.java中实现了InputDeviceListener接口,只需要新建一个类 implements InputDeviceListener ,并且将类实例化注册给InputManager.getInstance().registerInputDeviceListener即可。 StorageManager同理 StorageManager中会调用StorageEventL…

FastAPI(七十六)实战开发《在线课程学习系统》接口开发-- 课程详情

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 这个接口用户可以不登录,因为我们的课程随意浏览 那么我们梳理下这里的逻辑 1.根据课程id判断课程是否存在 2.课程需要返回课程的详情 3…