介面測試總結分享(http與rpc)
介面測試是測試系統元件間介面的一種測試。介面測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的互動點。測試的重點是要檢查資料的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等。
一、瞭解一下HTTP與RPC
1. HTTP(HyperText Transfer Protocol)
說明:超文字傳輸協議,是網際網路上應用最為廣泛的一種網路協議。
優點:就是簡單、直接、開發方便,利用現成的http協議進行傳輸。
流程圖:
2. RPC(Remote Procedure Call)
說明:遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。
優點:提升系統可擴充套件性,傳輸效率更快,安全性更高。
流程圖:
二、HTTP介面測試
常見請求型別: post(增)、get(查)、put(改)、delete(刪)等。
1)get型介面
格式: 請求數引數寫在網址後面,用"?"連線,多個引數之間用"&"連線。如:https://api.douban.com/v2/book/search?q='',這是一個豆瓣查詢圖書資訊的開發api,q='',單引號裡就是查詢的引數,
如查詢《小王子》這本書的資訊,則q='小王子',使用postman工具來試驗一下,如下圖:
場景: get型介面用於獲取資訊,多用於查詢資料,如列表查詢功能,點選查詢按鈕就呼叫一個get介面,然後把資訊返回出來。
特點: 請求資料量小,引數暴露於url地址中,故存在安全隱患。
2)post型介面
說明: 向指定資源位置提交資料(如提交表單、上傳檔案)來進行請求,post請求可能會導致新資源的建立
場景: 如註冊、上傳、發帖等功能,如使用者在豆瓣網站對某本書進行收藏、寫筆記、發表評論
特點: 請求資料量大,安全性高
如豆瓣的發表評論的開放api,見下圖:
3)put型介面
說明: put請求用於向指定資源位置上傳最新內容
場景: 如使用者在豆瓣網站修改對某本書的收藏、修改某篇筆記或修改評論
如豆瓣的修改評論的開放api,見下圖:
4)delete型介面
說明: 請求伺服器刪除請求裡url所標識的資源
場景: 如使用者在豆瓣網站取消對某本書的收藏、刪除某篇筆記或刪除評論
如豆瓣的刪除評論的開放api,見下圖:
----- 此部分摘抄自:https://blog.csdn.net/github_36032947/article/details/78222654
三、RPC介面測試
1)RPC介面其應用框架比較多,各有特色,廣泛使用的有RMI、Hessian、Dubbo等,這次我們主要介紹一下Dubbo框架。
Dubbo是一個高效能、輕量級的RPC框架。主要提供三個關鍵功能,包括基於介面的遠端呼叫、容錯和負載平衡、以及自動服務註冊和發現。
2)流程圖:
3)測試環境搭建:
a. pom.xml引入相關service應用jar依賴(示例:)
<dependencies> <dependency> <groupId>com.test.unicorn</groupId> <artifactId>base-service-core</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> <scope>test</scope> </dependency> <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>1.8</version> <scope>system</scope> <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath> </dependency> </dependencies>
b. dubbo服務spring配置(示例:)
<!-- 具體的實現bean --> <bean id="demoServer" class="com.dub.provider.impl.DemoServerImpl" /> <!-- 提供方應用資訊 --> <dubbo:application name="xs_provider" /> <!-- zookeeper伺服器地址 --> <dubbo:registry address="zookeeper://localhost:2181" /> <!-- 用dubbo協議暴露服務 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 宣告需要暴露的服務介面 --> <dubbo:service interface="com.dub.provider.DemoServer" ref="demoServer" /> <!-- 引入資源配置 --> <import resource="spring-resource.xml"/> <!-- 在工程resources下新增資源配置檔案--> <dubbo:application name="hjy_consumer" /> <dubbo:reference interface="com.dub.provider.DemoServer" id="demoServer" url="dubbo://localhost:20880" timeout="10000" />
c. 基於TESTNG資料驅動編寫方法(示例:)
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:/spring.xml"}) @Configuration //++++++++++++繼承方法++++++++++++ public class BaseTestNGTest extends AbstractTestNGSpringContextTests { //++++++++++++資料收集++++++++++++ @DataProvider(name = "testdata") public Object[][] dataprovide()throws IOException{ System.out.println("dataprovide"); // return new Object[][]{{2000020013,2},{2001000138,0},{2001000139,2}}; Object[][] testData =ExcelHandle.readXlsx(excel, "sheet2"); return testData; } //++++++++++++資料傳遞++++++++++++ @Test(dataProvider="testdata") public void test_case_1(HashMap<String, String> map) throws Exception { operatorUserId=Integer.valueOf(map.get("userId")); exceptedvalue=Integer.valueOf(map.get("excepted")); //++++++++++++實際值++++++++++++ Integer actual_value=billService.getUserEmailNameCount(operatorUserId); //++++++++++++預期值++++++++++++ Integer excepted_value=get_excepted_value(operatorUserId); //+++++++++++++驗證+++++++++++++ Assert.assertEquals(actual_value,exceptedvalue); } }
四、介面測試用例設計
五、測試思路總結
1)檢視介面文件,瞭解介面功能及其業務邏輯
2)確定介面呼叫協議(http、rpc等)
3)確定請求型別(post、get等)
4)確定請求地址/呼叫方法
5)組裝請求報文 ☆☆☆☆☆(參考測試設計)
6)選用適用工具或編寫指令碼測試
7)檢查返回碼,及其描述
8)檢查返回值,及其對應資料庫資料變化
----- 以上僅為個人測試經驗,當然介面測試不僅僅如此,更多還需要大家自己去發掘,同時歡迎各路大神指點。