JMeter接口测试实战-动态数据验证
JMeter接口测试实战-动态数据验证
说到验证就不得不说断言, 先来看下JMeter官方给出断言(Assertion)的定义,
用于检查测试中得到的响应数据等是否符合预期,用以保证测试过程中的数据交互与预期一致。
使用断言的目的:
在request的返回层面增加一层判断机制, 因为request成功了,并不代表结果一定正确。一个Sampler可以添加多个不同形式的断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了, 那才算request成功。
那么问题来了, 要判断的内容(预期内容)如果是在变化的, 有时候还是不确定的, 那该怎么办呢?
举个例子:
在某东点击酷玩科技玩3C, 返回的分类有电脑, 数码, 手机, 影音, 游戏, 手机配件, **二手等, 假设由于业务合作调整, 这个分类经常要变化, 同时业务部门调整分类, 测试部门未必能够及时通知到, 类似这样的变化, 使用断言就会存在问题, 你的脚本会经常跑失败, 因为断言不通过.
那该如何解决呢? 往下看, 还是继续上面的例子, 业务部门调整分类多数都通过CMS等内部后台管理系统实现, 而调整后的数据最后还是存放在DB中, 只要从DB中获取数据, 与接口返回的数据进行比较, 来判断两者是否一致,就满足了业务变化的需要.
下面我们来介绍整个思想的核心部分
为了简化演示, 我们省略了一些步骤, 从DB中获取一个数组对象,里面的数据是动态变化的, 然后再传给另外一个接口假设是百度, 百度拿到数组里的内容作为关键字逐个去搜索, 并返回不同结果. 检查百度拿到的关键字是否与DB中动态数据保持一致.
为了演示方便且截图更为直观,避免公司敏感信息要打码, 先切换到本地数据库, 里面存放的信息如下:

思路把sequence字段内容取出来放到数组中,这里sequence可能随时在变, 然后传给百度作为关键字搜索.
第一步 创建JDBC connection, 作用与数据库建立连接

JDBC connection中的参数如何设置之前推文已经介绍过了, 本篇幅就不展开了, 不清楚的看本公众号jmeter数据库连接.
第二步 创建jdbc request, 作用执行增删改查SQL

Variable names, Result variable name这两个名词我们放到后面讲解.
Query timeout从字面就很好理解, 就是查询超时设置, 单位s
第三步 创建BeanShell PostProcessor, 作用是处理数组对象

beanshell脚本书写方式非固定, 只是遵循这样一个逻辑, 先知道数组对象大小, 再用循环把对象中内容逐个输出, 至于使用for循环还是while循环等等就看个人喜好, 那这里的sequence值从哪里来的呢?
我们上面还没有介绍的variable names
Variables names参数使用方法:
Jmeter官网给出的解释是:如果给这个参数设置了值,它会保存sql语句返回的数据和返回数据的总行数。假如,sql语句返回2行,3列,且variables names设置为A,,C,那么如下变量会被设置为:
A_#=2 (总行数)
A_1=第1列, 第1行
A_2=第1列, 第2行
C_#=2 (总行数)
C_1=第3列, 第1行
C_2=第3列, 第2行
如果返回结果为0,那么A_#和C_#会被设置为0,其它变量不会设置值。
如果第一次返回6行数据,第二次只返回3行数据,那么第一次多的3行数据变量会被清除。
可以使用${A_#}、${A_1}...来获取相应的值.
貌似理解起来有点费劲, 没关系, 我们把focus聚焦到本次实战中去, 其他的知识点后续慢慢吃透, variable name这里填上你想使用的变量名,也就是之后的接口(或者beanshell)中要用到的变量名称.
数组对象和内容都得到了,那怎么一个个传递给百度接口呢? 这里就要用到另外一个功能叫计数器, 他在配置元件->计数器可以找到.
第四步 创建计数器
计数器的作用
jmeter官方给出解释, 如果需要应用大量的数据, 且要求不能重复或者需要自增, 那么可用使用计数器来实现.
计数器(counter):允许用户创建一个在线程组之内都可以被引用的计数器。

计数器允许用户配置一个Starting value, 一个递增, 一个Max value, 循环到最大值,然后重新开始(正好与我们的 sequence相符, 它有7个值), 继续这样,直到结束.
还有个引用名称, 留到后面介绍
第五步 创建一个http sampler命名为百度并增加一个循环控制器
因为取出来的数据是一个数组, 要逐个赋值给百度接口

百度完整的接口自己用工具或者F12即可获取, wd是百度关键字赋值, 用函数V加变量形式, 这里看到一个似曾相识的N, 就是计数器里那个引用名称.
官方函数__V解释, 可以用于执行变量名表达式,并返回执行结果。它可以被用于执行嵌套函数引用.
因为db中sequence存放了7条记录, 我们在循环控制器中设置循环7次.
第六步 创建结果树, 参看结果
好, 让我们来执行脚本吧

jdbc request SQL里查出的数据与本文第一张图DB中保持一致, 百度接口执行了7次, 每次数据应该是db中对应的这7个不同的值







再来看debug sampler

就能明白在jdbc request里Result variable name设置为test_seq和计数器里设置的Max value=${sequence_#}的含义了.
至此示例到这里就结束了,用到了jmeter里取样器+逻辑控制器+前, 后处理器+断言+监听器构成整个实战步骤演练.
引用名人的一句话:
开放创新,自信谦逊,构建“为我所知、为我所用、为我所有”的技术能力布局.
今日推荐阅读文章精选推荐
咨询工作加微信

扫描二维码
欢迎自荐和推荐, 需要的微信推送简历!
请猛戳下面二维码了解更多

JMeter接口测试实战-动态数据验证的更多相关文章
- Jmeter接口测试实战-数据传递
Jmeter接口测试实战-数据传递 接口与接口之间没有关联的测试是缺乏意义和没有灵魂的,只有数据在不同接口之间传递才能勾画出业务场景重要的链路. 我们用较为通用的http/https协议,接口普遍返回 ...
- jmeter接口测试实战-创建用户
jmeter接口测试实战-创建用户 相信大多数看到标题的同学都会有疑问, 创建用户不是很简单吗, 调用一下创建用户接口, 传入指定入参, 用户即可创建成功, 今天我们的实战来讲讲创建场景.通过接口创建 ...
- Jmeter 接口测试实战-有趣的cookie
Jmeter 接口测试实战-有趣的cookie 场景: 接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取cookie, 等等. 这几种都 ...
- Jmeter接口测试实战-Cookies
场景: 接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取cookie, 等等. 这几种都有一个共同的特点, 有效期(expires). ...
- 从0开始Jmeter接口测试实战
在之前的文章中给大家介绍过接口测试文档和接口测试用例示例,本文基于Jmeter工具给大家介绍一下如何实现接口测试用例:包括发起Http请求,绕过登陆,验证响应.JMeter是Apache组织开发的基于 ...
- 【JMeter】【微信好文收藏】Jmeter接口测试实战-有趣的cookie
场景: 接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取cookie, 等等. 这几种都有一个共同的特点, 有效期(expires). ...
- JMeter接口测试-提取动态列表最后一个值的两种方法
前言 在用JMeter做接口测试时,我们经常会遇到,一个接口返回一个json串,在这个json串中,某个节点的值是一个列表,而且这个列表的长度是动态变化的.今天我们来学习两种提取动态列表最后一个值的两 ...
- Jmeter接口测试实战之HTTP Cookie管理器(十二 )
在使用测试工具Jmeter做接口测试中,怎么记录下它登录成功后的信息,在接口测试的应用场景中,一般对业务的操作都是基于用户登录情况下的操作.它的测试步骤相对来说很简单的,其实在Jmeter的测试工具中 ...
- vue.js实战——props数据验证(自定义构造器检测)
Vue.component('my-component',{ props:{ //必须是数字类型 propA:Number, //必须是字符串或数字类型 propB:[String,Number], ...
随机推荐
- 微服务框架surging学习之路——序列化
1.对微服务的理解 之前看到在群里的朋友门都在讨论微服务,看到他们的讨论,我也有了一些自己的理解,所谓微服务就是系统里的每个服务都 可以自由组合.自由组合这个就很厉害了,这样一来,每个服务与服务之间基 ...
- docker常规操作——启动、停止、重启容器实例
一.启动一个已经停止的容器实例 docker start 容器ID或容器名,建议使用容器ID,容器ID支持模糊查询而容器名称不支持1. 先查看已经暂停的容器实例信息 2. 通过docker start ...
- Cesium 海拔 经纬度 展示
通过参考http://gishome.net.cn/cesium/cesium-coordinates/,整理修改后 <!DOCTYPE html><html lang=" ...
- 使用拷贝的方式(adb push) 绕过Android系统和adb install直接安装APK
某些情况下定制的Android系统为了限制用户安装应用,例如电视盒子,车载中控等,通过修改代码屏蔽了正常安装应用的方式 本文探讨如何在 adb shell 具有读写data分区目录的权限前提下,通过a ...
- SQL Server获取连续区间的日期
个人理解的方法有三种 通过系统表master..spt_values获取 用WHILE循环获取 游标获取 CET递归(感谢评论区博友) 方法一:通过系统表master..spt_values获取 1. ...
- CAP 2.5 版本中的新特性
前言 首先,恭喜 CAP 已经成为 eShopOnContainers 官方推荐的生产环境可用的 EventBus 之一. 自从上次 CAP 2.4 版本发布 以来,已经过去了几个月的时间,关注的朋友 ...
- 连表查询都用Left Join吧
最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在哪),我用最简单的方式来描述这两者的区 ...
- Java8与传统的日期和时间类详解
一.传统的日期时间类(Date和Calendar) 1. Date类 这里的Date是位于java.util包下的类,而不是java.sql包下的date类,Date对象即包含日期也包含时间,从JDK ...
- Vs 中关于项目中的某 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”
问题: 首先出现这个bug的是在我的vs2017社区版的ide上,这两天使用了出现了一个非常神奇的问题,就是我程序中的nuget包总提示找不到源文件,并且我点击Nuget还原的话还一直提示着一 ...
- 《HelloGitHub》第 31 期
公告 网站新增了 Web 服务器排行榜.数据库排行榜 <HelloGitHub>第 31 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣 ...