SoapUI、Jmeter、Postman三種介面測試工具的比較分析
前段時間忙於介面測試,也看了幾款介面測試工具,簡單從幾個角度做了個比較,拿出來與諸位分享一下吧。各位如果要轉載,請一定註明來源,最好在評論中告知博主一聲,感謝。本報告從多個方面對介面測試的三款常用工具進行比較分析,以便於在特定的情況下選擇最合適的工具,或者使用自己編寫的工具。(不同工具定位不同,我們只是主要從介面功能測試的角度進行分析)。博主對這幾款工具也僅僅是淺嘗輒止,並未做太過深入的應用,報告中如果有哪些不合適的地方,歡迎指正。
1. 用例組織方式
首先是用例組織方式的不同,不同的目錄結構與組織方式代表不同工具的測試思想,學習一個測試工具應該首先了解其組織方式。
SoapUI的組織方式如下圖,最上層是WorkSpace,每個視窗只可以開啟一個WorkSpace(這是一個xml檔案),每個Project也是一個單獨的xml檔案(為了協同工作,也可以通過設定將其轉化為一堆檔案集合),所以每個WorkSpace中可以開啟多個Project,一個Project也可以在不同的WorkSpace中。
Project對應我們的測試專案,其中可新增WSDL、WADL資源、TestSuite以及MockService。
TestSuite對應我們的測試模組,比如商戶中心,其中可以新增TestCase,TestCase對應我們對某個模組的不同介面,比如訂單管理介面。而一個介面可以能需要多個Step完成,變數、資料來源、請求等都是一個Step。
Jmeter的組織方式相對比較扁平,它首先沒有WorkSpace的概念,直接是TestPlan,等價於SoapUI中的Project,TestPlan下建立的Threads Group就相當於TestCase,並沒有TestSuite的層級。
TheadsGroup中的Sampler、管理器等均相當於SoapUI中的一個Step,如下圖:
Postman功能上更簡單,組織方式也更輕量級,它主要針對的就是單個的HTTP請求。Collection就相當於是Project,而Collection中可以建立不定層級的Folders,可以自己組織TestSuite。每個Request可以當做是一個TestCase或者Step:
2. 支援的介面型別與測試型別
從功能上Jmeter最為強大,可以測試各種型別的介面,不支援的也可以通過網上或自己編寫的外掛進行擴充套件。SoapUI專門針對HTTP型別的兩種介面,其初衷更是專門測試Soap型別介面,對於其他協議的介面不支援。Postman更是輕量級,定位也不同,可用來測試Rest介面。
工具 | 介面型別 | 測試型別 |
SoapUI | Soap、Rest | 功能、壓力、安全 |
Jmeter | Rest、Soap等 可擴充套件WebSocket、socket | 功能、壓力 |
Postman | Rest | 功能 |
3. 配置不同介面型別
SoapUI可以建立Soap Project或者Rest Project(但Project中新增什麼型別的Step則不受影響),可新增wsdl、wadl資源,並能在TestCase裡新增Rest或Soap的Step。
Jmeter可以線上程組裡新增HTTP、TCP或WebSocket的Sampler。
Postman僅支援Rest介面。
4. 自定義變數以及變數的作用域
除以下表格中所列的變數之外,每個工具都有系統變數,未列在內。
工具 | 變數型別 | 作用域 |
SoapUI | Project、TestSuite、TestCase的Properties以及Custom Properties | 各自以內的範圍內 |
TestCase裡的Properties | 在整個TestCase內 | |
TestCase裡的Data Source、DataGen等 | 在整個TestCase內 | |
Groovy指令碼定義 | 看定義方式 | |
Jmeter | TestPlan中使用者定義的變數 | 所有Threads Group |
配置元件 - 使用者定義的變數 | 根據元件位置而定 | |
CSV data set、random variable等 | 根據元件位置而定 | |
前置、後置處理器 | 當前Threads Group | |
Postman | Environment Variable | 當前環境的Collection |
Global Variable | 所有Collections | |
CSV/JSON datafile | Runner當前的Collection |
5. 資料來源、生成器,進行引數化
工具 | 資料來源 | 生成器 | 迴圈 |
SoapUI | DataSource,資料可來源於檔案、目錄、資料庫、Excel、Grid等 | DataGen | DataSource Loop |
Jmeter | CSV Data Set Config讀取csv檔案 | Random Variable 計數器 | ForEach控制器 迴圈控制器 While控制器 |
Postman | Runner中執行時,可載入CSV/JSON檔案 | 無(只能通過指令碼) | Runner中的Iteration |
6. 流程控制
SoapUI:由Conditioinal Goto控制流程,以及Groovy指令碼
Jmeter:由Switch控制器、If控制器、隨機控制器等一系列控制器實現流程控制,以及Beanshell指令碼
Postman:通過JavaScript指令碼控制
7. 結果解析、展示
工具 | 結果 | 日誌 | 報告 |
SoapUI | Project-OverView、TestSuites TestSuite-TestCases TestCase-TestSteps | SoapUI全域性多種log TestSuite log TestCase log Request log | Project report TestSuite report TestCase report (PDF/HTML/XML/CSV) |
Jmeter | 各種監聽器 | 統一的Jmeter log | 監聽器可匯出到檔案 並可匯出JTL、CSV檔案、通過外掛可匯出HTML(Jmeter3自帶) |
Postman | Send可檢視Request的Response Runner可檢視執行的Result | Postman console Chrome DevTools | Request的Response以及Runner的Result均可匯出json |
8. 斷言
SoapUI:每個Request可新增Assertion
Jmeter:TestPlan、Threads Group、Sampler均可新增斷言
Postman:請求的Tests中可新增斷言
9. 指令碼擴充套件能力
SoapUI:Groovy指令碼
Jmeter:Bean shell(Java)
Postman:JavaScript
10. 團隊協作
SoapUI:本身一個project是一個xml檔案,但是可以通過配置變成一系列資料夾,每個Case、每個Suite均是獨立的檔案,這樣可通過svn/git進行團隊協作。支援性較好。
Jmeter:一個TestPlan也是一個jmx(xml)檔案,無法分割,但Jmeter有一個合併的功能,允許將多個檔案合併在一起。只能每個團隊成員自己建立一個TestPlan,分功能塊進行測試。最後整理合並。
Postman:有團隊協作的功能,需要付費。