# jmeter斷言
jmeter中有個元件叫做斷言(Assertion),它的作用和loadrunner中的檢查點類似;
用于檢查測試中得到的響應數據等是否符合預期,用以保證性能測試過程中的數據交互與預期一致。
**使用斷言的目的:**在request的返回層面增加一層判斷機制;因為request成功了,并不代表結果一定正確。
**使用斷言的方法:**
**△**在選擇的Sampler下添加對應的斷言(因為不同類型的斷言檢查的內容不同);配置好響應的檢查內容(根據斷言情況而定,有的斷言控制面板不需要添加任何內容,如XML Assertion)。
**△**添加一個斷言結果的監聽器(從監聽器中添加),通過“斷言結果”可以看到是否通過斷言;對于一次請求,如果通過的話,斷言結果中只會打印一行請求的名稱;
? 如果失敗,則除了請求的名稱外,還會有一行失敗的原因(不同類型的斷言,結果不同)。
**PS:**一個Sampler可以添加多個斷言,根據你的檢查需求來添加相應的斷言,當Sampler下所有的斷言都通過了,那么才算request成功。
最新版本的3.0jmeter中有13種不同的斷言,下面簡單介紹下每個斷言各自擁有什么樣的作用以及它們的適用場景:
**1、BeanShell斷言**
BeanShell之前關于定時器的隨筆中有介紹過,是一種松散類型的腳本語言(這點和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):**參照下文定義的變量(使腳本文件參照定義的變量來運行)
**2、 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:**下面的輸入框表示可以輸入變量類型,運用的腳本(取樣結果、斷言結果、取樣日志文件等參數)
**3、比較斷言(compare ?assertion)**
這是一種比較特殊的斷言元件,針對斷言進行字符串替換時使用;
**作用對象:**需要替換的字符串

**Select Comparison Operators:**選擇比較運算符
**Compare Content:**可以選擇比較的內容類型(true/false或者自定義,編輯)
**Compare Time:**比較時間(可以設定比較的時間,單位為秒,默認為-1)
**Comparison Fitters:**比較修改工具
**regular expression substitutions:**替換正則表達式
**Regex String:**要替換的字符串(可從斷言結果中選擇)
**substitutions:**替換的字符串(替換結果)
**4、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解析器)
**5、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:**下面的輸入框表示可以輸入變量類型,運用的腳本(取樣結果、斷言結果、取樣日志文件等參數)
**6、MD5Hex斷言**
MD5是一種消息摘要算法,用以提供消息的完整性保護(具體關于MD5的知識請自行查詢);
**作用對象:**針對參數類型為MD5Hex加密的參數的斷言

**MD5Hex:**將已被MD5加密的參數寫入其中,添加取樣器等其他元件
**7、Size斷言**
用于判斷返回內容的大小;
**作用對象:**返回信息,響應報文

**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:**斷言字節范圍
? ? ? ? ?字節大小單位為:字節;比較順序是①返回內容的大小②比較類型③指定字節大小
**8、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:**執行斷言消息的位置(在返回消息的具體哪個位置執行斷言)
**9、XML概要斷言**
亦可以稱為XML模型斷言/XML數據類型斷言;XML Schema?定義了兩種主要的數據類型:①xml document schema?文檔架構 ;② 文檔架構xml-schema?xml模式
**作用對象:**返回結果為XML概要斷言的2中數據類型的消息

**XML Schema:**XML概要模型
**File Name:**文件名(寫入需要斷言的文件名稱)
**10、XML斷言**
XML(可擴展標記語言) 提供一種描述結構化數據的方法。與主要用于控制數據的顯示和外觀的?HTML?標記不同,XML?標記用于定義數據本身的結構和數據類型;
**作用對象:**判斷返回結果是否和xml的格式即成對出現

**11、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:確認都不匹配
**12、響應斷言**
判斷返回內容中的內容
**作用對象:**響應報文中的所有對象

