Jmeter(六)所有的斷言


斷言的概念:

jmeter中有個元件叫做斷言(Assertion),它的作用和loadrunner中的檢查點類似;

用於檢查測試中得到的響應數據等是否符合預期,用以保證接口/性能測試過程中的數據交互預期一致。

使用斷言的目的:

在request的返回層面增加一層判斷機制;因為request成功了,並不代表結果一定正確。

使用斷言的方法:

△在選擇的Sampler下添加對應的斷言(因為不同類型的斷言檢查的內容不同);配置好響應的檢查內容(根據斷言情況而定,有的斷言控制面板不需要添加任何內容,如XML Assertion)。

△添加一個斷言結果的監聽器(從監聽器中添加),通過“斷言結果”可以看到是否通過斷言;

對於一次請求,

如果通過,斷言結果中只會打印一行請求的名稱;

如果失敗,則除了請求的名稱外,還會有一行失敗的原因(不同類型的斷言,結果不同)。

PS:一個Sampler可以添加多個斷言,根據你的檢查需求來添加相應的斷言,當Sampler下所有的斷言都通過了,才算request成功。

最新版本的3.0jmeter中有13種不同的斷言,下面簡單介紹下每個斷言各自擁有什么樣的作用以及它們的適用場景:

 

常用的4種斷言方法

一、Response Assertion(響應斷言)
二、Size Assertion(數據包字節大小斷言)
三、Duration Assertion(持續時間斷言)
四、beanshell 斷言(自由斷言)

 

 

一、Response Assertion(響應斷言)

判斷返回內容中的內容

作用對象:響應報文中的所有對象

APPly to:適用范圍

         Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器

         Main sample only:僅作用於父節點取樣器

         Sub-samples only:僅作用於子節點取樣器

         JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)

要測試的響應字段:要檢查的項

                響應報文

                Documeng(text):測試文件

                URL樣本

                響應代碼

                響應信息

                Response Headers:響應頭部

                Ignore status:忽略返回的響應報文狀態碼

模式匹配規則:

           包括:返回結果包括你指定的內容

           匹配:(好像跟Equals查不多,弄不明白有什么區別)   

           Equals:返回結果與你指定結果一致

           Substring:返回結果是指定結果的字串

           否:不進行匹配

要測試的模式:即填寫你指定的結果(可填寫多個),按鈕【添加】、【刪除】是進行指定內容的管理

1. 添加響應斷言

對Web請求的響應結果進行驗證

 

2. 輸入需要匹配的字符串

此處對於訪問Baidu首頁,需要設置匹配的字符串為“百度一下,你就知道”,表示返回的文本內容若包含有“百度一下,你就知道”,則就算Pass

 

Response Assertion配置參數

模塊類型 選項名稱 配置說明
Name   Response Assertion名稱
Comments   注釋
Apply to   斷言應用的范圍
  Main sample and sub-samples 作用於父節點取樣器及其子節點取樣器
  Main sample only 僅作用於父節點取樣器
  Sub-samples only 僅作用於子節點取樣器
  Jmeter Variable Name to use 作用於Jmeter變量(輸入框中可輸入Jmeter的變量名稱)
Field to Test   測試的字段
  Text Response 匹配從服務器返回的響應文本(不包括Response Headers)
  Response Code 匹配響應狀態碼
  Response Message 匹配響應信息。如:OK
  Response Headers 匹配響應頭
  Request Headers 匹配請求頭
  URL Sampled 匹配URL鏈接
  Document(text) 匹配文檔內容
  Ignore Status 一個請求多項響應斷言時,忽略某一項斷言的響應結果,而繼續下一項斷言
  Request Data 匹配請求數據
Pattern Mactching Rules   匹配的規則
  Contains 返回的結果包括所指定的內容,支持正則匹配
  Matches 根據指定內容進行匹配
  Equals 返回結果與所指定的內容一致
  Substring 返回結果包括所指定結果的字符串,不支持正則匹配
  Not 不進行匹配就算是Pass
  Or 暫不確定該模式的用法
