接口測試總結

 摘自猴子請來得救兵

請求模型

​ 看下圖中「A」線,能夠理解爲接口就是一個電燈的開關,它在接口裏面給你提供了一個參數,參數的值一個是「開」,一個是「關」。html

​ 提及來,怎麼才能讓燈亮?一個燈頭接兩根線,一根線接火線,一根線接零線這時燈就亮了。反之,不接零線、火線燈就滅了。java

​ 其實接口呢,就把這些複雜的操做簡化了,讓你看到的就只有一個開關,而你來操做這個開關就行了。咱們作接口測試也只須要測試這個開關就完成任務了,接口測試就是這麼簡單。python

  1. 當你訪問「http://127.0.0.1:8080/light?opt=open」,讓零線、火線連通,此時燈亮。
  2. 當你訪問「http://127.0.0.1:8080/light?opt=close」,讓零線、火線斷開,此時燈滅。
 

請求結構

​ 看到這裏咱們大體就明白了接口測試是怎麼一回事了。接下來須要理解一下HTTP的URL是怎麼組成爲一個接口的。如圖:sql

  1. 一個URL就是一個接口:接口大體會分爲一下幾個部分:json

    1. 請求協議:api

      • http — 普通的http請求
      • https — 加密的http請求,傳輸數據更加安全
      • ftp — 文件傳輸協議,主要用來傳輸文件
    2. 請求IP:就是指提供接口的系統所部署的服務器地址瀏覽器

    3. 請求端口:若是不填端口,默認是80,不然須要填寫端口號安全

    4. 接口路徑:指系統提供的接口在什麼位置bash

    5. 接口參數:參數在接口路徑後,用「?」來表示路徑地址完了,剩下的都是參數了,用「&」來區分參數個數,服務器

      以下示例:

      http://127.0.0.1:8080/light?opt=open&use=yy&pwd=123456

      假設要操做這個燈,須要用戶密碼,則能夠增長新的參數」use」、」pwd」,用」&」來隔開。能夠看到這個示例有3個參數:

      • 「opt」:」open」
      • 「use」:」yy」
      • 「pwd」:」123456」
    6. 接口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請求體

        請求體就是請求等正文了,能夠有不少種請求體。

        • json格式
        • xml格式
        • html格式
        • 二進制格式( 多數用於圖片 )
        • 字符串格式

​ 看到上面的請求結構,就能接口測試了,只須要修改接口的參數,就能夠像功能測試同樣測了。能夠用功能測試設計用例的方法來設計接口測試的用例。可使用各類測試用具輔助測試,下圖爲「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); } } } } 

上面的代碼大體作了以下幾個操做:

  1. 獲取opt的值
  2. 判斷獲取的opt的值

    • 若是是」open」就返回」開燈啦!」
    • 若是是」close」就返回」關燈啦!」

      看到上面的代碼,就能發現,咱們將opt的值,傳進」http://127.0.0.1:8080/light「這個接口中,當你拿到你想要的值,想作什麼均可以了,對吧。我這邊的代碼就是簡單的進行了返回,當你訪問了我「開燈」的接口,我就直接告訴你「開燈了」 ( 其實我什麼都沒作,這已經算是一個BUG了。因此測試接口要看看它到底生效了沒有,也就是說,燈真的開了嗎?),咱們作接口測試,須要開發提供接口文檔。最重要的有一下幾點:

  3. 被測接口的地址

  4. 接口參數,以及各個參數的說明
  5. 必要的http頭與http體 ( http頭是能夠自定義的,能夠用來校驗是不是本身人訪問 )
  6. 接口返回什麼值,以及各個返回值的說明
  7. 接口是幹什麼的

肯定了這些,才能作好接口測試。好的接口文檔以下:

 

複雜一點的接口,RESTful

一個用戶接口能夠經過如下4種不一樣方式的請求,來作不一樣的事情:

  1. 獲取用戶信息
  2. 建立用戶
  3. 修改用戶
  4. 刪除用戶

你徹底能夠像「燈」的那個例子,用GET請求來傳遞不一樣的參數來實現,可是這樣若是接口多了,就會很混亂,很難管理。

這時,咱們須要一種規則:

  1. 當用「GET」方式時,只用來獲取數據,成功了返回http狀態碼200
  2. 當用「POST」方式時,只用來建立數據,成功了返回http狀態碼201
  3. 當用「PUT」方式時,只用來修改數據,成功了返回http狀態碼203
  4. 當用「DELETE」方式時,只用來刪除數據,成功了返回http狀態碼204
  5. 當請求發送失敗,返回http狀態碼400

這樣子的規則,咱們稱它爲「RESTful」標準。

下圖是RESTful的狀態碼返回

5. 接口測試

前面的搞清楚了,接口測試就簡單了,其實就是幾個步驟。

  1. 拿到接口的url地址
  2. 查看接口是用什麼方式發送
  3. 添加請求頭,請求體
  4. 發送查看返回結果,校驗返回結果是否正確

這個是正常的一套流程,異常的狀況,就不用我多說來吧。好比參數不傳值呀,傳的值不正確呀,明明要求用"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」進行測試:

  1. 輸入發送方式」POST」
  2. 輸入測試地址」http://fanyi.baidu.com/v2transapi
  3. 輸入下圖紅框參數
  4. 點擊」send」,查看返回結果

 接口測試就是這麼簡單

 

接口測試用例

接口測試用例的設計就沒什麼好講的了,與功能測試同樣設計就行了。我是用Excel來編寫的,主要是爲了方便管理,只要寫的乾淨,讓人看的很舒服就行了。我本身設計的用例是這樣的:

  1. 一個模塊對應一個Excel表
  2. 一條接口對應一張sheet表
  3. 表中一行對應一條測試用例
  4. 在開始要註明測試時須要的sql,以下圖開始我會建立用戶,用完了我會刪除

這樣的用例比較好管理,如圖:

相關文章
相關標籤/搜索