🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快
Post接口自動化測試用例
Post方式的接口是上傳接口,需要對接口頭部進行封裝,所以沒有辦法在瀏覽器下直接調用,但是可以用Curl命令的-d參數傳遞接口需要的參數。當然我們還以眾籌網的登錄接口為例,講解post方式接口的自動化測試用例。
(1)接口文檔
.登錄(POST)
URL:http://api.zhongchou.cn/user/login
參數:
- identity,用戶名、用戶手機、用戶郵箱,三者之一
- password,用戶密碼
返回:
- errno,0:表示成功,非0:表示失敗
- User基礎數據結構
- token,成功會返回32位token字符串,失敗會返回空字符串
這個接口文檔很清楚,就是傳遞用戶名和密碼進行登錄,登錄后會返回user基本數據結構和Token。
(2)Curl命令執行
分析了接口文檔,我們需要在終端下執行接口,然后才能根據接口的返回值來編寫對應的接口測試用例。
在終端下執行命令:
[root@n028 api]# curl -d ‘identity=1838905&password=a**0’ http://api.zhongchou.cn/user/login?v=1
其中的identity為眾籌網的用戶名,password為密碼,V=1是因為這個接口是第一版本的。執行結果如圖所示:
(3)Curl返回值查看
由于post方式無法用瀏覽器直接調用,返回結果是編碼后的json字符串,不方便我們查看結果。所以我們要借助于chrome的插件。
打開chrome瀏覽器->右擊瀏覽器,選擇“審查元素”->在瀏覽器下部選擇“Console”選項卡。在打開的欄目下的“>”后輸入dir().然后將剛剛終端Curl返回的結果拷貝到這個函數中,回車即可解析結果。如圖所示:
(4)PHP調用Post方式接口
PHP調用Post接口和Get方式有所不同,一般用以下方式調用,而且是固定的:
public function testlogin(){$url='http://api.zhongchou.cn/user/login?v=1';$post_params=array('identity'=>'183****8905','password'=>'a0****0');$ch = curl_init();//初始化curlcurl_setopt($ch, CURLOPT_URL,$url);//抓取指定網頁curl_setopt($ch, CURLOPT_HEADER, 0);//設置headercurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上curl_setopt($ch, CURLOPT_POST, 1);//post提交方式curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);$data = curl_exec($ch);//運行curlcurl_close($ch);echo $data;}
然后執行代碼,就可以看到如圖所示的輸出結果:
如到Get方式,這個輸出結果同樣是經過編碼后的json字符串,我們也需要對其進行json_decode()解碼一下,然后再輸出結果。所以增加以下兩行代碼:
此時的輸出結果圖所示,簡單清晰了許多。
(5)PHP編寫Post接口自動化測試用例
現在PHP能調用post方式的接口了,可是沒有添加自動判斷執行結果的腳本,不算是一個真正的測試用例。接下來我們添加上對返回值的assert語句,使之成為一個完整的自動化測試用例。
完整的測試用例如下:
public function testlogin(){$url='http://api.zhongchou.cn/user/login?v=1';$post_params=array('identity'=>'183****8905','password'=>'a0******0');$ch = curl_init();//初始化curlcurl_setopt($ch, CURLOPT_URL,$url);//抓取指定網頁curl_setopt($ch, CURLOPT_HEADER, 0);//設置headercurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上curl_setopt($ch, CURLOPT_POST, 1);//post提交方式curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);$res = curl_exec($ch);//運行curlcurl_close($ch);$data=json_decode($res,true);//print_r($data);if(is_null($data)==false){if($data['errno']=='0'){$this->assertEquals('0',$data['errno']);//判斷errno是否為0,此步為拋出執行通過$index =strpos($data['data']['name'],'8905');$this->assertnotEquals(-1,$index);//判斷結果是否包含關鍵字print('接口/user/login:登錄接口------------------OK'."\n");}else{$this->assertEquals('0',$data['errno']);//拋出執行失敗print("接口/user/login:登錄接口---------------Failure!"."\n".$res."\n");}}}
Assert判斷語句和get相似,先判斷返回errno,然后判斷返回的name是不是我們剛剛登錄的賬號。當然如果返回值不是我們預期的,也要使測試用例執行失敗。執行結果如圖所示,同樣如果要看接口返回值 ,注銷掉//print_r($data);
測試用例的覆蓋
上面我們講述了get和post兩種方式的接口自動化測試用例的編寫,通過運行我們發現還是挺簡單的嘛。不過上面兩種測試用例只是接口的一個正常的測試用例,而對于一個接口的測試用例覆蓋是非常多的。下面我們就常用的接口測試用例覆蓋方法列舉一下:
(1)必需參數覆蓋。對于接口的參數,接口文檔一般都會說明哪些兒是必需的,哪兒是非必需的。對于必需的參數,一定要測試傳參數和不傳參數接口是否報錯?
(2)必需的參數各種情況覆蓋。傳非法的字符,特殊的字符,空值,超過邊界的參數是否報錯?錯誤信息是否正確?
(3)非必需參數覆蓋。一般接口對于非必需參數都不會做非正常性傳值的判斷,所以要測試合法的參數值 ,接口返回的內容是否正確。如果有接口文檔說明對非必需參數做了非正常的驗證的話,也要對其進行驗證。
(4)參數的組合覆蓋。有些兒參數需要相互配合著才起作用,如“offset”和“count”組合起來進行翻頁,這個時候要組合起來進行測試。
(5)業務邏輯相關的覆蓋。有些兒接口與業務邏輯關聯密切,單獨從接口角度測試,可能會遺漏掉一些兒因業務邏輯而產生的bug。所以如果和業務邏輯相關,也要考慮到業務邏輯相關的測試用例。
其實接口的測試用例差不多也就這些兒情況,也許有特殊的接口,到時候和產品,開發人員做好溝通,盡量先從接口層面保證質量。這樣再從測試接口的應用層的時候,就可以少很多工作量,只注重樣式和各個接口調用的配合就可以了。
本章小結
本章講述了常用的Get和Post方式Curl命令調用,瀏覽器調用和查看接口返回值的方法,以及對應的接口自動化用例的編寫方法。最后還介紹了接口測試用例的覆蓋方法,通過本章的學習我們可以參照接口文檔,寫出這個接口的所有自動化測試用例。下章節我們將講述對測試架構的規劃及測試用例的組織。
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。