<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Postman接口自動化測試實用指南

Testin云測 ? 來源:Testin云測 ? 2024-03-26 14:47 ? 次閱讀

| 背景

該篇文章針對已經掌握 Postman 基本用法的讀者,即對接口相關概念有一定了解、已經會使用 Postman 進行模擬請求的操作。

| 接口結果判斷

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

判斷請求返回的 code 是否符合預期

判斷請求返回的內容中是否包含預期的內容(關鍵字)

接下來我們看看如何利用 Postman 來解決上述的問題:

功能區

3f19eeaa-eb19-11ee-a297-92fbcf53809c.png

在 Postman 中相關的功能在非常顯眼的地方,Tests 功能的使用需要我們有一定的編程語言基礎,目前支持的腳本語言即為 JavaScript 。但比較好的一點是,我們不需要再去考慮上下文問題以及運行環境的問題 ,也就是說我們只需要在這邊完成結果邏輯判斷的代碼塊即可。

而 Postman 還為我們提供了一些常用的代碼模板,在 Tests 面板右邊的 SNIPPETS 功能區中,所以對 JavaScript 不大了解問題也不大。代碼編寫相關將在下文進行具體介紹。

腳本相關

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

responseCode:包含請求的返回的狀態信息(如:code)

responseBody:為接口請求放回的數據內容(類型為字符串)

tests:為鍵值對形式,用于表示我們的測試結果是成功與否,最終展示在 Test Results 中。

key:(如:code 200)我們可以用來當做結果的一個描述

value:其值為布爾型,ture 表示測試通過, false 表示測試失敗。

所以上述代碼應該不難理解了,而有了返回結果的數據以及表示結果成功與否的方式,那么我們“接口結果判斷”的問題也就基本解決了。

另外還有幾個比較常用的:

responseTime :請求所耗時長

postman :可以做的比較多,比如

獲取返回數據的頭部信息:postman.getResponseHeader("")

設置全局變量:postman.setGlobalVariable("variable_key", "variable_value");

代碼模板

Postman 在 SNIPPETS 功能區中為我們提供的代碼模板已經能解決大部分情況了,以下先挑幾個跟結果判斷相關的進行講解:

Status code : Code is 200

//根據返回的Code判斷請求情況
tests["Statuscodeis200"]=responseCode.code===200;

Response body: Contains string

//判斷返回的內容中是否存在“關鍵字”。(tests 的 key 可修改,將不再強調)
tests["Bodymatchesstring"]=responseBody.has("這里可以改為你要判斷的關鍵字內容");

//如上文提到的:
//判斷結果中是否存在access_token關鍵字
tests["hasaccess_token"]=responseBody.has("access_token");

Response body: is equal to string

//判斷返回內容是否跟預期完全相等。
tests["Bodyiscorrect"]=responseBody==="這里可以改為你的預期內容";

Response body: JSON value check

//上文提到,responseBody為字符串類型,支持轉為Json格式
varjsonData=JSON.parse(responseBody);
tests["Yourtestname"]=jsonData.value===100;

Response time is less than 200ms

//判斷請求時長是否小于200ms,具體時長按情況自定義
tests["Responsetimeislessthan200ms"]=responseTime

以上介紹的這些基本已經足夠完成對單一接口的測試了,但我們知道如果沒有批量、定時任務, 那么這些都將毫無意義,繼續…

| 集合(批量)測試

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

3f2ae93a-eb19-11ee-a297-92fbcf53809c.png

通過以上步驟,我們得到一個待測的接口集合,為了簡化情況,我這邊每個接口成功與否的條件都是用 code 是否為 200 來判斷:

tests["Statuscodeis200"]=responseCode.code===200;

批量執行

以上準備就緒后,我們就可以開始批量運行接口進行測試了:

3f3acb8e-eb19-11ee-a297-92fbcf53809c.png

點擊Run 后,會新打開一個頁面:

3f4a34e8-eb19-11ee-a297-92fbcf53809c.png

Environment:用于切換接口運行的環境,這里先不管,后面再講

Iteration:用于設置接口一共要運行的次數。

Delay: 設置每次運行接口之間的時間間隔,單位為毫秒。

Data File: 上傳測試數據文件 (下文單獨講)

變化的參數數據

