jmeter(四十五)經常使用Beanshell腳本

整理了一批jmeter經常使用的beanshell腳本供你們參考!

時間戳

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
try{
Date date =new Date(); //獲取當前時間
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowDate = sf.format(date);
Calendar cal = Calendar.getInstance();
cal.setTime(sf.parse(nowDate));
cal.add(Calendar.DAY_OF_YEAR,+0); 
String orderDate = sf.format(cal.getTime());
cal.add(Calendar.DAY_OF_YEAR,+365); 
String senderDate = sf.format(cal.getTime());
vars.put("orderDate",orderDate); //參數能夠調用
vars.put("senderDate",senderDate); //參數能夠調用
}
catch(Exception e){
}

下載文件

import java.io.*;
byte[] result = prev.getResponseData(); 
String file_name = "D:\\gongju\\apache-jmeter-3.2\\bin\\download\\sqlEnt_${id}.zip"; 
File file = new File(file_name); 
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();

 

保存響應內容

FileWriter fstream = new FileWriter("XXX",true);
BufferedWriter out =new BufferedWriter(fstream);
out.write(vars.get("AAA")+","+ vars.get("BBB"));
out.write(System.getProperty("line.separator"));
out.close();
fstream.close();

斷言

import java.io.UnsupportedEncodingException;
import org.apache.jmeter.assertions.AssertionResult;
import org.json.*;
String str = prev.getResponseDataAsString();
String result = "";
try {
result = java.net.URLDecoder.decode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
JSONObject data_obj=new JSONObject(str);
String result1 = data_obj.get("dockedContact").get("name").toString();
if(result1.contains("zhufc")) {
Failure = true;
FailureMessage = "斷言成功";
log.info("斷言成功");
}else{
Failure = false;
FailureMessage = "斷言失敗";
}

鏈接數據庫

import java.sql.*;
import java.util.*;
import java.lang.*;
import org.apache.regexp.*;
import org.json.*;
//一:數據庫取值
String drive = "org.gjt.mm.mysql.Driver";
String url = "jdbc:mysql://192.168.204.129:3306/";
String dbName = "aiopms";
String user = "root";
String pass = "000000";
String history = "";
String response = "";
String failuer = "";
String query ="SELECT projectid From pms_projects Where name ='測試項目'  order by 'desc' limit 1";
Connection Mycon = null;
Statement Mystmt = null;
ResultSet Myrset = null;
try{
	Mycon = DriverManager.getConnection(url+dbName, user, pass);
	
		}	catch(SQLException e){
		
	}
Mystmt = Mycon.createStatement();
Myrset = Mystmt.executeQuery(query);
while (Myrset.next()){
	history = Myrset.getString(1);
	}
	Myrset.close();
	Mystmt.close();
	
if(history == "")
{
	Failure = true;
	FailureMessage = "鏈接數據庫失敗"; 
}

浮點時間戳轉換爲標準時間

 

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
//10位的秒級時間戳
long time1 = ${time};//獲取時間戳變量
String result1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time1 * 1000));
log.info("10位時間戳(秒)--->Date:" +result1);

 //13位的毫秒級時間戳
//double time2 = 1515730332000d;
//String result2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time2);
//System.out.println("13位數的時間戳(毫秒)--->Date:" + result2);

 

  

 

解析jsonlist

利用beanshell獲取到json響應,而後經過JSONObject JSONArray 將數組解析,遍歷數組的length以後,提取參數值java

咱們須要解析以下的json響應,提取出中間的Namepopulationmysql

//導入json包
import org.json.*;
//獲取獲取請求的返回值
String response_data = prev.getResponseDataAsString(); 
//日誌打印獲取請求的返回值
log.info(response_data);
//將String類型的返回值構形成JSONObject對象
JSONObject data_obj = new JSONObject(response_data);
//獲取做爲下一個請求post的參數值Province(兩種方式)
//String Provincelist_str = data_obj.get("Province").toString(); 
JSONArray Provincelist_str = data_obj.getJSONArray("Province");
//log.info(Provincelist_str);
//獲取Province數組的長度
int len = Provincelist_str.length(); 

String strlen = Integer.toString(len);

vars.put("MessageNum",strlen);
log.info(strlen);
int i = 0;
for(;i < len;++i)
{
//獲取 data[ i ] 數組對象
JSONObject jsonTemp = (JSONObject)Provincelist_str.getJSONObject(i);
switch(i)
{
case 0:
//兩種提取參數的寫法
String NameItems = jsonTemp.getString("Name");
// String NameItems = jsonTemp.get("Name").toString();
// 兩種打印參數的方法
// vars.put("Name_1", jsonTemp.getString("Name")); 
vars.put("Name_1", NameItems); 
log.info(NameItems);
}
}

遞歸建立多級目錄

import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.io.RandomAccessFile;  
            StringBuffer fileBuf=new StringBuffer();  
            String filePar = "D:\\\目錄1\\目錄2";
            File myPath = new File( filePar );  
            if ( !myPath.exists()){
                myPath.mkdirs();  
                System.out.println("建立文件夾路徑爲:"+ filePar);  
            }  
           
            String filename = "列表.csv";
            try {  
                FileWriter fw = new FileWriter(filePar + "\\\" + filename,true);
              
                String originalLine = 「」+"\n";
                System.out.println("*** "+ originalLine);  
                fw.write(originalLine);  
                fw.close();  
            } catch (IOException e) {  
 
                e.printStackTrace();  
            }  

經常使用內置變量

1.log 打印日誌,寫入信息到jmeber.log文件。

2.SampleResult 獲取SampleResult對象,能經過這個對象獲取想要的信息。

3.Response 獲取Response對象,能經過這個對象獲取響應信息。

4.Failure 查看接口調使用可否成功,假如返回false是成功的,true是失敗的。

5.FailureMessage 失敗信息,沒有設置的時候失敗信息是空的,能set這個信息。

6.ResponseData 獲取response body類型是byte[]。

7.ResponseCode 返回接口code成功是200。

8.ResponseMessage 獲取msg成功是OK。

9.ResponseHeaders 獲取接口服務端返回的頭部信息。

10.RequestHeaders 獲取用戶端請求的頭部信息。

11.SampleLabel 獲取接口請求的名稱。

12.SamplerData 獲取請求的url和body。

13.ctx 表明上下文信息,能直接用。

14.vars即JMeterVariables,操做jmeter變量,這個變量實際引用了JMeter線程中的局部變量容器(本質上是Map),經常使用方法:

a) vars.get(String key):從jmeter中得到變量值;

b) vars.put(String key,String value):數據存到jmeter變量中;

15.prev 獲取前面的sample返回的信息,經常使用方法:

a) prev.getResponseDataAsString():獲取響應信息。

b) prev.getResponseCode() :獲取響應code。

 調用cmd文件

String command = "cmd /c start D:\\apache-jmeter-3.2\\負載.bat";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);

GUI小命令

button = new JButton( "登陸" );
frame = new JFrame( "My Frame" );
frame.getContentPane().add( button, "Center" );
frame.pack();
frame.setVisible(true);
相關文章
相關標籤/搜索