Patterns to Test    
  Patterns to Test 需要匹配的正則表達式、字符串。可以添加多項,每一項會分開進行驗證,若某一項驗證失敗,則其后的不會再進行驗證。

3. 添加:斷言結果(Assertion Results)、查看結果樹(View Results Tree)

4. 運行Test Plan中的線程組,進行斷言檢查

以下可觀察到響應數據中是包含所指定的驗證字符串,Pass

 

 

 

二、Size Assertion(數據包字節大小斷言)

判斷響應結果是否包含正確數量的byte。可定義(=, !=, >, <, >=, <=)

用於判斷返回內容的大小;

作用對象:返回信息,響應報文

APPly to:應用范圍(返回內容的斷言范圍)

         Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器

         Main sample only:僅作用於父節點取樣器

         Sub-samples only:僅作用於子節點取樣器

         JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)

Response Size Field to Test:響應字節的測試范圍(可以選擇用於判斷的響應范圍)

         Full Response:全部響應

         Response Headers:響應頭部

         Response Body:響應主體

         響應代碼:響應報文相關的代碼

         響應信息:響應報文的信息

         Size to Assert:斷言字節范圍

         字節大小單位為:字節;比較順序是①返回內容的大小②比較類型③指定字節大小

 

 

 

三、Duration Assertion(持續時間斷言)

 判斷是否在給定的時間內返回響應結果

用於判斷服務器的響應時間

作用對象:服務器 

APPly to:適用范圍

         Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器

         Main sample only:僅作用於父節點取樣器

         Sub-samples only:僅作用於子節點取樣器

Duration to assert:持續斷言

Duration in milliseconds:響應時間設置(單位:毫秒),如果響應時間大於設置的響應時間,則斷言失敗,否則成功!

 

 

 

四、beanshell 斷言

Bean Shell常用內置變量

是一種松散類型的腳本語言(這點和JS類似),一種完全符合java語法的java腳本語言,並且又擁有自己的一些語法和方法;

作用對象:針對sampler中的Bean Shell sampler而使用的斷言

Name:斷言的名字(可以用一個比較容易理解和分辨的名稱)

Comments:注釋(對這個斷言進行一個解釋,備注)

Reset bsh.interpreter before each call:在每次調用Bean Shell之前重置bsh.interpreter類(bsh.interpreter是Bean Shell腳本語言的一種類,也可以理解為一種解析器)

Parameters(String Parameters and String []bsh.args):String參數(String []bsh.args是主類main函數的形式參數,是一個String 對象數組,可以用來獲取命令行用戶輸入進去的參數)

Script file:腳本文件(可以填入腳本文件路徑)

Script(see below for variables that are defined):參照下文定義的變量(使腳本文件參照定義的變量來運行)

   JMeter在它的BeanShell中內置了變量,用戶可以通過這些變量與JMeter進行交互,其中主要的變量及其使用方法如下:

log:寫入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

ctx:該變量引用了當前線程的上下文,使用方法可參考:org.apache.jmeter.threads.JMeterContext。

vars - (JMeterVariables):操作jmeter變量,這個變量實際引用了JMeter線程中的局部變量容器(本質上是Map),它是測試用例與BeanShell交互的橋梁,常用方法:

    a) vars.get(String key):從jmeter中獲得變量值

    b) vars.put(String key,String value):數據存到jmeter變量中

    更多方法可參考:org.apache.jmeter.threads.JMeterVariables

props - (JMeterProperties - class java.util.Properties):操作jmeter屬性,該變量引用了JMeter的配置信息,可以獲取Jmeter的屬性,它的使用方法與vars類似,但是只能put進去String類型的值,而不能是一個對象。對應於java.util.Properties。

    a) props.get("START.HMS");  注:START.HMS為屬性名,在文件jmeter.properties中定義

    b) props.put("PROP1","1234");

