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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM