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){
}
複製代碼

下載文件

1
2
3
4
5
6
7
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();

 

保存響應內容

1
2
3
4
5
6
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();

斷言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 =  "斷言失敗" ;
}

鏈接數據庫

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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 =  "鏈接數據庫失敗" ;
}

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

 

1
2
3
4
5
6
7
8
9
10
11
12
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以後,提取參數值html

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//導入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);
}
}

遞歸建立多級目錄

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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。<br><br>

 調用cmd文件

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

GUI小命令

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