1. 程式人生 > >接口測試總結

接口測試總結

位置 獲取 訪問 功能測試 agent info tran sig 刪除

閱讀目錄

1. 請求模型

2. 請求結果

3. 接口的請求會發向哪裏

4. 復雜一點的接口,RESTful

5. 接口測試

6. 測試用例

序章

說起接口測試,網上有很多例子,但是當初做為新手的我來說,看了不不知道他們說的什麽,覺得接口測試,好高大上。認為學會了接口測試就能屌絲逆襲,走上人生巔峰,迎娶白富美。

因此學了點開發知識後,發現接口測試其實都是人們玩的名詞罷了。接口測試,真心很簡單。它只不過是數據傳遞是一種表現而已。

1. 請求模型

看下圖中“A”線,可以理解為接口就是一個電燈的開關,它在接口裏面給你提供了一個參數,參數的值一個是“開”,一個是“關”。

技術分享圖片

說起來,怎麽才能讓燈亮?一個燈頭接兩根線,一根線接火線,一根線接零線這時燈就亮了。反之,不接零線、火線燈就滅了。

其實接口呢,就把這些復雜的操作簡化了,讓你看到的就只有一個開關,而你來操作這個開關就好了。我們做接口測試也只需要測試這個開關就完成任務了,接口測試就是這麽簡單。

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

2. 請求結構

看到這裏我們大致就明白了接口測試是怎麽一回事了。接下來需要理解一下HTTP的URL是怎麽組成為一個接口的。如圖:

技術分享圖片

一個URL就是一個接口:接口大致會分為一下幾個部分:

  1. 請求協議:

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

  3. 請求端口:如果不填端口,默認是80,否則需要填寫端口號

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

  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”測試工具。

技術分享圖片

技術分享圖片

3. 接口的請求會發向哪裏?

我們可以看看這樣一個接口,用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了。所以測試接口要看看它到底生效了沒有,也就是說,燈真的開了嗎?),我們做接口測試,需要開發提供接口文檔。最重要的有一下幾點:

  1. 被測接口的地址
  2. 接口參數,以及各個參數的說明
  3. 必要的http頭與http體 ( http頭是可以自定義的,可以用來校驗是否是自己人訪問 )
  4. 接口返回什麽值,以及各個返回值的說明
  5. 接口是幹什麽的

確定了這些,才能做好接口測試。好的接口文檔如下:

技術分享圖片

4. 復雜一點的接口,RESTful

當年聽到RESTful時,覺得這又是什麽新技術,肯定很高大上,其實RESTful它只是一種設計風格。一個接口用不同的請求方式,來做不同的事情。最典型的就是下面這張圖了。

我們測試的RESTful接口,就是復雜一點的開關。比如下圖B線的用戶接口:

技術分享圖片

一個用戶接口可以通過以下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",查看返回結果

技術分享圖片

接口測試就是這麽簡單

6. 接口測試用例

接口測試用例的設計就沒什麽好講的了,與功能測試一樣設計就好了。我是用Excel來編寫的,主要是為了方便管理,只要寫的幹凈,讓人看的很舒服就好了。我自己設計的用例是這樣的:

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

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

技術分享圖片

整個接口測試就這麽多了。接口測試其實很簡單,在功能測試眼裏,接口測試那麽高大上,其實不也過如此了。

http://www.cnblogs.com/yyhh/p/6083159.html

接口測試總結