MeterSphere(基于JMeter)常用断言汇总

  • JSONPath方式断言

    {
      "success": true,
      "errCode": null,
      "errMessage": null,
      "statDate":"6月28日",
      "data": [
          {
              "name": "人口",
              "value": "1",
              "unit": "万人",
              "rateName": "",
              "rateValue": null,
              "statDateStr": "截至6月27日",
              "dataSource": "百度",
              "detailFlag": false,
          }
      ],
      "notEmpty": true,
      "empty": false
    }
    
    • JSON取数据(页面点击)

MeterSphere(基于JMeter)常用断言汇总_第1张图片

  • 手工写入:

    . s u c c e s s 、 .success、 .success.data[0].value、$.data[-1].value

  • 正则断言

    正整数:\d+$、正浮点数:^\d+(\.\d+)?$、浮点数:(\+|\-)?\d+(\.\d+)?$

  • beanshell脚本断言

    • beanshell中获取系统变量

      // 外部定义 cur_date变量为”6月28日“
      String app_date = "6月28日";
      if(app_date.equals("${cur_date}")){
          log.info(app_date_str);
      }
      
    • beanshell中通过内置函数获取日期

      # 定义变量时可用
      ${__timeShift(yyyy-MM-dd,,,,)} # 当前时间,输出格式为2023-06-28格式
      ${__timeShift(MM月dd日,,,,)} # 当前时间,输出格式为X月X日,用0补充
      ${__timeShift(M月d日,,,,)} # 当前时间,输出格式为X月X日,不用0补充
      ${__timeShift(M月d日,,PT8h,,)} # 当前8小时后时间,输出格式为X月X日,不用0补充
      
    • beanshell中通过代码获取日期

      import java.text.SimpleDateFormat;
      import java.util.Calendar;
      import java.util.Date;
      import org.json.*;
      Date date = new Date(); // 获取当前日期
      SimpleDateFormat sf = new SimpleDateFormat("M月"); // 定义输出格式
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(date);
      date = calendar.getTime();
      String cur_month = sf.format(date);  // 输出当前日期月,”6月“
      calendar.add(Calendar.MONTH,-1); // 向前推一个月
      date = calendar.getTime();
      String last_month = sf.format(date); // 输出当前日期前一个月,”5月“
      
    • 取接口返回JSON数据

      import org.json.*;
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      String response_data = prev.getResponseDataAsString(); // 以String形式返回接口响应内容
      
    • 取层级json数据

      import org.json.*;
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      String response_data = prev.getResponseDataAsString();
      JSONObject data_obj = new JSONObject(response_data); // 将String类型转换为JSON格式
      String apps_str = data_obj.get("data").get("statDate").toString();// 取样例中"6月28日"。
      
    • 取层级多维json数据

      import org.json.*;
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      String response_data = prev.getResponseDataAsString();
      JSONObject data_obj = new JSONObject(response_data);
      String apps_str = data_obj.get("data").toString();
      JSONArray apps_array = new JSONArray(apps_str); // 取data下列表内容
      String[] result = new String[apps_array.length()];
      date_origin = "";
      for(int i = 0; i < apps_array.length(); i++){ // 逐项遍历data下内容
          JSONObject app_obj = new JSONObject(apps_array.get(i).toString());// 将每项内容再转换为json形式
          String name = app_obj.get("name").toString();
          if(name.equals("人口")){
              date_origin = app_obj.get("statDateStr").toString(); // 获取name为人口项的"截至6月27日"
          }
      }
      String pattern = "截至\\\d+月\\\d+日";
      Pattern r = Pattern.compile(pattern);
      Matcher matcher = r.matcher(date_origin);
      String app_date = "";
      if(matcher.find()){
          app_date = matcher.group(0).substring(2); // 取期望的”6月27日“
      }
      
    • beanshell中使用正则表达式

      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      //从”截至6月27日“取"6月27日"
      String data_origin = "截至6月27日"
      String pattern = "截至\\d+月\\d+日";
      Pattern r = Pattern.compile(pattern);
      Matcher matcher = r.matcher(date_origin);
      String app_date = "";
      if(matcher.find()){
          app_date = matcher.group(0).substring(2); // 取第2个字符及以后数据
      }
      log.info(app_date); // 输出”6月27日“
      
    • beanshell中进行断言及输出内容

      // 假设cur_date为外部配置的变量
      // 假设app_date = "6月28日”
      if(app_date.equals("${cur_date}"))
      {
          log.info(app_date);
          AssertionResult.setFailure(false); // 设置断言成功
      }else{
          AssertionResult.setFailure(true);  // 设置断言失败
          AssertionResult.setFailureMessage("更新时间不及时,"+app_date); // 设置断言失败提示
      }
      

你可能感兴趣的:(软件测试,metersphere,jmeter)