JMeter学习-016-思路篇之-山重水复柳暗花明
首先,此文非技术类博文,为思路类的博文,敬请参阅,欢迎共同探讨!
今天在编写 JMeter 接口监控脚本时,遇到了一个问题,在解决问题的时候,思路出现了偏差,导致了自己在解决问题时,绕了弯,浪费了些时间。换句话说,是自己当时解决问题的思路出现了定式思维,没有及时变通,矬了 ^_^。具体的问题场景如下。
日常测试开发工作中,测试脚本对应的场景有很多,其中必不可少的场景就是重要的状态码验证。此时,不同的状态码对应着不同的页面显示,以及后续不同的业务逻辑处理操作,因而测试脚本需要对不同请求对应的请求响应中不同的状态码进行判断,以判断经过之前的操作后状态码的变更是否正确,若正确则可继续执行后续相关的验证操作,否则终止后续相关联的操作,进而发送通知给产品组的相关成员,以及时进行处理。那么如何获取、判断状态码正确与否呢?下面以电商网站中订单状态码为例,进行简单描述我当时解决此问题的思路,步骤如下:
第一种:通过断言直接判断验证码
操作方法:获取订单列表,直接设置响应断言。
此种判断方式,非常的简单,只需在请求响应中设置断言即可。但此判断方法有一个极大的限制条件(订单列表中返回的所有订单状态不允许有相同的状态),否则此种判断方式无法确定要判断订单状态是否正确(若要判定订单的状态不是期望状态,而其他订单的状态却存在了期望状态,则此判断方式错误)。
第二种:订单列表中获取订单状态后通过逻辑控制器等进行判断
操作方法:获取订单列表,通过 正则表达式提取器 获取对应订单的订单状态(通过正则提取器获取状态方法,敬请参阅之前的博文:单参获取、多参获取,多参引用),然后通过 Bean Shell Assertion、BSF Assertion 等方式对订单的状态进行判断,验证是否符合预期,从而通过逻辑控制器控制是否执行后续操作。
此种判断方式稍显复杂,且需要一定的脚本基础,建议各位朋友研究一下,提升一下自己的脚本能力。
第三种:订单列表中获取订单状态后通过断言进行判断
操作方法:通过正则提取器获取订单信息,例如从订单编号开始获取到订单状态之前的字符,然后拼接期望状态后,将拼接的字符串设置为断言即可。例如订单数据信息如下所示:
{"errno":0,"data":{"single_coupon":"","cash_per_month":0,"order_id":"34567890","order_char_id":"1234567890","status":-2,"receiver_tel":"","receiver_addr":"华夏","receiver_mobile":"1234567890","shipping_cost":0,"shop_guide_cost":"0","businessId":2,"dealType":2,"buy_total":3,"order_cost":14700,"coupon_code":"","coupon_amt":0,"pOrderId":"0101234567890","subOrderNum":0,"subOrderIds":[]}}
那么正则提取器对应的正则表达式为:
order_id":"${order_id}","order_char_id":"12${order_id}","status":
正则提取器对应的模板为:$0$
最终获取的订单信息为:order_id":"34567890","order_char_id":"1234567890","status":
断言的信息为(假定此时订单状态为:4):order_id":"34567890","order_char_id":"1234567890","status":4
此种方法与第二种的方法类似,不同之处在于提取域(第二种提取的是单独的一个订单状态,此处取的是订单信息)、判断方式(第二种是通过其他方式进行判断,此处直接使用断言),此种较为简单,推荐。
第四种:通过订单详情数据判断
操作方法:请求对应订单的订单详情,直接设置响应断言(例如:"status":4)进行判断。
此种判断方式,同样简洁,同样只需在请求响应中设置断言即可,而且保证了订单的唯一性,不存在其他订单干扰的情况发生,建议采取此种方式。
PS:解决问题的过程中,也尝试过其他的验证方式,在此不再一一赘述,以上是我自己想到的比较有效的方法,藉此分享给大家。若是有更好的方法,欢迎告知,不胜感激!
至此, JMeter学习-016-思路篇之-山重水复柳暗花明 顺利完结,希望此文能够给初学 JMeter 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
JMeter学习-016-思路篇之-山重水复柳暗花明的更多相关文章
- jmeter学习之安装篇(一)
一.Jmeter简介 Jmeter是Apache组织开发的基于Java开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常被用做接口功能测试和性能测试. Jme ...
- JMeter学习-011-JMeter 后置处理器实例之 - 正则表达式提取器(三)多参数获取进阶引用篇
前两篇文章分表讲述了 后置处理器 - 正则表达式提取器概述及简单实例.多参数获取,相应博文敬请参阅 简单实例.多参数获取. 此文主要讲述如何引用正则表达式提取器获取的数据信息.其实,正则表达式提取器获 ...
- JMeter学习-037-JMeter调试工具之四-BeanShell+jmeter.log
前面三篇文章分别讲述了 HTTP Mirror Server . Debug PostProcessor 和 Debug Samper 的脚本调试实例.此文主要讲述第四种调试方法,通过 BeanShe ...
- JMeter学习-036-JMeter调试工具之三---Debug Sampler
前面两篇文章分别讲述了 HTTP Mirror Server 和 Debug PostProcessor 的脚本调试实例.此文主要讲述第三种调试工具:DebugSampler,其主要是查看JMeter ...
- JMeter学习-018-JMeter 配置元件之-HTTP信息头管理器-实现 Cookie 登录
之前写过一篇通过[HTTP Cookie管理器]实现登录态操作的文章,使用时需要配置每个键值对(如下图所示),相对来讲配置比较繁琐.其实,我们也可通过在[HTTP信息头管理器]添加 Cookie 信息 ...
- Java工程师学习指南 完结篇
Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...
- Java工程师学习指南 中级篇
Java工程师学习指南 中级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站 ...
- Java工程师学习指南 初级篇
Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- Java工程师学习指南 入门篇
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
随机推荐
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】1202: [HNOI2005]狡猾的商人(并查集+前缀和)
http://www.lydsy.com/JudgeOnline/problem.php?id=1202 用并查集+前缀和. 前缀和从后向前维护和,并查集从前往后合并 对于询问l, r 如果l-1和r ...
- POJ 3034 Whac-a-Mole(DP)
题目链接 理解了题意之后,这个题感觉状态转移还是挺好想的,实现起来确实有点繁琐,代码能力还有待加强,经过很长时间才发现bug.注意坐标可能是负的. #include <cstdio> #i ...
- 李洪强-C语言7-C语言运算符
C语言运算符 一.算术运算 C语言一共有34种运算符,包括常见的加减乘除运算. ①. 加法:+ 还可以表示正号 ②. 减法:- 还可以表示负号 ③. 乘法:* 非数学意义上的X ④. 除法:/ 注意 ...
- opengl中层次建模的实现
1.显示列表的创建 例如: glNewList(listID,listMode); glutSolidCube(2.0); ...... glEndlist(); 可以创建一个listID显示列表,l ...
- WampServer搭建php环境时出现的哪些问题?
WampServer搭建php环境时遇到的问题 安装时报错,缺少MSVCR100.dll文件 这是因为wampServer安装时用到的vc库没有更新,要安装更新之后再进行安装,因为之前安装的VC版本低 ...
- Linux 随笔1
使用fork()系统调用产生的子进程对父进程中数据的修改不会影响到父进程,因为fork()采用的是写时复制机制,就是在fork产生的子进程没有修改父进程的值时,父子进程共享同一块内存,包括栈区.当子进 ...
- 用Get-ADComputer取非常用属性的值
由于GE使用的是Windows2003+Powershell2.0, 所以某些命令无法使用,比如想取lastLogon和lastLogonTimestamp这两个属性,在Powershell3.0下可 ...
- MySQL 数据库设计 笔记与总结(1)需求分析
数据库设计的步骤 ① 需求分析 ② 逻辑设计 使用 ER 图对数据库进行逻辑建模 ③ 物理设计 ④ 维护优化 a. 新的需求进行建表 b. 索引优化 c. 大表拆分 [需求分析] ① 了解系统中所要存 ...
- 20个C语言中常用宏定义总结
01: 防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H//头文件内容#endif 02: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...