zoukankan      html  css  js  c++  java
  • JMeter中BeanShell的实际应用

    使用Jmeter的BeanShell断言,把响应数据中的JSON跟数据库中的记录对比

    很多时候我们需要把Response Data取到的 Json 字符串跟数据库里的对比,来验证接口的正确性,使用Beanshell断言可以比较灵活的实现这个需求。

    Beanshell是一种类似Java的脚本语言,可以直接调用外部的jar包,可以拿现成的json解析包来用,所以笔者选择了这个方法。实现的思路是

    1、历史数据存储到MySQL数据库里,

    2、Jmeter读取参数化的CSV文件,把测试用例都存入CSV文件一次执行,

    3、CSV文件和数据库中数据用ID关联,

    4、每次断言都用BeanShell使用JDBC连接MYSQL库,使用测试用例的ID查出MYSQL中的数据

    5、调用GSON的解析JSON方法,对比两个数据,进行断言

    BeanShell在Jmeter中的使用可以参考这篇文章,https://www.blazemeter.com/blog/queen-jmeters-built-componentshow-use-beanshell   在这里就不多做介绍了。

    GSON是Google的一个解析JSON的工具,笔者不太懂 java,但是JSON字符串的对比不能直接用字符串比较,

    所以引用了这个包,然后调用了GSON的JsonObject.equals()方法,来判断 两个JSON的内容是否一样。大家可以多研究下,最好能完成例如断言失败时打印内容不同的KEY等功能。

    选中测试计划,添加JAR包的引用地址。MYSQL的驱动和GSON包都需要下载下来,如下图直接点开窗口选择JAR文件即可。

    复制代码
    import java.sql.*;
    import java.util.*;
    import java.lang.*;
    import org.apache.regexp.*;
    import com.google.gson.JsonObject;  
    import com.google.gson.JsonParser; 
    
    
    //数据库连接字段
    String drive = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://yourdatabase:yourDatabasePort/";
    String dbName = "YourDataBaseName";
    String user = "YourDataBaseUser";
    String pass = "YourDataBasePass";
    
    
    String history = "";
    String response = "";
    String failuer = "";
    
    //vars.get是Jmeter提供的方法,可以取到变量值,这个caseno是用来关联用例和数据库中结果的
    String CaseNo = vars.get("caseno");
    
    //下面是查询的SQL
    String query = "SELECT response_data From test_json_compare Where case_no = '" + CaseNo + "'";
    
    //JDBC声明
    Connection Mycon = null;
    Statement Mystmt = null;
    ResultSet Myrset = null;
    
    //try中获取数据库连接
    try{
        Mycon = DriverManager.getConnection(url+dbName, user, pass);
        
            }    catch(SQLException e){
            
        }
        Mystmt = Mycon.createStatement();
        Myrset = Mystmt.executeQuery(query);
    
    //prev.getResponseDataAsString是Jmeter提供的方法,可以调取上次请求的响应字符串
        response = prev.getResponseDataAsString();
    
    //如果取到库中的数据,赋值给history
        while (Myrset.next()){
        history = Myrset.getString(1);
        }
    
        Myrset.close();
        Mystmt.close();
    
    
    //Gson提供的方法,原理笔者也不明白,效果是把字符串生成Json对象
    
    JsonParser parser = new JsonParser();  
    JsonObject responseObj = (JsonObject) parser.parse(response);  
    JsonParser parser1 = new JsonParser();          
    JsonObject historyObj = (JsonObject) parser1.parse(history);  
    
    
    if(history == "")
    {
        Failure = true;
        FailureMessage = "连接数据库失败或者数据库内没有历史数据"; 
        
    //调用Gson提供的Json对象euqals方法判断是否一致
    }else if(responseObj.equals(historyObj) == false)
    { 
    //把断言失败置为真    
    Failure = true;
    FailureMessage = "和历史数据不匹配"; 
    }
    复制代码

    http://blog.csdn.net/drico1986/article/details/53021071

  • 相关阅读:
    Spring Boot----SpringData
    Spring Boot----整合MyBatis
    Spring Boot----整合jdbc和整合Durid数据源
    Spring Boot----嵌入式servlet和外置servlet使用
    大数据 CDH 5.8 安装
    Java 单例模式
    python 常用方法
    使用wepy开发微信小程序商城第三篇:购物车(布局篇)
    js时间戳转化成日期格式
    使用wepy开发微信小程序商城第二篇:路由配置和页面结构
  • 原文地址:https://www.cnblogs.com/wangxiaoqun/p/6737921.html
Copyright © 2011-2022 走看看