介面自動化:HttpClient + TestNG + Java(一) - 介面測試概述+自動化環境搭建
1.1 介面測試簡介
1.1.1 什麼是介面測試
開始學習介面自動化測試之前,我們先要來了解什麼是介面,以及什麼是介面測試。
我們都知道,測試從級別上劃分可以分為
- 元件測試
- 整合測試
- 系統測試
- 驗收測試
其中在整合測試這個階段,一個最主要的測試活動就是介面測試。在元件測試中,我們對單個元件自身的功能效能等指標進行驗證,上升到整合測試級別,我們則進一步去驗證元件之間的互動和整合。而元件之間的互動,就是通過‘介面’來達成的。所以一定程度上,整合測試和介面測試概念是大幅度重疊的。(就元件整合/介面測試而言,其實還有系統整合測試)
比如在主流的web專案中,前端和後端之間的互動,就要通過介面,也是我們這個系列要應對的主要任務。
1.1.2 為什麼要做介面測試
我經常喜歡用一臺汽車做為例子來講述元件,整合和系統測試之間的關係。
比如,現在有一臺汽車需要做質量檢測,那麼我們可以怎麼測試?
- 元件測試 - 測試這臺汽車的各個部件(如發動機、底盤、變速箱、制動器、轉向系統、輪轂輪胎)
- 整合測試 - 測試這臺汽車各部件之間的聯動(變速箱如何控制發動機的運作?轉向系統如何對輪轂產生影響?)
- 系統測試 - 測試這臺汽車做為一個整體的功能效能
有一個疑問是,難道我在系統測試這個級別,就不能測試上述例子中的“變速箱如何控制發動機的運作”指標嗎?其實一定程度而言是可以的,這也是為什麼在過去一段時間內,其實大量的測試人員是被堆積在系統測試級別的。但隨著我們的行業越來越發展,測試理念越來越先進,測試人員的技能儲備也更加豐富,現在的IT專案中已經越來越重視測試的左移和測試的深度。
介面測試在筆者看來,其最大的好處莫過於如下兩點:
1. 可以儘早的讓測試介入專案,更早的發現和解決問題。比如在整體系統還未開發完畢時,部分介面其實已經可供測試了。
2. 可以從更底層的角度進行測試,從而彌補系統測試級別容易忽略和難以觸發的一些測試。
完備的介面測試可以給專案質量帶來遠超系統測試的收益,參考測試金字塔理論:
1.1.3 HTTP請求的類別
本系列會主要應對是http型別的介面測試。
我們先通過一個表格來列舉出8種http請求的類別定義,具體請求方法的實際應用我們在後續的自動化例項中再進一步探討。
在實際工作中,最常見的是GET以及POST方法。
1.2 介面自動化工具準備
1.2.1 必備工具
要搭建http介面測試環境,我們需要以下的東西:
- JDK:推薦使用1.8
- 整合開發環境:這裡我們使用eclipse
- 自動化構建管理:Maven
- 其他相應的依賴包我們通過maven管理
1.2.2 JDK的安裝
JDK的下載安裝和環境變數配置網上有大量教程,本文不再贅述。
1.2.3 Eclipse的安裝
eclipse的安裝也非常簡單,本文不再贅述。
1.2.4 Maven的安裝
Maven的下載安裝和環境變數配置網上有大量教程,本文不再贅述。
以上不再贅述的部分如果遇到問題,歡迎留言我會跟進:)
1.3 介面自動化專案
在eclipse中新建一個maven專案MavenAPIProject,開啟專案自帶的pom.xml檔案,加入以下依賴資訊:
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.4</version> </dependency> <!-- https://mvnrepository.com/artifact/org.testng/testng --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8.8</version> <scope>test</scope> </dependency>
修改完畢後儲存,就可以看到eclipse會在後臺開始去自動下載並新增以上所有專案依賴的jar包。
我們現在主要引入的是httpclient、httpcore以及testNG三個依賴包:
- httpclient是一個高效的、最新的、功能豐富的支援 HTTP 協議的客戶端程式設計工具包,我們用它來建立和管理請求;
- HttpCore是對HTTP協議的基礎封裝的一套元件,我們測試介面過程中會用到其中的底層網路方法;
- testNG是一套單元測試框架,為我們提供測試入口和測試組織。
後續如果用到其他依賴包我們再去新增。
下一篇我們就開始寫第一個get方法請求的介面自動化測試用例。