prev - (SampleResult):獲取前面的sample返回的信息,常用方法:

    a) getResponseDataAsString():獲取響應信息

    b) getResponseCode() :獲取響應code

    更多方法可參考:org.apache.jmeter.samplers.SampleResult

sampler - (Sampler):gives access to the current sampler

 

 在這里除了可以使用beanshell的內置變量外,主要通過 Failure 和 FailureMessage來設置斷言結果。

 

其中腳本內容如下:

 
復制代碼
if ("200".equals(""+ResponseCode) == false )
{
    // 響應碼不等於200時,設置斷言失敗,並輸出失敗信息
    Failure=true ;
    FailureMessage ="Response code was not a 200 response code it was " + ResponseCode + "." ;
    print ( "the return code is " + ResponseCode);   // this goes to stdout
    log.warn( "the return code is " + ResponseCode); // this goes to the JMeter log file
} else {
    // 響應碼等於200時,設置斷言成功,並輸出成功信息
    Failure=false;
    FailureMessage = "Return true, and the response code was " + ResponseCode;
     }
}
復制代碼

 

 

五、 BSF斷言

BSF(Bean Scripting Framework);是一個支持在Java應用程序內調用腳本語言 (Script),並且支持腳本語言直接訪問Java對象和方法的一個開源項目;

作用對象:針對sampler中的BSF sampler而使用的斷言

Script language(e.g.beanshell,javascirpt,jexl):腳本語言(可以從下面的下拉框中選擇對應的腳本語言JavaScript、beanshell等)

parameters to be passed to script(=> String Parameters and String []args):(傳遞給腳本的參數→可以理解為使用BSF斷言腳本時候一起引用的參數 )

Script file(overrides script):重寫腳本(可以通過選擇腳本文件的狀態,是瀏覽調用已有的腳本還是在在下方的輸入框內寫入腳本;)

Script:下面的輸入框表示可以輸入變量類型,運用的腳本(取樣結果、斷言結果、取樣日志文件等參數)

 

六、比較斷言(compare  assertion)

這是一種比較特殊的斷言元件,針對斷言進行字符串替換時使用;

作用對象:需要替換的字符串

Select Comparison Operators:選擇比較運算符

Compare Content:可以選擇比較的內容類型(true/false或者自定義,編輯)

Compare Time:比較時間(可以設定比較的時間,單位為秒,默認為-1)

Comparison Fitters:比較修改工具

regular expression substitutions:替換正則表達式

Regex String:要替換的字符串(可從斷言結果中選擇)

substitutions:替換的字符串(替換結果)

 

七、HTML斷言

對響應類為XML類型的文件進行斷言;

作用對象:針對sampler中的SOAP/XML-RPC Request而使用的斷言

Tidy Settings:Tidy 環境(Tidy是一個HTML語法檢查器和打印工具,可以將HTML轉換為XML類型的文件)

Doctype:文檔類型(可通過下拉框選擇不同文檔類型→ omit疏忽遺漏的/auto動態的/strict嚴格的/loose寬泛的。。。。。。我也不太懂這里什么意思GG)

Format:文件格式(可選擇HTML/XHTML/XML三種不同類型的文件格式來檢查返回內容)

Errors only:誤差校正(能接受的最大值)

Error threshold:誤差/錯誤范圍(可選擇誤差/錯誤數量的范圍,最大值)

Warning threshold:警告范圍(可選擇誤差警告的數量范圍,最大值)

如果勾選“Error only”這里忽略Warning,只對誤差作統計檢查;如果對返回內容的檢查結果不超過指定結果,則斷言通過,否則失敗。

Write JTidy report to file:寫入JTidy報告的文件(JTidy是Tidy的一個java移植,可以將它當成一個處理HTML文件的DOM解析器)

 

八、JSR223斷言

JSR223即Java 規范請求,是指向JCP(Java Community Process)提出新增一個標准化技術規范的正式請求;

