Jmeter進行數據庫數據校驗斷言

發表于:2021-4-13 09:44  作者:宅男統治世界   來源:CSDN

字體: | 上一篇 | 下一篇 |我要投稿 | 推薦標簽: 性能測試工具 Jmeter

  數據庫斷言
  數據庫驅動配置步驟
  1.添加驅動包。點擊測試計劃,找到庫配置,點擊“瀏覽”配置驅動包。
  2.添加數據庫配置元件。右鍵測試計劃或者線程組,點擊添加,選擇JDBC Connection Configuration。
  Variable Name For created pool:數據庫配置的環境變量名字。這里先配置為db。
  Database URL:數據庫連接URL。
  JDBC Driver Class:數據庫驅動類名。右邊可以下拉選擇。
  Username:數據庫用戶名。
  Password:數據庫密碼。
  Connection Properties:數據庫連接屬性。這里可以不配置。
  3.點擊添加取樣器,選擇jdbc request。
  4.輸入sql,啟動測試用例即可查詢到數據。
  增加斷言
  jmeter的斷言有很多中,數據庫請求所有的斷言都可以用。如果只是簡單的比較結果是否等于或者包含某個值,使用比較斷言接口。但是如果需要對不同的字段進行比較,則需要使用BeanShell斷言。
  1.在jdbc request下添加BeanShell斷言。
  2.寫一個java腳本,用于比較數據。
  public class JmeterCheckUtils {
      public static void checkResult() {
        // 返回數據為空,直接校驗失敗
        if (vars.getObject("result").size() == 0) {
              Failure = true;
              FailureMessage = "查詢結果為空";
              return;
          }  
          // 取第一個結果
          Result = vars.getObject("result").get(0);
          TreeMap treeMap = new TreeMap(Result);
          log.info("期望值:" + map.toString());
          log.info("實際值:" + treeMap.toString());
          String resultValue = "";
          String expectedValue = "";
          boolean result = false;
          StringBuilder message = new StringBuilder("\n");
          for (String key : map.keySet()) {
              expectedValue = map.get(key);
              resultValue = Result.get(key) == null ? null : Result.get(key).toString();
              if (resultValue == null) {
                  // 這里是為了兼容oracle返回的字段都是大寫的。
                  resultValue = Result.get(key.toUpperCase()) == null ? null : Result.get(key.toUpperCase()).toString();
              }
              if (expectedValue != null && expectedValue.startsWith("$")) {
                  expectedValue = vars.get(expectedValue.substring(2, expectedValue.length() - 1));
              }
              if (expectedValue == null) {
                  result = expectedValue != resultValue;
              } else {
                  result = !expectedValue.equals(resultValue);
              }
              if (result) {
                  Failure = true;
                  message.append(key + "的實際值為【" + resultValue + "】; " + key + "的期望值為【" + expectedValue + "】; " + "校驗結果為:" + (result ? "不通過" : "通過") + ";\n");
              }
          }
          log.info(message.toString());
          FailureMessage = message.toString();
      }
  }
  腳本說明:
  這里是取數據庫請求返回的第一條數據(取不到則校驗失。,放到實際值map對象中,與BeanShell中定義的期望值map對象進行比較?梢愿鶕约旱臏y試場景進行改造。
  期望值可以寫成${param}的形式,腳本會判斷$開頭的期望值,到環境變量中取。
  FailureMessage、log、Result、Failure都是jmeter的預置的變量,不需要重新定義。
  定義Map對象的時候,不能寫尖括號(不清楚原理,應該是不支持泛型)。
  使用TreeMap是為了打印期望值與實際值時,參數名字保持順序,方便肉眼查看。
  數據庫請求的返回結果需要賦值到result變量中。
  3.在BeanShell中填寫腳本。
  // 引入上面的java腳本,參數是java文件的源代碼路徑。
  source("/Users/JmeterCheckUtils.java");
  // 定義期望值map對象
  Map map = new TreeMap();
  // 填寫期望值,這里設置成錯誤的值,方便查看結果。
  map.put("TABLESPACE_NAME", "SYSTEM1");
  // 調用java腳本比較期望值
  JmeterCheckUtils.checkResult();
  4.查看結果?梢钥吹狡谕凳荢YSTEM1,而查詢到的結果是SYSTEM。
  BeanShell斷言說明:
  Assertion error:腳本是否有運行異常,如果有則需要看日志排查。
  Assertion failure: 斷言結果是否為失敗。關聯的對象是Failure。
  Assertion failure message:斷言的錯誤信息。關聯的對象是FailureMessage。
  5.控制臺中也可以查看到打印的日志,包括期望值map對象、實際值map對象、比較的結果。
  ORACLE注意事項
  1.批量執行SQL,開頭和結束需要特殊語法保護。開頭添加declare begin,結尾添加end。
  declare begin
  delete from ccc where id = '13100000001';
  delete from ccc where id = '13100000002';
  delete from ccc where id = '17100000001';
  end;
  2.執行SQL結尾不能用分號。
  3.數據庫中clob字段查詢不出數據,返回的結果為oracle.sql.CLOB@30082f38,需要特殊處理。

      本文內容不用于商業目的,如涉及知識產權問題,請權利人聯系51Testing小編(021-64471599-8017),我們將立即處理

評 論

論壇新帖

頂部 底部


建議使用IE 6.0以上瀏覽器,800×600以上分辨率,法律顧問:上海信義律師事務所 項棋律師
版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2021, 滬ICP備05003035號
投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

滬公網安備 31010102002173號

51Testing官方微信

51Testing官方微博

掃一掃 測試知識全知道

农村里的风流韵事