您當前的位置:首頁 > 收藏

介面測試其實很簡單,手把手教你入門

作者:由 知乎使用者Esopl4 發表于 收藏時間:2022-04-11

請求模型

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

介面測試其實很簡單,手把手教你入門

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

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

當你訪問“

http://

127。0。0。1:8080/light?

opt=open

”,讓零線、火線連通,此時燈亮。

當你訪問“

http://

127。0。0。1:8080/light?

opt=close

”,讓零線、火線斷開,此時燈滅。

請求結構

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

介面測試其實很簡單,手把手教你入門

一個URL就是一個介面:介面大致會分為一下幾個部分:

請求協議:

http — 普通的http請求

https — 加密的http請求,傳輸資料更加安全

ftp — 檔案傳輸協議,主要用來傳輸檔案

請求IP:

就是指提供介面的系統所部署的伺服器地址

請求埠:

如果不填埠,預設是80,否則需要填寫埠號

介面路徑:

指系統提供的介面在什麼位置

介面引數:

引數在介面路徑後,用“?”來表示路徑地址完了,剩下的都是引數了,用“&”來區分引數個數,

如下示例:

http://

127。0。0。1:8080/light?

opt=open&use=yy&pwd=123456

假設要操作這個燈,需要使用者密碼,則可以增加新的引數”use”、”pwd”,用”&”來隔開。可以看到這個示例有3個引數:

“opt”:”open”

“use”:”yy”

“pwd”:”123456”

介面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);

}

}

}

}

上面的程式碼大致做了如下幾個操作:

獲取opt的值

判斷獲取的opt的值

如果是”open”就返回”開燈!”如果是”close”就返回”關燈啦!”

看到上面的程式碼,就能發現,我們將opt的值,傳進”

http://

127。0。0。1:8080/light

“這個介面中,當你拿到你想要的值,想做什麼都可以了。我這邊的程式碼就是簡單的進行了返回,當你訪問了我“開燈”的介面,我就直接告訴你“開燈了” ( 其實我什麼都沒做,這已經算是一個BUG了。所以測試介面要看看它到底生效了沒有,也就是說,燈真的開了嗎?),我們做介面測試,需要開發提供介面文件。最重要的有以下幾點:

被測介面的地址

介面引數,以及各個引數的說明

必要的http頭與http體 ( http頭是可以自定義的,可以用來校驗是否是自己人訪問 )

介面返回什麼值,以及各個返回值的說明

介面是幹什麼的

確定了這些,才能做好介面測試。好的介面文件如下:

介面測試其實很簡單,手把手教你入門

複雜一點的介面:RESTful

介面測試其實很簡單,手把手教你入門

一個使用者介面可以透過以下4種不同方式的請求,來做不同的事情:

獲取使用者資訊

建立使用者

修改使用者

刪除使用者

你可以像“燈”的那個例子,用GET請求來傳遞不同的引數來實現,但是這樣如果介面多了,就會很混亂,很難管理。

這時,我們需要一種規則:

當用“GET”方式時,只用來獲取資料,成功了返回http狀態碼200

當用“POST”方式時,只用來建立資料,成功了返回http狀態碼201

當用“PUT”方式時,只用來修改資料,成功了返回http狀態碼203

當用“DELETE”方式時,只用來刪除資料,成功了返回http狀態碼204

當請求傳送失敗,返回http狀態碼400

這樣子的規則,我們稱它為“RESTful”標準。

下圖是RESTful的狀態碼返回

介面測試其實很簡單,手把手教你入門

介面測試

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

拿到介面的url地址

檢視介面是用什麼方式傳送

新增請求頭,請求體

傳送檢視返回結果,校驗返回結果是否正確

這個是正常的一套流程,異常的情況,就不用我多說來吧。比如引數不傳值呀,傳的值不正確呀,明明要求用“GET”請求傳送,偏要用“POST”請求傳送呀。等等有很多異常情況,一般懂功能測試都能想到很多的異常情況,這裡不再舉例來。

下面以百度翻譯的介面為例子:

請求地址:

http://

fanyi。baidu。com/v2trans

api

請求方式: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”進行測試:

輸入傳送方式”POST”

輸入測試地址”

http://

fanyi。baidu。com/v2trans

api

輸入下圖紅框引數

點選”send”,檢視返回結果

介面測試其實很簡單,手把手教你入門

獲取更多課程資訊、技術乾貨、學員筆記,關注牛鷺學院官方公眾號:牛鷺軟體測試訓練營

標簽: 介面  http  請求  OPT  json