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 );
相关文章
相关标签/搜索