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. Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy

    爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...

  2. asp.net core系列 29 EF模型配置(查询类型,关系数据库建模)

    一.查询类型 此功能是EF Core 2.1中的新功能. EF Core除了实体类型之外,EF Core模型还可以包含查询类型,这些查询类型是针对“未映射到实体类型”的数据获取.比如视图,或只读数据表 ...

  3. Server Error in '/' Application Runtime Error 错误

    项目发布后  在本地发布可以运行  在服务器就会出现这种错误 在网上也查找了各种资料  解决方案 都没有解决 因为我用的C# 首先在 Webconfig配置文件中的 system.web中加入 < ...

  4. Shiro详解

    Shiro Shiro集成Spring 加入Spring和Shiro的jar包 配置Spring及SpringMVC 参照:官方给出的案例shiro\samples\spring Shiro集成Web ...

  5. 如何让div中的table水平居中

    <div style="text-align:center"> <table border="1" cellpadding="3&q ...

  6. SQLServer之附加数据库

    附加数据库注意事项 必须首先分离数据库. 尝试附加未分离的数据库将返回错误. 附加数据库时,所有数据文件(MDF 文件和 LDF 文件)都必须可用. 如果任何数据文件的路径不同于首次创建数据库或上次附 ...

  7. 【转载】Verilog中的parameter

    1. 概述 在Verilog中我们常常会遇到要将一个常量(算法中的某个参数)赋给很多个变量的情况,如: x = 10;y = 10;z = 10;如果此时10要改为9,就需要在代码中修改3个地方,非常 ...

  8. Luogu P5284 [十二省联考2019]字符串问题

    好难写的字符串+数据结构问题,写+调了一下午的说 首先理解题意后我们对问题进行转化,对于每个字符串我们用一个点来代表它们,其中\(A\)类串的点权为它们的长度,\(B\)类串的权值为\(0\) 这样我 ...

  9. echarts切换tab时,第一个图表显示,第二个图表不显示的解决办法

    首先这种情况,我在网上看到了好多人问,确实也有正解,但是只是说出了其错误出现的原因,并没有给出解决方法. 我也是深受其害,所以呢,在这里记录一下,分享给还在困扰着的你们,迅速找出解决办法. 首先,我先 ...

  10. VS2017 无法连接到Web服务器“IIS Express”终极解决方案

    今天日了gou了,一大早打开VS2017的时候出现无法连接到Web服务器"IIS Express"的错误,然后必应了一下,再谷歌了一下找到的解决方法也都千篇一律,奈何都没能解决,最 ...