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之循序渐进学习装饰器

    python装饰器的定义:在代码运行期间在不改变原函数定义的基础上,动态给该函数增加功能的方式称之为装饰器(Decorator) 装饰器的优点和用途: 1. 抽离出大量函数中与函数功能本身无关的的雷同 ...

  2. ASP.NET MVC如何做一个简单的非法登录拦截

    摘要:做网站的时候,经常碰到这种问题,一个没登录的用户,却可以通过localhost:23244/Main/Index的方式进入到网站的内部,查看网站的信息.我们知道,这是极不安全的,那么如何对这样的 ...

  3. CSS入门知识汇总

    1.CSS认识 在谈论CSS的概念之前,我们先说一说web标准的目的——其在于创建一个统一的用于web表现层的技术标准,以便通过不同浏览器或终端设备向最终用户展示信息内容.一个网页的呈现是由三部分组成 ...

  4. 基于geoserver样式服务实现图层要素自定义配图

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在一般项目中,我们将geoserver样式服务中的SLD各参 ...

  5. ArcGIS API For Javascript_4.8-Symbol__SimpleLineSymbol

    require(["esri/symbols/SimpleLineSymbol"], function(SimpleLineSymbol) { /* code goes here ...

  6. 基于ArcGISServer进行分页矢量查询的方案进阶

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.    背景 在空间查询中,我们对查询结果要求以分页形式进行展示.G ...

  7. Lnmp一键脚本

    #!/bin/bash #================================================================ # Copyright (C) 2018 A ...

  8. NFS的搭建及配置

    [root@centos199 conf]# rpm -q nfs-utils rpcbind #查看这两个包是否安装,如未安装则用yum安装nfs-utils-1.2.3-39.el6.x86_64 ...

  9. 构造方法、This关键字、静态与封装的特性与作用

    1.构造方法 构造方法是一种特殊的方法,专门用于构造/实例化对象. 构造方法根据是否有参数分为无参构造方法和有参构造方法. 1.1无参构造方法 无参构造方法就是构造方法没有任何参数.无参构造方法在创建 ...

  10. Dubbo简介

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...