zoukankan      html  css  js  c++  java
  • jmeter(四十五)常用Beanshell脚本

     注意事项:

    1、log只能打印string,不能打印int,需转换

    int len = Provincelist_str.length();     String strlen = Integer.toString(len);

    或 log.info("code="+object.get("code").getAsInt().toString());

     
    2、众多代码BeanShell都可现在idea中测试通过后在复制到jmeter中使用
     
     
     

    整理了一批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之后,提取参数值

    我们需要解析如下的json响应,提取出中间的Name和population

    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 = “”+" ";
                    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);
  • 相关阅读:
    Windows 服务的安装(1)
    C#编写window服务,一步一步(1)
    .net 读写记事本文件
    C#中POST数据和接收的几种方式(抛砖引玉)
    Newtonsoft.Json 通过 JObject 读取 json对像 超简单
    Winform读写App.config文件以及重启程序
    WebMatrix之WebMatrix.Data
    C#中方法的参数的四种类型
    zh-Hans vs.net 通过 管理nuget程序包下载简体中文语言包 zh-cn
    .net C# 图片转Base64 Base64转图片
  • 原文地址:https://www.cnblogs.com/ht22ht22/p/11732860.html
Copyright © 2011-2022 走看看