**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:返回結果是指定結果的字串
? ? ? ? ? ?否:不進行匹配
**要測試的模式:**即填寫你指定的結果(可填寫多個),按鈕【添加】、【刪除】是進行指定內容的管理
**13、斷言持續時間**
用于判斷服務器的響應時間
**作用對象:**服務器

**APPly to:**適用范圍
? ? ? ? ?Main sample and sub-samples:作用于父節點取樣器及對應子節點取樣器
? ? ? ? ?Main sample only:僅作用于父節點取樣器
? ? ? ? ?Sub-samples only:僅作用于子節點取樣器
**Duration to assert:**持續斷言
**Duration in milliseconds:**響應時間設置(單位:毫秒),如果響應時間大于設置的響應時間,則斷言失敗,否則成功!
- 第一章-測試理論
- 1.1軟件測試的概念
- 1.2測試的分類
- 1.3軟件測試的流程
- 1.4黑盒測試的方法
- 1.5AxureRP的使用
- 1.6xmind,截圖工具的使用
- 1.7測試計劃
- 1.8測試用例
- 1.9測試報告
- 2.0 正交表附錄
- 第二章-缺陷管理工具
- 2.1缺陷的內容
- 2.2書寫規范
- 2.3缺陷的優先級
- 2.4缺陷的生命周期
- 2.5缺陷管理工具簡介
- 2.6缺陷管理工具部署及使用
- 2.7軟件測試基礎面試
- 第三章-數據庫
- 3.1 SQL Server簡介及安裝
- 3.2 SQL Server示例數據庫
- 3.3 SQL Server 加載示例
- 3.3 SQL Server 中的數據類型
- 3.4 SQL Server 數據定義語言DDL
- 3.5 SQL Server 修改數據
- 3.6 SQL Server 查詢數據
- 3.7 SQL Server 連表
- 3.8 SQL Server 數據分組
- 3.9 SQL Server 子查詢
- 3.10.1 SQL Server 集合操作符
- 3.10.2 SQL Server聚合函數
- 3.10.3 SQL Server 日期函數
- 3.10.4 SQL Server 字符串函數
- 第四章-linux
- 第五章-接口測試
- 5.1 postman 接口測試簡介
- 5.2 postman 安裝
- 5.3 postman 創建請求及發送請求
- 5.4 postman 菜單及設置
- 5.5 postman New菜單功能介紹
- 5.6 postman 常用的斷言
- 5.7 請求前腳本
- 5.8 fiddler網絡基礎及fiddler簡介
- 5.9 fiddler原理及使用
- 5.10 fiddler 實例
- 5.11 Ant 介紹
- 5.12 Ant 環境搭建
- 5.13 Jmeter 簡介
- 5.14 Jmeter 環境搭建
- 5.15 jmeter 初識
- 5.16 jmeter SOAP/XML-RPC Request
- 5.17 jmeter HTTP請求
- 5.18 jmeter JDBC Request
- 5.19 jmeter元件的作用域與執行順序
- 5.20 jmeter 定時器
- 5.21 jmeter 斷言
- 5.22 jmeter 邏輯控制器
- 5.23 jmeter 常用函數
- 5.24 soapUI概述
- 5.25 SoapUI 斷言
- 5.26 soapUI數據源及參數化
- 5.27 SoapUI模擬REST MockService
- 5.28 Jenkins的部署與配置
- 5.29 Jmeter+Ant+Jenkins 搭建
- 5.30 jmeter腳本錄制
- 5.31 badboy常見的問題
- 第六章-性能測試
- 6.1 性能測試理論
- 6.2 性能測試及LoadRunner簡介
- 第七章-UI自動化
- 第八章-Maven
- 第九章-測試框架
- 第十章-移動測試
- 10.1 移動測試點及測試流程
- 10.2 移動測試分類及特點
- 10.3 ADB命令及Monkey使用
- 10.4 MonkeyRunner使用
- 10.5 appium工作原理及使用
- 10.6 Appium環境搭建(Java版)
- 10.7 Appium常用函數(Java版)
- 10.8 Appium常用函數(Python版)
- 10.9 兼容性測試