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中文返回乱码

Jmeter接口测试-参数化

JMeter接口测试-基础

测试-感想

咨询工作加微信

扫描二维码

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

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

JMeter接口测试实战-动态数据验证的更多相关文章

  1. Jmeter接口测试实战-数据传递

    Jmeter接口测试实战-数据传递 接口与接口之间没有关联的测试是缺乏意义和没有灵魂的,只有数据在不同接口之间传递才能勾画出业务场景重要的链路. 我们用较为通用的http/https协议,接口普遍返回 ...

  2. jmeter接口测试实战-创建用户

    jmeter接口测试实战-创建用户 相信大多数看到标题的同学都会有疑问, 创建用户不是很简单吗, 调用一下创建用户接口, 传入指定入参, 用户即可创建成功, 今天我们的实战来讲讲创建场景.通过接口创建 ...

  3. Jmeter 接口测试实战-有趣的cookie

    Jmeter 接口测试实战-有趣的cookie 场景: 接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取cookie, 等等. 这几种都 ...

  4. Jmeter接口测试实战-Cookies

    场景: 接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取cookie, 等等. 这几种都有一个共同的特点, 有效期(expires). ...

  5. 从0开始Jmeter接口测试实战

    在之前的文章中给大家介绍过接口测试文档和接口测试用例示例,本文基于Jmeter工具给大家介绍一下如何实现接口测试用例:包括发起Http请求,绕过登陆,验证响应.JMeter是Apache组织开发的基于 ...

  6. 【JMeter】【微信好文收藏】Jmeter接口测试实战-有趣的cookie

    场景: 接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取cookie, 等等. 这几种都有一个共同的特点, 有效期(expires). ...

  7. JMeter接口测试-提取动态列表最后一个值的两种方法

    前言 在用JMeter做接口测试时,我们经常会遇到,一个接口返回一个json串,在这个json串中,某个节点的值是一个列表,而且这个列表的长度是动态变化的.今天我们来学习两种提取动态列表最后一个值的两 ...

  8. Jmeter接口测试实战之HTTP Cookie管理器(十二 )

    在使用测试工具Jmeter做接口测试中,怎么记录下它登录成功后的信息,在接口测试的应用场景中,一般对业务的操作都是基于用户登录情况下的操作.它的测试步骤相对来说很简单的,其实在Jmeter的测试工具中 ...

  9. vue.js实战——props数据验证(自定义构造器检测)

    Vue.component('my-component',{ props:{ //必须是数字类型 propA:Number, //必须是字符串或数字类型 propB:[String,Number], ...

随机推荐

  1. 两个月的Java实习结束,继续努力

    前言 只有光头才能变强 2018年8月30日,今天我辞职了.在6月25号入职,到现在也有两个月时间了. 感受: 第一天是期待的:第一次将项目拉到本地上看的时候,代码很多,有非常多的模块,模块下又有da ...

  2. 对.NET Core未来发展趋势的浅层判断

    经常听到园里.NET开发人员在抱怨生态不如JAVA,想要转JAVA,所谓打不过你,我就加入你!杜兰特的思维方式固然是获取总冠军的一种方式,但是我们要关起门来问自己有没有杜兰特的实力. 用开发生态来类比 ...

  3. docker同时删除多个容器

    查询所有容器 sudo docker ps -a 同时删除多个符合筛选条件的容器,例如删除状态为“exited”的容器 docker rm $(docker container ls -f " ...

  4. if条件、while循环、for循环 相关练习

    1.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败! while True: name = input('请输入用户名:') psw = inpu ...

  5. 【spring实战第五版遇到的坑】第14章spring.cloud.config.uri和token配置项无效

    本文使用的Spring Boot版本为:2.1.4.RELEASE Spring Cloud版本为:Greenwich.SR1 按照书上的做法,在application.yml中配置配置服务器的地址和 ...

  6. 工厂方法模式(Factory Method Pattern)

    工厂方法模式概述 工厂方法模式是为了弥补简单工厂模式的不足并且继承它的优点而延生出的一种设计模式,属于GoF中的一种.它能更好的符合开闭原则的要求. 定义:定义了一个用于创建对象的接口,但是让子类决定 ...

  7. python3 文件操作练习 r+ w+ a+ 的理解

    突然来一句:“慨然有经略四方之志” 文件操作三部曲:1.先用open打开 2.再写关闭  3.再回到中间写操作     为啥要刚打开就关闭 那是很容易望,所以先写上... 基本格式 f = open( ...

  8. 再谈AbstractQueuedSynchronizer1:独占模式

    关于AbstractQueuedSynchronizer JDK1.5之后引入了并发包java.util.concurrent,大大提高了Java程序的并发性能.关于java.util.concurr ...

  9. perlin噪声

    手贱去点了图形学里面的噪声课程,然后一个周末就交代在这上面了,还是有些云里雾里. 噪声就是给定一个输入变量,生成一个值在0~1范围内的伪随机变量的函数.在图形学中一般是输入一个坐标得到一个范围在0~1 ...

  10. eggjs 框架代理调试 SELF_SIGNED_CERT_IN_CHAIN 报错解决方案

    eggjs 中的 this.ctx.curl 可以发起一个请求,配置 proxy 可以很方面的通过接口进行问题定位.代理方式如下: 1.开启 egg-development-proxyagent ,配 ...