我們已經了解了,如何讓多個接口循環運行多次,但是現在有個問題,按目前這個步驟,每次運行時接口的參數都是一樣的,那么就算我們運行個100次、1000次意義也不大。

先看看我們寫好的一個登錄功能的接口:

3f5b25dc-eb19-11ee-a297-92fbcf53809c.png

使用變量

現在登錄的賬號和密碼參數都是寫死的,也就是不過我們執行多少次,都是拿這個賬號去測試。

那么如果想要測試賬號密碼參數使用其它值有沒有異常怎么辦呢?( 想要每次都手動改的可以跳過這部分 /手動滑稽)這里我們先簡單講一下在 Postman 中使用如何“變量”,如下圖:

3f759ea8-eb19-11ee-a297-92fbcf53809c.png

引用一個變量的語法:{{變量名}}, 圖中可以看到,我們將賬戶和密碼字段的參數值都設置為變量:{{username}}、{{password}}。修改完直接點擊運行 (Send) 當然是不行的,因為目前這兩個變量還未被賦值,不過我們可以在Pre-request Script面板中進行賦值操作:

Pre-request Script

Pre-request Script與 Tests 類似,區別在于:Pre-request Script中的腳本是在執行請求之前運行,而Tests 中的腳本則是在請求完成之后執行。所以,我們可以在Pre-request Script功能區中用腳本先個上面兩個變量進行賦值,如:

//設置全局變量
postman.setGlobalVariable("username","test1");
postman.setGlobalVariable("password","123456");

但是用Pre-request Script進行賦值操作仍然不能解決我們的問題,因為按照這種寫法,不論運行多少次其實都還是用固定(寫死)的數據進行測試。當然既然是腳本語言,也會有更靈活的用法,這邊先不講。

測試數據集

接下來我們講講 Data File , 在運行集合前的這個選項就是用來上傳測試數據(文件)以賦值給相應變量的。我們先以 CSV 格式的測試數據為例:

username,password
test1,123456
test2,222222
test3,123456
test4,444444

數據格式類似表格,第一行表示對應的變量名,下面 4 行表示 4 組賬號密碼數據(其中兩組為正確數據) ,我們保存一份內容為上述示例數據后綴名為.csv的文件后,再次開始測試看看效果,我們選擇運行次數為 4 (對應 4 組測試數據)、選擇對應的 CSV 文件運行后,可以看到我們的結果確實如我們的預期。

接口 Request 運行的結果為兩次成功兩次失敗,也就是每一次運行都賦值了不同的賬號密碼的測試數據 (在最新的桌面客戶端版本中可以看到每次具體的請求情況,這邊就不再細說了)。

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

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

定期任務

Postman 提供了一個 Monitors (監視器)功能,支持我們提交一個測試任務,按照設置的定時器進行運行,如每小時測試一次,具體操作如下:

3f87ad6e-eb19-11ee-a297-92fbcf53809c.png

| 請求依賴問題

講完接口結果判斷和集合批量測試后,我們再來看看比較復雜的情況,即依賴請求問題,比如我們的購物下訂單接口要求必須先登錄后才可訪問。但大部分依賴問題其實本質上就是一個接口間數據傳遞的問題,比如調用登錄接口后返回一個標識,假設為 token ,那么我們請求下訂單接口時只要一起攜帶 token 參數進行請求即可。所以,問題變為:

保證接口調用順序

將接口A返回的數據傳遞給后續的接口B、C、D

接口執行順序

首先,說明一下,接下來說的接口都是默認屬于同一個集合 (Collections) 中的。

還是以我們上文中創建好接口集合為例,如果你有注意我們執行批量測試的結果,就會發現接口的執行順序其實就是按照這邊目錄中的順序(從上到下),即:Request1->Request2->Request3。

3fa05e86-eb19-11ee-a297-92fbcf53809c.png

這邊接口名字可能有點誤導性,所以再強調一下:按目錄中從上到下的順序執行 (與字典排序無關)

所以有了這個默認的執行順序后,那么我們便可以把需要優先執行的接口放前面即可,比如把“登錄接口”放在第一個。

自定義執行順序

當然,如果只有默認的一個執行順序的話,通常沒法滿足我們復雜的業務需求,所以 Postman 為我們提供了一個函數:postman.setNextRequest("填寫你要跳轉的接口名"),支持我們跳轉到指定接口繼續執行,舉個例子:

我們在運行完 Request1 接口成功后,不需要再運行 Request2 而是直接跳至 Request3 ,那么我可以在 Request1 接口的 Tests 功能區中執行跳轉代碼,如:

3fb0e3e6-eb19-11ee-a297-92fbcf53809c.png

這里需要注意幾點:

postman.setNextRequest()只在運行集合測試的時候生效,也就是說我們單獨運行 (Send) 接口Request1 時,函數是不起作用的。

當我們運行集合測試成功從Request1->Request3后,如果 Request3 后面還有接口,那么后面的接口仍然繼續按默認順序執行,即圖中的接口 Request4 仍會被執行。

指定的跳轉接口必須屬于同一個集合中。

setNextRequest()函數不管在 Tests 腳本中何處被調用,它都只在當前腳本最后才被真正執行。比如我們將圖中的第二行與第一行互調后,那么在運行跳轉函數后第二行代碼仍會被執行。

所以,利用setNextRequest()函數,我們便可以按照條件跳過不必要的接口,或者建立我們自己的一個邏輯測試。

數據傳遞

在講數據傳遞前,先聊聊 Postman 中全局變量、環境切換的使用。

全局變量

全局變量的概念其實我們在上文中講Pre-request Script時有簡單提到,也就是說我們可以通過腳本代碼來設置全局變量。

運行后,username 和 password 兩個變量會被成功保存下來,那么我們在任意接口中便都可以通過變量引用的語法如:{{username}}來使用它們。

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

3fc5146a-eb19-11ee-a297-92fbcf53809c.png

進入對應界面后,便可直接進行管理:

3ffad03c-eb19-11ee-a297-92fbcf53809c.png

多環境區分與切換

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

參數的創建

可能你已經注意到,上圖中我已經建有幾個不同環境的參數“集合”了,再看一下:

401a35f8-eb19-11ee-a297-92fbcf53809c.png

我在每個環境中都創建了一個 host 參數,如:

402cc196-eb19-11ee-a297-92fbcf53809c.png

當然,我們的環境參數也可以通過腳本的方式來進行設置,函數為:

//注意,該參數只添加到你當前選擇的環境的“參數集”中
postman.setEnvironmentVariable("variable_key","variable_value");
使用與切換

環境“參數集” 中的參數使用方式和全局變量一致,如圖中{{host}},不同環境的切換見下圖:

403a087e-eb19-11ee-a297-92fbcf53809c.png

|解決依賴問題

掌握以上的預備知識后,我們開始看看如何用 Postman 解決存在依賴關系的接口測試。

假設場景

我們的接口 Request1 為登錄接口,登錄成功將會返回一個access_token字段作為標識(已實現)。那么假設接口 Request3 為一個下訂單的接口,需要攜帶登錄返回的access_token才能正常訪問。

思路

保證 Request1 在 Request3 之前被運行

將 Request1 返回的 access_token 的值添加到環境變量"參數集"中。

Request3 在請求時引用 access_token 的值

將返回值存在 “全局變量” 或者 “環境變量” 中,視具體業務情況而定,該例中access_token的值是與環境有關的,所以這里選擇使用環境變量集存儲。

Postman 中的操作

1、我們目錄中已保證 Request1 接口優先執行

2、Request1 中 Tests 的代碼情況:

if(responseCode.code===200&&responseBody.has("access_token")){
//如果code為200,并且返回的數據中存在access_token關鍵字,則認為登錄成功
tests["login"]=true;

//將返回的內容轉為json格式,并且取到access_token內容,添加到環境變量中
varjsonData=JSON.parse(responseBody);
//access_token的取值方式視具體的json數據結構而定
postman.setEnvironmentVariable("token",jsonData.result.access_token);

//跳轉到Request3接口
postman.setNextRequest("Request3")

}else{
tests["login"]=false;

//登錄失敗,可以選擇跳轉到對應失敗后的處理接口進行測試
//postman.setNextRequest("OtherRequest")
}

3、在接口 Request3 中使用變量 token :

40469d3c-eb19-11ee-a297-92fbcf53809c.png

我這邊是將 token 放在頭部信息中, 具體使用方式依據接口參數規則而定。

運行

