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], ...
随机推荐
- EIGRP 基础实验
一.环境准备 1. 软件:GNS3 2. 路由:c7200 二.实验操作 实验要求: 1.掌握EIGRP 的基本配置 2.掌握EIGRP 的通配符掩配置方法 3.掌握EIGRP 的自动汇总特性,理解E ...
- HTML 练习js代码位置在head标签
方式一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- solr搭建(linux)
Solr版本:7.4.0 Tomcat版本:8.5 Jdk版本:1.8 最好在root用户下进行操作,为了更方便初学者理解,选用ubuntu操作,当然用命令操作过程是一样的,会命令操作的话看懂图形化操 ...
- Python之路【第二篇】:Python基础
Python基础 对于Python,一切事物都是对象,对象基于类创建 所以,以下这些值都时对象:"zhurui".22.['北京','上海','深圳'],并且是根据不同的类生成的对 ...
- 为什么在STM32F429工程配置中需要预先定义USE_STDPERIPH_DRIVER和STM32F429_439xx?
如图: 1.查找USE_STDPERIPH_DRIVER,发现这个宏出现在stm32f4xx.h头文件中,并且有如下代码: 也就是说,通过已经定义了USE_STDPERIPH_DRIVER宏加载stm ...
- SCSS & SASS Color 颜色函数用法
最近做一个没有设计师参与的项目,发现 scss 内置的颜色函数还挺好用.记录分享下 rgba() 能省掉手工转换 hex 到 rgb 格式的工作,如以下 SCSS 代码 $linkColor: #20 ...
- BASE64编码原理分析脚本实现及逆向案例
在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理你又了解多少?今天小编带大家了解一下Base64编码原理分析脚本实现及逆向案例的相关内容. 01编码由来 数 ...
- centos6.7 配置Elasticsearch
Elasticsearch(以下简称ES),是一款开源的全文搜索引擎,获得了广泛的应用.这篇博客将介绍在centos6.7上如何配置ES. 一.安装JAVA环境 centos默认安装了JAVA环境,首 ...
- 浅论各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别
JTAG协议 JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试.现在多数的高级器件都支持JTAG协 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║Vue基础:JS面向对象&字面量& this字
缘起 书接上文<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史>,昨天咱们说到了以我的经历说明的web开发经历的 ...