JMeter接口测试实战-动态数据验证

JMeter接口测试实战-动态数据验证正则表达式

 

说到验证就不得不说断言, 先来看下JMeter官方给出断言(Assertion)的定义,sql

用于检查测试中获得的响应数据等是否符合预期,用以保证测试过程当中的数据交互与预期一致。shell

 

使用断言的目的:数据库

在request的返回层面增长一层判断机制, 由于request成功了,并不表明结果必定正确。一个Sampler能够添加多个不一样形式的断言,根据你的检查需求来添加相应的断言,当Sampler下全部的断言都经过了, 那才算request成功。数组

 

那么问题来了, 要判断的内容(预期内容)若是是在变化的, 有时候仍是不肯定的, 那该怎么办呢?微信

举个例子:app

在某东点击酷玩科技玩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, 循环到最大值,而后从新开始, 继续这样,直到结束.

还有个引用名称, 留到后面介绍

 

第五步 建立一个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中文返回乱码

Jmeter接口测试-参数化

JMeter接口测试-基础

测试-感想

 

咨询工做加微信

扫描二维码

 

欢迎自荐和推荐, 须要的微信推送简历!

请猛戳下面二维码了解更多

相关文章
相关标签/搜索