PostMan接口測試(很全面的接口測試教程)


一:理論部分

1. 前言

在前后端分離開發時,后端工作人員完成系統接口開發后,需要與前端人員對接,測試調試接口,驗證接口的正確性可用性。而這要求前端開發進度和后端進度保持基本一致,任何一方的進度跟不上,都無法及時完成功能模塊的測試。

​ 做為后端開發人員,要求獨立開發完成某個接口后,開發人員自己需要先測試通過后再提交給測試人員進行測試,否則會出現到測試人員哪里業務流程根本就走不通,或者BUG會過多的情況等。

​ 市場上有很多優秀的,完善的接口測試工具,比如SoapUI,Postman,JMeter、yapi等,能夠高效的幫助后端開發人員獨立進行接口測試。這里使用Postman接口測試工具,分別介紹如何對GET請求和POST請求進行接口測試。

2. Postman簡介

Postman是一個接口測試工具,在做接口測試的時候,Postman相當於一個客戶端,它可以模擬用戶發起的各類HTTP請求,將請求數據發送至服務端,獲取對應的響應結果,

從而驗證響應中的結果數據是否和預期值相匹配;並確保開發人員能夠及時處理接口中的bug,進而保證產品上線之后的穩定性和安全性。

它主要是用來模擬各種HTTP請求的(如:get/post/delete/put..等等),Postman與瀏覽器的區別在於有的瀏覽器不能輸出Json格式,而Postman更直觀接口返回的結果。

3.Postman界面圖

各個功能區的使用如下:

l 快捷區: 快捷區提供常用的操作入口,包括運行收藏夾的一組測試數據,導入別人共享的收藏夾測試數據(Import from file, Import from folder, Import from link等),或新建請求、收藏夾、環境變量等。

l 側邊欄: 包括搜索欄, Request 請求的歷史記錄和收藏夾管理。

l 功能區: Request 請求設置,查看 Response 響應結果和測試結果,可以將請求保存到收藏夾。

l 設置區:設置和管理環境變量和全局變量。

二:工具應用

1. 新建接口

1.1 創建Collection集合

在剛開始一個項目時,為了后續便於組織和管理,把同屬該項目的多個 API,放在一組里。所以要先去新建一個 Collection: New -> Collection

1.2 創建請求

1.3 設置HTTP請求

設置 HTTP 的 Method 方法和輸入 api 的地址以及請求參數或請求體

以下為獲取微信公眾號為案例所設計的HTTP請求

GET是請求方法,請求方法是HTTP請求的必要要素,常見的請求方法有GET和POST兩種。API地址一般為URL地址。如果是請求URL中的入參,會在Params列出參數名稱及參數取值,方便我們輕松的修改各入參的值。如有需要,還應該設置HTTP請求Headers部分。

如果是POST請求,需要將請求方法設置為POST,一般說來POST請求是有請求體的,固需要在Body部分中編寫正確的請求body內容和Content-Type的值(在Headers中進行設置)

1.3.1 GET和POST的區別

l GET 使用URL 或Cookie 傳參,而POST將數據放在Body 中。

l GET的URL 在長度上會有限制,而POST沒有。

l POST比GET相對安全,因為在地址欄不可見。

l 一般POST請求用來獲取數據,POST請求用來發送數據。

對於上面的區別,其實第一點POST也可以將數據放在URL里,GET請求其實也沒有長度限制,POST請求看起來是隱式的,但是可以通過抓包拿到參數。

1.4 發送HTTP請求

點擊上圖中藍色Send圖標即可發送請求,驗證請求結果是否正確。下圖是對應的響應結果,包含Body和Headers兩個部分,Body即響應體正文,Headers即為響應頭信息,響應頭不包含響應狀態碼和狀態信息部分。

響應體包含三種查看模式,分別為:Pretty默認模式、Raw原始數據格式,Preview預覽模式(此模式針對HTML頁面效果很好)。

1.5 關聯技術

關鍵技術是將前一個請求的響應結果保存到變量中,再將此變量在后續請求中進行引用。

1.5.1 保存前一個請求的響應數據

因為Tests模塊是后置模式,可對響應進行處理。我們可以通過賦值方式把響應結果保存到變量中,參考代碼如下:

1.5.2 對后一個請求進行參數化

因前面將access_token的值保存到了環境變量中,所以在該請求中,只需要進行參數引用即可。

1.5.3 關聯的高級操作

利用Send a request實現前置步驟,例如:客服發消息模塊,前置步驟是獲取access_token,我們可在Pre-request Script前置步驟中發送請求,將該請求的結果保存到環境變量accesstoken中,然后在主請求中引用該環境變量即可。

1.5.4 附:前置步驟中發送POST請求

POST請求相比GET請求要復雜一點,因為其需要加入請求Header和請求Body,以下是Pre-request Script在發送POST請求的案例:

  • 構造一個登錄請求
const loginRequest = {
	url: 'http://115.28.108.130:5000/api/user/login/',
	method: "POST",
    body: {
        mode: 'urlencoded',  // 模式為表單url編碼模式
        urlencoded: 'name=張三&password=123456'
    }
};
  • 發送請求
pm.sendRequest(loginRequest, function (err, res) {
	console.log(err ? err : res.text());
});

發送JSON格式請求與發送POST請求類似,以下采用了raw模式發送請求體。

  • 構造一個注冊請求
const regRequest = {
    url: 'http://115.28.108.130:5000/api/user/reg/',
    method: 'POST',
    header: 'Content-Type: application/json',  //注意要在Header中聲明內容使用的類型
    body: {
        mode: 'raw',  // 使用raw(原始)格式
        raw: JSON.stringify({ name: '小小', password: '123456' }) //要將JSON對象轉為文本發送
    }
};
  • 發送請求
pm.sendRequest(regRequest, function (err, res) {
	console.log(err ? err : res.json());  // 響應為JSON格式可以使用res.json()獲取到JSON對象
});

因為HTTP請求都支持raw格式,我們只要能夠獲取請求的raw格式,便可采用raw模式發送任意類型的請求體了。

2.接口數據用例

2.1 數據用例設計

Postman支持的是csv文件作為數據用例,數據用例包含三大部分,分別為:用例標題(title),入參(grant_type,appid,secret),期望結果(expected)

title grant_type appid secret expected
正確的用例 client_credential wx508a5cacbbfc1141 fa4fc7f17ddead12d7cdcd994e7d2543 7200
grant_type錯誤 client_credentia wx508a5cacbbfc1141 fa4fc7f17ddead12d7cdcd994e7d2543 40002
appid錯誤 client_credential wx508a5cacbbfc114 fa4fc7f17ddead12d7cdcd994e7d2543 40013
secret錯誤h client_credential wx508a5cacbbfc1141 fa4fc7f17ddead12d7cdcd994e7d254 40001

我們可以根據黑盒用例設計方法如等價類、邊界值、判定表、正交實驗法對入參進行用例設計,得到各種不同的測試場景(取值組合)

2.2 數據用例參數化

前面我們在csv文件中編寫好了數據用例,且保證第一行為參數的名稱。將請求中入參值依次進行替換,在Postman中參數的編寫規格為兩個花括號,如:{{appid}}

2.3 設置迭代器

要讀取所有的測試用例,需要設置迭代器讓其循環讀取那些測試數據。Postman中設置迭代器需在Run中完成,請看【4.Runner執行測試】

3.結果檢查(斷言)

Postman的斷言功能在Test模塊中,比如要測試返回結果是否含有某一字符串,就需要在Test中編寫相應的代碼,Test中的代碼使用的是JavaScript語法。

3.1 Postman自帶Tests函數

Postman提供了參考代碼供我們選擇即可,主要斷言代碼有如下幾種:

# 斷言狀態碼是否為200,在斷言中此種斷言價值不高

pm.test("Status code is 200", function () {
	pm.response.to.have.status(200);
});

# 斷言響應文本中是否包含某個數據串,常用

pm.test("Body matches string", function () {
	pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

# 使用JsonPath斷言

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});

# 檢查響應正文中是否包含某個子串

pm.test("Body is correct", function () {
	pm.response.to.have.body("response_body_string");
});

# 響應信息包含列表中其中某一個

pm.test("Successful POST request", function () {
	pm.expect(pm.response.code).to.be.oneOf([201,202]);
});

# 將xml響應轉為json

var jsonObject = xml2Json(responseBody);

3.2 手工tests函數

也可以使用斷言並賦值的形式,相對而言,以下方式會更為簡潔實用。

常見的斷言代碼有:

# 檢查response的body中是否包含字符串

tests["Body matches string"] = responseBody.has("string_you_want_to_search");

# 檢查JSON節點的值和節點元素的個數為5

var data = JSON.parse(responseBody).city; //把JSON字符串轉化為對象
tests["Your test name"] = data.value===100;
tests["program's lenght"] = data.programs.length===5;

# 驗證Response time是否小於某個值

tests["Response time is less than 200ms"] = responseTime < 200;

3.3 tests高級操作

我們可以引用數據用例csv文檔中的預期結果進行斷言。

var jsonData = JSON.parse(responseBody) ;
# data.expected 為csv數據文件中的預期結
tests["測試結果通過"] = jsonData.expires_in===data.expected ;

在tests還可以使用判斷語句進行斷言,如下:

在Postman中斷言的操作非常靈活,需要同學們多進行練習。

pm.test("預期結果包含:長沙,實際結果為:"+result, function () {
   if(JSON.parse(responseBody).city==="長沙"){
       pm.expect(pm.response.text()).to.include("千里");
       pm.expect(pm.response.text()).to.include("長沙");
   }else if(JSON.parse(responseBody).city==="Changsha"){
       pm.expect(pm.response.text()).to.include("千里");
       pm.expect(pm.response.text()).to.include("Changsha");
   }else if(JSON.parse(responseBody).city==="長沙"){
       pm.expect(pm.response.text()).to.include("千里");
       pm.expect(pm.response.text()).to.include("長沙");
   }
});

4.Runner執行測試

4.1 設置迭代器

4.2 查看運行結果

三:其他事項

1.保存接口配置

待整個接口都調試完畢后,記得點擊 Save 去保存接口信息:

去保存當前 API 接口,然后需要填寫相關的接口信息:

l Request Name: 請求的名字

我一般習慣用保存為 接口的最后的字段名,比如

l Request Description: 接口的描述

最好寫上該接口的要實現的基本功能和相關注意事項

支持 Markdown 語法

Select a collection or folder to save: 選擇要保存到哪個分組(或文件夾)

往往保存到某個 API 接口到所屬的該項目名的分組

2. Postman的參數

2.1 自動解析多個參數Param

比如,對於一個 GET 的請求的 url 是: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx508a5cacbbfc1141&secret=fa4fc7f17ddead12d7cdcd994e7d2543

對應着其實是?key=value形式中包含多個 Http 的 GET 的 query string=query parameters

Postman 可以自動幫我們解析出對應參數:

2.2 臨時禁用參數

在不刪除某參數的情況下,如果想要暫時不傳參數,可以方便的通過不勾選的方式去實現

2.3 批量編輯多個參數

如果想要批量的編輯參數,可以點擊右上角的Bulk Edit,去實現批量編輯。

3. Postman發送POST請求詳講

POST 請求不能像GET一樣直接在瀏覽器輸入就可以請求,需要借助工具來完成。

3.1.1 發送key-value 的請求:

以login 接口為例,在Body 中選取"form-data" 格式,輸入所需的key-value, 選取對應的環境變量。

3.1.2 發送json格式的請求:

以add user 接口為例,在Body 中選取"raw" 格式,根據接口文檔輸入json 數據, 有需要應用環境變量的選取環境變量。

3.1.3 發送文件的請求

以file upload 接口為例,在Body 中選取"form-data" 格式,在key 里輸入"file",在右邊的下拉里選取類型為"File",點擊"Choose Files" 就可以上傳本地文件了。

4. 環境變量設置

4.1 設置環境變量的意義

在測試 API 期間,往往存在多種環境,對應 IP 地址(或域名也不同)。比如:

Dev:http://192.168.1.21/oa/index.jsp

l 用於開發期間的線上的 Development 的測試環境

LocalTest:http://192.168.1.42/oa/index.jsp

l 用於開發期間配合后台開發人員的本地局域網內的本地環境,用於聯合調試 API 接口

Product:http://www.example.com/oa/index.jsp

l 用於開發完成發布到生產環境

在測試API期間,往往需要修改API地址,這樣效率會比較低且更換后的地址沒法保存。

4.2 環境變量設置

在Postman的設置區有Environment 和 Global Variable,用於解決這個問題,實現不同環境的管理:

很明顯,就可以用來實現不用手動修改 url 中的服務器地址,從而動態的實現,支持不同服務器環境:

l Production 生產環境

l Development 開發環境

l Local 本地局域網環境

環境變量可以使用在以下地方

l URL

l URL params

l Header values

l form-data/url-encoded values

l Raw body content

注意:在你要使用的變量名上附上雙花括號,一個請求只能應用一個環境變量。

4.3 使用代碼設置環境變量

我們可以在Pre-request Script和Test模塊中進行環境變量設置。

--1.設置環境變量

postman.setEnvironmentVariable("key", "value");

--2.獲取環境變量

pm.environment.get("variable_key");

4.4 全局變量

全局變量(Global Variable)顧名思義是針對於所有腳本和所有環境將生效的變量,它的作用域大於環境變量。設置全局變量的方法與環境變量相似:

--1.設置全局變量

pm.globals.set("variable_key", "variable_value");

--2.獲取全局變量

pm.globals.get("variable_key");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM