文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Jmeter-BeanShell断言的运用一(JSON响应数据与数据库比对)

2020-01-26 06:40

关注


	Jmeter-BeanShell断言的运用一(JSON响应数据与数据库比对)
[数据库教程]

前言

  最近在学习BeanShell断言,发现有点强大哈,只要会写代码,就没有什么是断言不了的,哈哈哈,不过我现在只会写点蹩脚的代码,下面将介绍下如何将返回的JSON数据与数据库数据做对比。

注:本次涉及到的知识点有 1)BeanShell PostProcessor拼接字符串;2)BeanShell 断言的基本使用;

背景

  jmeter断言接口返回的count与数据库查询出来的是否一致,接口返回的JSON响应数据如下:

  (count说明:比如12/17,即12是代表商品数 [先用X代替],17是代表收藏夹的数量 [用Y代替])XY只是为了方便区分,后面方便偷懒,哈哈。

{
    "code":"0",
    "msg":"OK",
    "info":{
        "categoryList":[
            {
                "id":45,
                "categoryName":"ca文件夹",
                "imageUrlList":[
                    "https://img/29/15302571783635805807.jpg"
                ],
                "count":2,
                "tip":null
            }
        ],
        "count":"12/17"
    }
}

思路

  第一步:用sql分别查出商品数和收藏夹数,然后拼接成“12/17”的形式;

  第二步:提取出响应数据的count值;(这一步其实有很多种实现方法,比如用jsonpath也可以提取,但本次用的是BeanShell取值哈)

  第三步:将提取出的count与数据库查询说来的拼接值做对比,判断是否一致。

一、BeanShell知识点摘要(*必看

  如果之前没有接触过BeanShell的话,这节一点要仔细看哈,虽然只是简单提及几个知识点。

1、什么是Bean Shell

2、Bean Shell常用内置变量

    JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:

    a) vars.get(String key):从jmeter中获得变量值

    b) vars.put(String key,String value):数据存到jmeter变量中

    更多方法可参考:org.apache.jmeter.threads.JMeterVariables

    a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义 

    b) props.put("PROP1","1234"); 

    a) getResponseDataAsString():获取响应信息

    b) getResponseCode() :获取响应code

    更多方法可参考:org.apache.jmeter.samplers.SampleResult

3、Bean Shell判断返回的JSON

  首先要下载JSON依赖包(org.json.jar),放到apache-jmeter-5.0libext中,然后重启jmeter即可在beanshell中import json包了。具体要怎么提取到JSON中的某个值,在博文最后会贴代码,请拉到最后查看,后续也会根据不同的JSON结构专门写一篇如何提取JSON结构字段值的文章。

 

二、实例操作第一步:sql查询

  jmeter连接数据库在之前就已经讲过了,这里就不再赘述了哈,直接进入主题了。这次的查询比较特别一点,为什么呢?因为查询用到的表在不同的数据库中,不是同一个库了,为了方便理解,还是大概说一下吧。

category表在A库,collect表在B库,在查collect表里的商品数时,是需要用到category表查询出来的id的,因为查询出来的id可能不止一个,所以就会涉及到要将id拼接起来,再放到collect表里查询。说的可能比较抽象,哈哈哈,下面直接上图了。

1、查询category表的文件夹总数,即count中的X

  添加JDBC Request,具体写法如下:

技术图片

2、查询category表的文件夹的id(用在另一个库的数据表的)

  添加JDBC Request,具体写法如下:

技术图片

3、将category表查询出的文件夹的id拼接起来

  添加BeanShell PostProcessor,Script写法如下:

//先取得id的数量,即查询出来一共有多少个id,这里可以直接引用A_#,可以看debug sampler
log.info("ids的数量为:"+vars.get("A_#"));
int id = Integer.valueOf("${A_#}");

//定义变量ids,用来存放拼接后的字符串
String ids = "";

//用id数量去for循环,循环查询出每个id,并拼接成字符串
for(i=1; i<=id; i++){
    String Id = vars.get("A_"+i);
    log.info("Id为:" + vars.get("A_" + i));
    ids += Id + ",";
    }

//去掉字符串最后一个多余的逗号
ids = ids.substring(0, ids.length() - 1);

log.info("ids为:" + ids);

//将id列表保存为参数
vars.put("ids",ids);

4、查询collect表的商品总数,即count中的Y

  添加JDBC Request,具体写法如下:

技术图片

三、实例操作第二、三步:提取JSON字段和断言

  添加背景里说到的接口的http请求,在http请求里添加BeanShell断言,Script写法如下:

//导入json的包
import org.json.*;

//获取响应结果,并转换为json
String response = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(response);
log.info("输出转换为JSON对象的响应数据:" + responseJson);



//获取count的值
String count = responseJson.getJSONObject("info").getString("count");
log.info("请求响应结果返回的count的值为" + count);

//将数据库查询出来的文件夹总数和商品总数拼接起来,比如12/19
sqlcount=${B_1}+"/"+${C_1};
log.info("第一种方法直接引用变量去拼接的值为:"+sqlcount);

String sqlcountB = vars.get("B_1");
String sqlcountC = vars.get("C_1");
sqlcount2= sqlcountB +"/"+sqlcountC;
log.info("第二种方法用vars.get到值再拼接的值为:"+sqlcount2);


//断言返回的count与数据库的count是否一致
//if(count.equals("12/17")){
if(count.equals("sqlcount")){
    Failure=false;
    log.info("数据一致"+"-----count的值为:"+count+"------sqlcount的值为:"+sqlcount);
}
else{
    Failure=true;
    FailureMessage="不相等呀,请检查!!!"+"count的值为:"+count+"------sqlcount的值为:"+sqlcount;
    log.info(FailureMessage);
}

四、线程组框架展示:

技术图片

 

Jmeter-BeanShell断言的运用一(JSON响应数据与数据库比对)

原文地址:https://www.cnblogs.com/Chilam007/p/14063947.html

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