看下圖中「A」線,能夠理解爲接口就是一個電燈的開關,它在接口裏面給你提供了一個參數,參數的值一個是「開」,一個是「關」。html
提及來,怎麼才能讓燈亮?一個燈頭接兩根線,一根線接火線,一根線接零線這時燈就亮了。反之,不接零線、火線燈就滅了。java
其實接口呢,就把這些複雜的操做簡化了,讓你看到的就只有一個開關,而你來操做這個開關就行了。咱們作接口測試也只須要測試這個開關就完成任務了,接口測試就是這麼簡單。python
看到這裏咱們大體就明白了接口測試是怎麼一回事了。接下來須要理解一下HTTP的URL是怎麼組成爲一個接口的。如圖:sql
一個URL就是一個接口:接口大體會分爲一下幾個部分:json
請求協議:api
請求IP:就是指提供接口的系統所部署的服務器地址瀏覽器
請求端口:若是不填端口,默認是80,不然須要填寫端口號安全
接口路徑:指系統提供的接口在什麼位置bash
接口參數:參數在接口路徑後,用「?」來表示路徑地址完了,剩下的都是參數了,用「&」來區分參數個數,服務器
以下示例:
假設要操做這個燈,須要用戶密碼,則能夠增長新的參數」use」、」pwd」,用」&」來隔開。能夠看到這個示例有3個參數:
接口HTTP參數【url看不見等隱藏參數】
http請求方式
GET --- 經過請求URI獲得資源 POST --- 用於添加新的內容 PUT --- 用於修改某個內容 DELETE --- 刪除某個內容 CONNECT --- 用於代理進行傳輸,如使用SSL OPTIONS --- 詢問能夠執行哪些方法 PATCH --- 部分文檔更改 PROPFIND (wedav) --- 查看屬性 PROPPATCH (wedav) --- 設置屬性 MKCOL (wedav) --- 建立集合(文件夾) COPY (wedav) --- 拷貝 MOVE (wedav) --- 移動 LOCK (wedav) --- 加鎖 UNLOCK (wedav) --- 解鎖 TRACE --- 用於遠程診斷服務器 HEAD --- 相似於GET, 可是不返回body信息,用於檢查對象是否存在,以及獲得對象的元數據
http請求頭
請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭能夠聲明瀏覽器所用的語言,請求正文的長度。示例:
Accept:image/gif.image/jpeg./ Accept-Language:zh-cn Connection:Keep-Alive Host:localhost User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0) Accept-Encoding:gzip,deflate.
http請求體
請求體就是請求等正文了,能夠有不少種請求體。
看到上面的請求結構,就能接口測試了,只須要修改接口的參數,就能夠像功能測試同樣測了。能夠用功能測試設計用例的方法來設計接口測試的用例。可使用各類測試用具輔助測試,下圖爲「postman」測試工具。
咱們能夠看看這樣一個接口,用Java的Servlet怎麼來實現
package com.yy.test; import net.sf.json.JSONObject; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; // 接口的名稱與路徑,urlPatterns中的/light,就是說在輸入地址與ip後,定義的接口名字http://127.0.0.1:8080/light @WebServlet(name = "light", urlPatterns = "/light") public class light extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 獲取opt的值 String opt = request.getParameter("opt"); // 新建返回json的對象 JSONObject json = new JSONObject(); // 判斷opt有沒有值 if (null != opt) { // 定義返回的請求頭,類型是json,編碼是utf-8 response.setContentType("application/json; charset=UTF-8"); // 定義返回的對象,用它來將json輸出 PrintWriter out = response.getWriter(); // 判斷opt的值是否是open if ("open".equals(opt)) { json.put("msg", "開燈啦!"); out.println(json); } // 判斷opt的值是否是close else if ("close".equals(opt)) { json.put("msg", "關燈啦!"); out.println(json); } } } }
上面的代碼大體作了以下幾個操做:
判斷獲取的opt的值
若是是」close」就返回」關燈啦!」
看到上面的代碼,就能發現,咱們將opt的值,傳進」http://127.0.0.1:8080/light「這個接口中,當你拿到你想要的值,想作什麼均可以了,對吧。我這邊的代碼就是簡單的進行了返回,當你訪問了我「開燈」的接口,我就直接告訴你「開燈了」 ( 其實我什麼都沒作,這已經算是一個BUG了。因此測試接口要看看它到底生效了沒有,也就是說,燈真的開了嗎?),咱們作接口測試,須要開發提供接口文檔。最重要的有一下幾點:
被測接口的地址
肯定了這些,才能作好接口測試。好的接口文檔以下:
一個用戶接口能夠經過如下4種不一樣方式的請求,來作不一樣的事情:
你徹底能夠像「燈」的那個例子,用GET請求來傳遞不一樣的參數來實現,可是這樣若是接口多了,就會很混亂,很難管理。
這時,咱們須要一種規則:
這樣子的規則,咱們稱它爲「RESTful」標準。
下圖是RESTful的狀態碼返回
前面的搞清楚了,接口測試就簡單了,其實就是幾個步驟。
這個是正常的一套流程,異常的狀況,就不用我多說來吧。好比參數不傳值呀,傳的值不正確呀,明明要求用"GET"請求發送,偏要用"POST"請求發送呀。等等有不少異常狀況,通常懂功能測試都能想到不少的異常狀況,這裏再也不舉例來。
下面我以百度翻譯的接口爲例子:
請求地址:http://fanyi.baidu.com/v2transapi
請求方式:POST
請求參數:
from — 哪國語言
to --- 翻譯成哪國語言 query --- 翻譯都內容
我使用Python語言來進行接口測試,使用」requests」庫來編寫代碼比較簡答易懂,若是沒有安裝」requests」庫,能夠打開cmd,輸入」pip install requests」來安裝
import requests # 接口的url url = "http://fanyi.baidu.com/v2transapi" # 接口的參數 params = { "from":"en", "to":"zh", "query": "test" } # 發送接口 r = requests.request("post", url, params=params) # 打印返回結果 print(r.text) # 其實到上面就已經完了,由於百度不是我本身寫的接口,爲了讓結果看的更加清楚一點,我取來翻譯的字段 import json d = json.loads(r.text) print(d['liju_result']['tag']) 返回結果 ['試驗', '測驗', '考驗', '化驗', '考查', '受試驗', '受測驗', '受考驗', '測得結果'] 能夠試着將"query"的參數改爲"student",返回結果也隨之改變 import requests url = "http://fanyi.baidu.com/v2transapi" params = { "from":"en", "to":"zh", "query": "student" # 我改了這裏 } r = requests.request("post", url, params=params) import json d = json.loads(r.text) print(d['liju_result']['tag']) 返回結果 ['中學生', '學生', '大學生', '研究者', '學者']
固然,要是不懂代碼,也可使用工具進行測試,只要記住填寫的幾個點,就能夠作好接口測試,下圖是使用」postman」進行測試:
接口測試就是這麼簡單
接口測試用例的設計就沒什麼好講的了,與功能測試同樣設計就行了。我是用Excel來編寫的,主要是爲了方便管理,只要寫的乾淨,讓人看的很舒服就行了。我本身設計的用例是這樣的:
這樣的用例比較好管理,如圖: