首先,此文非技术类博文,为思路类的博文,敬请参阅,欢迎共同探讨!

今天在编写 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-思路篇之-山重水复柳暗花明的更多相关文章

  1. jmeter学习之安装篇(一)

    一.Jmeter简介 Jmeter是Apache组织开发的基于Java开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常被用做接口功能测试和性能测试. Jme ...

  2. JMeter学习-011-JMeter 后置处理器实例之 - 正则表达式提取器(三)多参数获取进阶引用篇

    前两篇文章分表讲述了 后置处理器 - 正则表达式提取器概述及简单实例.多参数获取,相应博文敬请参阅 简单实例.多参数获取. 此文主要讲述如何引用正则表达式提取器获取的数据信息.其实,正则表达式提取器获 ...

  3. JMeter学习-037-JMeter调试工具之四-BeanShell+jmeter.log

    前面三篇文章分别讲述了 HTTP Mirror Server . Debug PostProcessor 和 Debug Samper 的脚本调试实例.此文主要讲述第四种调试方法,通过 BeanShe ...

  4. JMeter学习-036-JMeter调试工具之三---Debug Sampler

    前面两篇文章分别讲述了 HTTP Mirror Server 和 Debug PostProcessor 的脚本调试实例.此文主要讲述第三种调试工具:DebugSampler,其主要是查看JMeter ...

  5. JMeter学习-018-JMeter 配置元件之-HTTP信息头管理器-实现 Cookie 登录

    之前写过一篇通过[HTTP Cookie管理器]实现登录态操作的文章,使用时需要配置每个键值对(如下图所示),相对来讲配置比较繁琐.其实,我们也可通过在[HTTP信息头管理器]添加 Cookie 信息 ...

  6. Java工程师学习指南 完结篇

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

  7. Java工程师学习指南 中级篇

    Java工程师学习指南 中级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站 ...

  8. Java工程师学习指南 初级篇

    Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  9. Java工程师学习指南 入门篇

    Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

随机推荐

  1. 【POJ】3261 Milk Patterns

    http://poj.org/problem?id=3261 题意:一个长度为n的串,要求最长的子串的长度且这个子串的出现次数不少于k次.(1<=n<=20000, 2<=k< ...

  2. 面试题中遇到的SQL题目

    1.假设有一张表示cj表 Name Subject Result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 82 要求查询结果: 姓名 语文 ...

  3. Checkbox的选中删除功能且Ajax返回后清除所选行

    转摘:http://javaweb1024.com/qianduan/jQuery/2015/04/13/544.html 功能描述:多选框勾选以后(全部或者部分),需要想后台提交已勾选的数据(Aja ...

  4. JSP编程-步步为营

    [第一个JSP举例] header.jsp <%@ page language="java" contentType="text/html; charset=utf ...

  5. Java学习资源

    Java技术路线图 指路明灯 一位资深程序员大牛给予Java初学者的学习路线建议 Java源码阅读的真实体会 概要 JDK发展历程 Java项目经验 基于java平台的常用资源 官方文档 Java™ ...

  6. 12. 求简单交错序列前N项和

    求简单交错序列前N项和 #include <stdio.h> int main() { int denominator, flag, i, n; double item, sum; whi ...

  7. mysql 关于日期时间的字段类型

    mysql日期和时间类型 mysql有5种表示时间值的日期和时间类型,分别为.DATE,TIME,YEAR,DATETIME,TIMESTAMP. TIMESTAMP类型有专有的自动更新特性, TIM ...

  8. C#winform使用+=和-=订阅事件和移除事件订阅

    1.C#winform中使用+=和-=订阅事件和移除事件订阅 2.可以使用+=给一个控件订阅多个事件,触发事件时按顺序执行,直到使用-=移除事件订阅为止.

  9. linux下svn的co如何排除目录

    某些原因想在svn co的时候排除某些目录,可以绕个圈子,分三步来完成: co外层目录: svn checkout --depth empty $URL [$LOCATION] 完成之后,会有一个只包 ...

  10. mysqli常用命令

    <?php //创建连接 $mysqli=new mysqli("localhost","root","","volunte ...