運行集合測試,結果符合我們的預期,Request1 和 Request3 通過測試,Request2 被跳過,Request4 仍被執行。

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 自動化測試
    +關注

    關注

    0

    文章

    176

    瀏覽量

    26802
  • 監視器
    +關注

    關注

    0

    文章

    764

    瀏覽量

    32875
  • 定時器
    +關注

    關注

    23

    文章

    3154

    瀏覽量

    112376

原文標題:全網最全的Postman接口自動化測試!

文章出處:【微信號:TestinChina,微信公眾號:Testin云測】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    接口調試與測試工具postman安裝說明與基礎功能

    postman是一款支持http協議的接口調試與測試工具,其主要特點就是功能強大,使用簡單且易用性好 。
    發表于 07-15 09:24 ?928次閱讀

    鴻蒙OS開發實戰:【自動化測試框架】使用指南

    為支撐HarmonyOS操作系統的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發者針對應用接口進行單元測試,
    的頭像 發表于 04-08 14:49 ?748次閱讀
    鴻蒙OS開發實戰:【<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>框架】使用<b class='flag-5'>指南</b>

    OPhone自動化測試技術概述

    本文將對OPhone平臺上可采用的幾種自動化測試技術進行介紹,并對每種技術的優缺點做簡要的總結。OPhone臺除了為應用程序開發提供豐富的API外,也為開展自動化測試提供了多種途徑?!?/div>
    發表于 05-06 08:58

    基于LAN的自動化測試系統開放指南

    自動化測試開發指南
    發表于 09-02 12:34

    航天器自動化測試測試語言

    這是關于自動化方面的和航天器方面的基于自動化測試測試語言!
    發表于 04-26 19:52

    自動化測試框架思想和構建

    自動化測試一般是指軟件測試自動化,軟件測試就是在預設條件下運行系統或應用程序,評估運行結果,預先條件應包括正常條件和異常條件。本文介紹的是
    發表于 07-18 06:52

    七個步驟完成自動化測試

    我們對自動化測試充滿了希望,然而,自動化測試卻經常帶給我們沮喪和失望。雖然,自動化測試可以把我們
    發表于 07-19 06:12

    14565B自動化接口WTM集成指南

    14565B自動化接口WTM集成指南
    發表于 10-16 12:47

    如何對用戶界面進行自動化測試

    能識別圖形界面上的關鍵信息,比如界面上的文字,數值,圖標等。小螞蟻測試(AnTestin)平臺支持對人機接口的屏幕顯示進行自動化檢測,代替人的眼睛觀察,可以識別界面上的關鍵信息,結合其他操作(比如
    發表于 03-06 19:57

    自動化測試系統問答

    和配置管理,學會在開發工具的同時也學會一些開發和測試自動化流程。而在測試過程中,因為開發的工具不是非常系統,所以可以主要從功能點(按照需求列好功能點
    發表于 10-12 19:02

    如何通過SR5500的RPI接口完成自動化測試?

    本文介紹了一種通過SR5500的RPI接口,非常方便的用腳本語言編寫程序完成自動化測試的方法。
    發表于 05-10 06:01

    HarmonyOS自動化測試框架—Hypium

    從零開始,讓測試更加簡單、高效。 圖1 Hypium應用程序的自動化測試,從應用場景上主要分為兩類:一類主要測試程序的內部功能邏輯,聚焦在測試
    發表于 08-10 17:13

    HamronyOS自動化測試框架使用指南

    概述 為支撐 HarmonyOS 操作系統的自動化測試活動開展,我們提供了支持 JS/TS 語言的單元及 UI 測試框架,支持開發者針對應用接口進行單元
    發表于 12-19 10:26

    如何自動化測試你的接口?

    不知道大家的項目是否都有對接口API進行自動化測試,反正像我們這種小公司是沒有的。由于最近一直被吐槽項目質量糟糕,只能研發自己看看有什么接口測試
    的頭像 發表于 04-07 15:29 ?1038次閱讀
    如何<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>你的<b class='flag-5'>接口</b>?

    接口自動化測試流程講解 企業接口自動化測試步驟

    接口自動化測試是指通過編寫腳本或使用自動化工具,對軟件系統的接口進行測試的過程。
    發表于 07-28 14:54 ?1332次閱讀
    <b class='flag-5'>接口</b><b class='flag-5'>自動化</b><b class='flag-5'>測試</b>流程講解 企業<b class='flag-5'>接口</b><b class='flag-5'>自動化</b><b class='flag-5'>測試</b>步驟
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>