作用對象:針對sampler中的JSR223 sampler而使用的斷言

Script language(e.g.beanshell,javascirpt,jexl):腳本語言(可以從下面的下拉框中選擇對應的腳本語言JavaScript、beanshell等)

parameters to be passed to script(=> String Parameters and String []args):(傳遞給腳本的參數→可以理解為使用JSR223斷言腳本時候一起引用的參數 )

Script file(overrides script):重寫腳本(可以通過選擇腳本文件的狀態,是瀏覽調用已有的腳本還是在在下方的輸入框內寫入腳本;)

Script:下面的輸入框表示可以輸入變量類型,運用的腳本(取樣結果、斷言結果、取樣日志文件等參數)

 

九、MD5Hex斷言

MD5是一種消息摘要算法,用以提供消息的完整性保護(具體關於MD5的知識請自行查詢);

作用對象:針對參數類型為MD5Hex加密的參數的斷言

MD5Hex:將已被MD5加密的參數寫入其中,添加取樣器等其他元件

十、SMIME斷言

SMIME是一種多用途網際郵件擴充協議,相比於之前的SMAP郵件傳輸協議,增加了安全性,對郵件主題進行保護;

作用對象:針對采用了該種郵件傳輸協議的信息

signature:簽名(可選擇對協議的簽名驗證狀態)

          Verify signature:驗證簽名

          Message not signed:沒有簽名消息

Signer certificate:簽名證書(因為SMIME協議增加了安全傳輸,需要證書驗證)

          No check:不檢查

          Check values:檢查

Signer distinguished name:簽名證書者名稱(證書注冊者的名稱)

Sigmer email address:簽名者的郵件地址(注冊的郵件地址)

Issuer distinguished name:發行者名稱(由誰發行的證書)

Serial Number:證書序號

Certificate file:選擇證書文件

Execute assertion message at position:執行斷言消息的位置(在返回消息的具體哪個位置執行斷言)

 

十一、XML概要斷言

亦可以稱為XML模型斷言/XML數據類型斷言;XML Schema 定義了兩種主要的數據類型:①xml document schema 文檔架構 ;② 文檔架構xml-schema xml模式

作用對象:返回結果為XML概要斷言的2中數據類型的消息

XML Schema:XML概要模型

File Name:文件名(寫入需要斷言的文件名稱)

 

十二、XML斷言

XML(可擴展標記語言) 提供一種描述結構化數據的方法。與主要用於控制數據的顯示和外觀的 HTML 標記不同,XML 標記用於定義數據本身的結構和數據類型;

作用對象:判斷返回結果是否和xml的格式即<></>成對出現

 

十三、XPath斷言

XPath即為XML路徑語言,它是一種用來確定XML(標准通用標記語言的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在數據結構樹中找尋節點的能力。

作用對象:針對返回信息為XPAth的數據類型進行斷言

Apply to:適用范圍

         Main sample and sub-samples:主要樣本和次級樣本

         Main sample only:僅主要樣本

         Sub-samples only:僅次級樣本

         JMeter Variable:jmeter變量(輸入框內可輸入jmeter的變量名稱)

XML Parsing Options:XML解析選項

         Use Tidy(tolerant parser):使用Tidy(容錯解析器),默認選擇quiet(不顯示)

         Quiet:不顯示

         Report errors:錯誤報告

         Show warnings:顯示錯誤

         Use Namespaces:使用名稱空間

         Validate XML:驗證XML(文件包/數據)

         Ignore Whitespace:忽略空格(這允許你指定語法分析器可以忽略哪個空格,而哪個空格是重要的)

         Fetch external DTDs:獲取外部DTDs(一些XML元素具有屬性,屬性包含應用程序使用的信息,屬性僅在程序對元素進行讀、寫操作時,提供元素的額外信息,這時候需要在DTDs中聲明)

XPath Assertion:輸入框中寫入xpath斷言,點擊Validate驗證其正確性

         True if nothing matches:確認都不匹配

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM