當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]來(lái)源:https://blog.csdn.net/cai_iac/article/details/81030619|背景該篇文章針對(duì)已經(jīng)掌握Postman基本用法的讀者,即對(duì)接口相關(guān)概念有一定了解、已經(jīng)會(huì)使用Postman進(jìn)行模擬請(qǐng)求的操作。當(dāng)前環(huán)境:Window7-64Post...

| 背景

該篇文章針對(duì)已經(jīng)掌握 Postman 基本用法的讀者,即對(duì)接口相關(guān)概念有一定了解、已經(jīng)會(huì)使用 Postman 進(jìn)行模擬請(qǐng)求的操作。


當(dāng)前環(huán)境:


  • Window 7 - 64
  • Postman 版本(免費(fèi)版):Chrome App v5.5.3
不同版本頁(yè)面 UI 和部分功能位置會(huì)有點(diǎn)不同,不過(guò)影響不大。


我們先思考一下,如果需要達(dá)到自動(dòng)化接口測(cè)試的效果,那么我們?cè)诨镜哪M請(qǐng)求上還需要做哪些呢?


以下我粗略概括為 3 個(gè)問(wèn)題(歡迎更多補(bǔ)充與建議):


  • 如何判斷接口是否請(qǐng)求成功
  • 如何進(jìn)行接口批量、定期測(cè)試
  • 如何處理依賴(lài)接口問(wèn)題(比如商品下單的接口必須要求先登錄)
所以,接下來(lái)就主要分為 3 個(gè)部分進(jìn)行介紹,以分別解決這 3 個(gè)問(wèn)題。


| 接口結(jié)果判斷

首先,既然是自動(dòng)化測(cè)試,那么我們肯定需要工具 (Postman) 或者代碼能幫我們直接判斷結(jié)果是否符合預(yù)期。那么在接口測(cè)試上,大體就兩個(gè)思路:


  • 判斷請(qǐng)求返回的 code 是否符合預(yù)期
  • 判斷請(qǐng)求返回的內(nèi)容中是否包含預(yù)期的內(nèi)容(關(guān)鍵字)
接下來(lái)我們看看如何利用 Postman 來(lái)解決上述的問(wèn)題:


功能區(qū)

Postman被低估的功能?—?自動(dòng)化接口測(cè)試在 Postman 中相關(guān)的功能在非常顯眼的地方,Tests 功能的使用需要我們有一定的編程語(yǔ)言基礎(chǔ),目前支持的腳本語(yǔ)言即為 JavaScript 。但比較好的一點(diǎn)是,我們不需要再去考慮上下文問(wèn)題以及運(yùn)行環(huán)境的問(wèn)題 ,也就是說(shuō)我們只需要在這邊完成結(jié)果邏輯判斷的代碼塊即可。


而 Postman 還為我們提供了一些常用的代碼模板,在 Tests 面板右邊的 SNIPPETS 功能區(qū)中,所以對(duì) JavaScript 不大了解問(wèn)題也不大。代碼編寫(xiě)相關(guān)將在下文進(jìn)行具體介紹。


腳本相關(guān)

先看上圖的代碼部分,我們可以發(fā)現(xiàn) responseCode 、 responseBody 和 tests 三個(gè)變量(可直接使用) :


  • responseCode:包含請(qǐng)求的返回的狀態(tài)信息(如:code)
  • responseBody:為接口請(qǐng)求放回的數(shù)據(jù)內(nèi)容(類(lèi)型為字符串)
  • tests:為鍵值對(duì)形式,用于表示我們的測(cè)試結(jié)果是成功與否,最終展示在 Test Results 中。
  • key:(如:code 200)我們可以用來(lái)當(dāng)做結(jié)果的一個(gè)描述
  • value:其值為布爾型,ture 表示測(cè)試通過(guò), false 表示測(cè)試失敗。
所以上述代碼應(yīng)該不難理解了,而有了返回結(jié)果的數(shù)據(jù)以及表示結(jié)果成功與否的方式,那么我們“接口結(jié)果判斷”的問(wèn)題也就基本解決了。


另外還有幾個(gè)比較常用的:


  • responseTime :請(qǐng)求所耗時(shí)長(zhǎng)
  • postman :可以做的比較多,比如
    • 獲取返回?cái)?shù)據(jù)的頭部信息:postman.getResponseHeader("")
    • 設(shè)置全局變量:postman.setGlobalVariable("variable_key", "variable_value");

代碼模板

Postman 在 SNIPPETS 功能區(qū)中為我們提供的代碼模板已經(jīng)能解決大部分情況了,以下先挑幾個(gè)跟結(jié)果判斷相關(guān)的進(jìn)行講解:


Status code : Code is 200


//根據(jù)返回的 Code 判斷請(qǐng)求情況
tests["Status code is 200"] = responseCode.code === 200;
Response body: Contains string


//判斷返回的內(nèi)容中是否存在“關(guān)鍵字”。(tests 的 key 可修改,將不再?gòu)?qiáng)調(diào))
tests["Body matches string"] = responseBody.has("這里可以改為你要判斷的關(guān)鍵字內(nèi)容");

//如上文提到的:
// 判斷結(jié)果中是否存在 access_token 關(guān)鍵字
tests["has access_token"] = responseBody.has("access_token");
Response body: is equal to string


//判斷返回內(nèi)容是否跟預(yù)期完全相等。
tests["Body is correct"] = responseBody === "這里可以改為你的預(yù)期內(nèi)容";
Response body: JSON value check


//上文提到,responseBody 為字符串類(lèi)型,支持轉(zhuǎn)為 Json 格式
var jsonData = JSON.parse(responseBody);
tests["Your test name"] = jsonData.value === 100;
Response time is less than 200ms


//判斷請(qǐng)求時(shí)長(zhǎng)是否小于200ms ,具體時(shí)長(zhǎng)按情況自定義
tests["Response time is less than 200ms"] = responseTime < 200;
以上介紹的這些基本已經(jīng)足夠完成對(duì)單一接口的測(cè)試了,但我們知道如果沒(méi)有批量、定時(shí)任務(wù), 那么這些都將毫無(wú)意義,繼續(xù)…


| 集合(批量)測(cè)試

想要進(jìn)行接口的批量測(cè)試、管理,那么我們需要將待測(cè)試的接口全部都保存到同一個(gè)集合(Collections)中,你可以認(rèn)為就是保存到同一個(gè)文件夾中。先看看 Postman 中的操作步驟:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試通過(guò)以上步驟,我們得到一個(gè)待測(cè)的接口集合,為了簡(jiǎn)化情況,我這邊每個(gè)接口成功與否的條件都是用 code 是否為 200 來(lái)判斷:


tests["Status code is 200"] = responseCode.code === 200;

批量執(zhí)行

以上準(zhǔn)備就緒后,我們就可以開(kāi)始批量運(yùn)行接口進(jìn)行測(cè)試了:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試點(diǎn)擊Run 后,會(huì)新打開(kāi)一個(gè)頁(yè)面:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試
  • Environment:用于切換接口運(yùn)行的環(huán)境,這里先不管,后面再講
  • Iteration:用于設(shè)置接口一共要運(yùn)行的次數(shù)。
  • Delay: 設(shè)置每次運(yùn)行接口之間的時(shí)間間隔,單位為毫秒。
  • Data File: 上傳測(cè)試數(shù)據(jù)文件 (下文單獨(dú)講)

變化的參數(shù)數(shù)據(jù)

我們已經(jīng)了解了,如何讓多個(gè)接口循環(huán)運(yùn)行多次,但是現(xiàn)在有個(gè)問(wèn)題,按目前這個(gè)步驟,每次運(yùn)行時(shí)接口的參數(shù)都是一樣的,那么就算我們運(yùn)行個(gè)100次、1000次意義也不大。


先看看我們寫(xiě)好的一個(gè)登錄功能的接口:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試使用變量


現(xiàn)在登錄的賬號(hào)和密碼參數(shù)都是寫(xiě)死的,也就是不過(guò)我們執(zhí)行多少次,都是拿這個(gè)賬號(hào)去測(cè)試。


那么如果想要測(cè)試賬號(hào)密碼參數(shù)使用其它值有沒(méi)有異常怎么辦呢?( 想要每次都手動(dòng)改的可以跳過(guò)這部分 /手動(dòng)滑稽)這里我們先簡(jiǎn)單講一下在 Postman 中使用如何“變量”,如下圖:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試引用一個(gè)變量的語(yǔ)法:{{變量名}}, 圖中可以看到,我們將賬戶(hù)和密碼字段的參數(shù)值都設(shè)置為變量:{{username}}、{{password}}。修改完直接點(diǎn)擊運(yùn)行 (Send) 當(dāng)然是不行的,因?yàn)槟壳斑@兩個(gè)變量還未被賦值,不過(guò)我們可以在Pre-request Script面板中進(jìn)行賦值操作:


Pre-request Script


Pre-request Script與 Tests 類(lèi)似,區(qū)別在于:Pre-request Script中的腳本是在執(zhí)行請(qǐng)求之前運(yùn)行,而Tests 中的腳本則是在請(qǐng)求完成之后執(zhí)行。所以,我們可以在Pre-request Script功能區(qū)中用腳本先個(gè)上面兩個(gè)變量進(jìn)行賦值,如:


//設(shè)置全局變量
postman.setGlobalVariable("username", "test1");
postman.setGlobalVariable("password", "123456");
但是用Pre-request Script進(jìn)行賦值操作仍然不能解決我們的問(wèn)題,因?yàn)榘凑者@種寫(xiě)法,不論運(yùn)行多少次其實(shí)都還是用固定(寫(xiě)死)的數(shù)據(jù)進(jìn)行測(cè)試。當(dāng)然既然是腳本語(yǔ)言,也會(huì)有更靈活的用法,這邊先不講。


測(cè)試數(shù)據(jù)集


接下來(lái)我們講講 Data File , 在運(yùn)行集合前的這個(gè)選項(xiàng)就是用來(lái)上傳測(cè)試數(shù)據(jù)(文件)以賦值給相應(yīng)變量的。我們先以 CSV 格式的測(cè)試數(shù)據(jù)為例:


username,password
test1,123456
test2,222222
test3,123456
test4,444444
數(shù)據(jù)格式類(lèi)似表格,第一行表示對(duì)應(yīng)的變量名,下面 4 行表示 4 組賬號(hào)密碼數(shù)據(jù)(其中兩組為正確數(shù)據(jù)) ,我們保存一份內(nèi)容為上述示例數(shù)據(jù)后綴名為.csv的文件后,再次開(kāi)始測(cè)試看看效果,我們選擇運(yùn)行次數(shù)為 4 (對(duì)應(yīng) 4 組測(cè)試數(shù)據(jù))、選擇對(duì)應(yīng)的 CSV 文件運(yùn)行后,可以看到我們的結(jié)果確實(shí)如我們的預(yù)期。


接口 Request 運(yùn)行的結(jié)果為兩次成功兩次失敗,也就是每一次運(yùn)行都賦值了不同的賬號(hào)密碼的測(cè)試數(shù)據(jù) (在最新的桌面客戶(hù)端版本中可以看到每次具體的請(qǐng)求情況,這邊就不再細(xì)說(shuō)了)。


如果使用 Json 文件的話(huà),那么格式如下:


[
{
"username": "test1",
"password": "123456"
},
{
"username": "test2",
"password": "222222"
},
{
"username": "test3",
"password": "123456"
},
{
"username": "test4",
"password": "444444"
}
]

定期任務(wù)

Postman 提供了一個(gè) Monitors (監(jiān)視器)功能,支持我們提交一個(gè)測(cè)試任務(wù),按照設(shè)置的定時(shí)器進(jìn)行運(yùn)行,如每小時(shí)測(cè)試一次,具體操作如下:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試

| 請(qǐng)求依賴(lài)問(wèn)題

講完接口結(jié)果判斷和集合批量測(cè)試后,我們?cè)賮?lái)看看比較復(fù)雜的情況,即依賴(lài)請(qǐng)求問(wèn)題,比如我們的購(gòu)物下訂單接口要求必須先登錄后才可訪問(wèn)。但大部分依賴(lài)問(wèn)題其實(shí)本質(zhì)上就是一個(gè)接口間數(shù)據(jù)傳遞的問(wèn)題,比如調(diào)用登錄接口后返回一個(gè)標(biāo)識(shí),假設(shè)為 token ,那么我們請(qǐng)求下訂單接口時(shí)只要一起攜帶 token 參數(shù)進(jìn)行請(qǐng)求即可。所以,問(wèn)題變?yōu)椋?


  • 保證接口調(diào)用順序
  • 將接口A返回的數(shù)據(jù)傳遞給后續(xù)的接口B、C、D

接口執(zhí)行順序

首先,說(shuō)明一下,接下來(lái)說(shuō)的接口都是默認(rèn)屬于同一個(gè)集合 (Collections) 中的。


還是以我們上文中創(chuàng)建好接口集合為例,如果你有注意我們執(zhí)行批量測(cè)試的結(jié)果,就會(huì)發(fā)現(xiàn)接口的執(zhí)行順序其實(shí)就是按照這邊目錄中的順序(從上到下),即:Request1->Request2->Request3。


Postman被低估的功能?—?自動(dòng)化接口測(cè)試
這邊接口名字可能有點(diǎn)誤導(dǎo)性,所以再?gòu)?qiáng)調(diào)一下:按目錄中從上到下的順序執(zhí)行 (與字典排序無(wú)關(guān))


所以有了這個(gè)默認(rèn)的執(zhí)行順序后,那么我們便可以把需要優(yōu)先執(zhí)行的接口放前面即可,比如把“登錄接口”放在第一個(gè)。


自定義執(zhí)行順序當(dāng)然,如果只有默認(rèn)的一個(gè)執(zhí)行順序的話(huà),通常沒(méi)法滿(mǎn)足我們復(fù)雜的業(yè)務(wù)需求,所以 Postman 為我們提供了一個(gè)函數(shù):postman.setNextRequest("填寫(xiě)你要跳轉(zhuǎn)的接口名"),支持我們跳轉(zhuǎn)到指定接口繼續(xù)執(zhí)行,舉個(gè)例子:


我們?cè)谶\(yùn)行完 Request1 接口成功后,不需要再運(yùn)行 Request2 而是直接跳至 Request3 ,那么我可以在 Request1 接口的 Tests 功能區(qū)中執(zhí)行跳轉(zhuǎn)代碼,如:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試這里需要注意幾點(diǎn):
  • postman.setNextRequest()只在運(yùn)行集合測(cè)試的時(shí)候生效,也就是說(shuō)我們單獨(dú)運(yùn)行 (Send) 接口Request1 時(shí),函數(shù)是不起作用的。
  • 當(dāng)我們運(yùn)行集合測(cè)試成功從Request1->Request3后,如果 Request3 后面還有接口,那么后面的接口仍然繼續(xù)按默認(rèn)順序執(zhí)行,即圖中的接口 Request4 仍會(huì)被執(zhí)行。
  • 指定的跳轉(zhuǎn)接口必須屬于同一個(gè)集合中。
  • setNextRequest()函數(shù)不管在 Tests 腳本中何處被調(diào)用,它都只在當(dāng)前腳本最后才被真正執(zhí)行。比如我們將圖中的第二行與第一行互調(diào)后,那么在運(yùn)行跳轉(zhuǎn)函數(shù)后第二行代碼仍會(huì)被執(zhí)行。
所以,利用setNextRequest()函數(shù),我們便可以按照條件跳過(guò)不必要的接口,或者建立我們自己的一個(gè)邏輯測(cè)試。


數(shù)據(jù)傳遞

在講數(shù)據(jù)傳遞前,先聊聊 Postman 中全局變量、環(huán)境切換的使用。


全局變量


全局變量的概念其實(shí)我們?cè)谏衔闹兄vPre-request Script時(shí)有簡(jiǎn)單提到,也就是說(shuō)我們可以通過(guò)腳本代碼來(lái)設(shè)置全局變量。


運(yùn)行后,username 和 password 兩個(gè)變量會(huì)被成功保存下來(lái),那么我們?cè)谌我饨涌谥斜愣伎梢酝ㄟ^(guò)變量引用的語(yǔ)法如:{{username}}來(lái)使用它們。


另外,Postman 不僅支持代碼設(shè)置全局變量的方式,它還支持可視化操作:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試進(jìn)入對(duì)應(yīng)界面后,便可直接進(jìn)行管理:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試多環(huán)境區(qū)分與切換


通常情況下,我們的接口都會(huì)分為測(cè)試版本和線上版本(或者更多),而他們的區(qū)別可能僅是 ULR 不同,那么全局變量便不大合適解決這個(gè)問(wèn)題。


參數(shù)的創(chuàng)建


可能你已經(jīng)注意到,上圖中我已經(jīng)建有幾個(gè)不同環(huán)境的參數(shù)“集合”了,再看一下:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試我在每個(gè)環(huán)境中都創(chuàng)建了一個(gè) host 參數(shù),如:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試當(dāng)然,我們的環(huán)境參數(shù)也可以通過(guò)腳本的方式來(lái)進(jìn)行設(shè)置,函數(shù)為:


//注意,該參數(shù)只添加到你當(dāng)前選擇的環(huán)境的“參數(shù)集”中
postman.setEnvironmentVariable("variable_key", "variable_value");
使用與切換環(huán)境“參數(shù)集” 中的參數(shù)使用方式和全局變量一致,如圖中{{host}},不同環(huán)境的切換見(jiàn)下圖:


Postman被低估的功能?—?自動(dòng)化接口測(cè)試

| 解決依賴(lài)問(wèn)題

掌握以上的預(yù)備知識(shí)后,我們開(kāi)始看看如何用 Postman 解決存在依賴(lài)關(guān)系的接口測(cè)試。


假設(shè)場(chǎng)景


我們的接口 Request1 為登錄接口,登錄成功將會(huì)返回一個(gè)access_token字段作為標(biāo)識(shí)(已實(shí)現(xiàn))。那么假設(shè)接口 Request3 為一個(gè)下訂單的接口,需要攜帶登錄返回的access_token才能正常訪問(wèn)。


思路


  • 保證 Request1 在 Request3 之前被運(yùn)行
  • 將 Request1 返回的 access_token 的值添加到環(huán)境變量"參數(shù)集"中。
  • Request3 在請(qǐng)求時(shí)引用 access_token 的值
將返回值存在 “全局變量” 或者 “環(huán)境變量” 中,視具體業(yè)務(wù)情況而定,該例中access_token的值是與環(huán)境有關(guān)的,所以這里選擇使用環(huán)境變量集存儲(chǔ)。


Postman 中的操作


1、我們目錄中已保證 Request1 接口優(yōu)先執(zhí)行


2、Request1 中 Tests 的代碼情況:


if(responseCode.code === 200
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