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

2021-03-02 軟體測試培訓

顧老師新書《全棧軟體測試工程師寶典》

https://item.m.jd.com/product/10023427978355.html

以前兩本書的網上購買地址:

《軟體測試技術實戰設計、工具及管理》:

https://item.jd.com/34295655089.html

《基於Django的電子商務網站》:

https://item.jd.com/12082665.html

來源:http://www.uml.org.cn/

一:理論部分

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)

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

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");

—————————————————————————————————

顧老師課程歡迎報名

軟體安全測試

https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486

接口自動化測試

https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486

DevOps 和Jenkins之DevOps

https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486

DevOps與Jenkins 2.0之Jenkins

https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486

Selenium自動化測試

https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486

性能測試第1季:性能測試基礎知識

https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486

性能測試第2季:LoadRunner12使用

https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486

性能測試第3季:JMeter工具使用

https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486

性能測試第4季:監控與調優

https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486

Django入門

https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486

啄木鳥顧老師漫談軟體測試

https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486

相關焦點

  • PostMan 之 Mock 接口測試
    文末有福利接口測試學習資料免費領取哦~在測試的時候經常會碰到後端開發工程師的接口還沒有開發完成
  • 數據接口測試工具 Postman 介紹
    此文介紹好用的數據接口測試工具 Postman,能幫助您方便、快速、統一地管理項目中使用以及測試的數據接口。1.
  • Postman接口測試(五):功能界面及API 文檔生成
    ,繼續測試其它接口比如此處 tab1 中,測試了獲取驗證碼接口後,拷貝手機號和驗證碼,粘貼到 tab2 中,繼續測試註冊的接口API 文檔生成在服務端後臺的開發人員測試好了接口後,打算把接口的各種信息發給使用此 API 的前端的移動端人員時,往往會遇到:要麼是用複製粘貼 -> 格式不友好 要麼是用 Postman 中截圖 ->
  • 接口自動化測試與Tesla自動化測試平臺
    那麼我們今天就由接口測試為切入點,講一講接口測試的概念和要點,講一講Tesla平臺,及其兩種測試模式(頁面接口模式與代碼託管模式)。文章嘗試從一些基礎知識開始講述,所以比較適合初學者。同時,從接口進行測試可以快速分辨是左側的問題,或者是右側的問題。「實現後的收益更高」接口的功能一般是較為穩定的,並且也會進行前向兼容。實現後的測試,就具備重複執行的能力,也具備驗證功能回歸的能力。「實現難度較低」相對於接口測試的實現(發送並接收,校驗),UI的操作和校驗會更加難以實現。
  • 接口測試的常考面試題+答案解析
    通常情況下,測試人員測試的接口主要就是web接口,而web接口又分為Web Service接口、Http接口和 RPC接口等等2、接口測試接口測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等以下是接口測試中常考的面試題目答案解析:1、請描述下
  • 認識接口測試
    王豆豆接下來將寫接口測試系列文章,今天先認識接口測試。
  • 面試題-web service接口如何測試?
    前言接口相關的測試,http 協議的接口大家平常基礎的很多,基本上問題不大。webservice 接口如何測試呢?
  • 性能測試教程[7] jmeter接口自動化回歸測試
    SongTaste 用音樂傾聽彼此假設有一個登陸接口,要定期回歸測試以下幾個案例:1.正常登陸2.密碼沒填
  • itest(愛測試) 6.6.0 發布,新增拖拽生成接口測試斷言
    可按測試包分配測試用例執行,也可建測試迭代(含任務,測試包,BUG,接口)來組織測試工作,也有測試環境管理,還有很常用的測試度量;對於發版頻繁,需求常變,itest還可導出用例,線下修改、執行,新增後再導入(同步)到線上;且可根據測試策略來設置測試流程,並可實時調整;在測試看板中,能查看迭代報告,測試包執行情況,測試任務進展,也可以在看板上直接執行用包用例。
  • Web Service接口測試
    Web service 接口測試一. web Service概念Web service使用與平臺和程式語言無關的方式進行通訊的一項技術, web service 是一個接口, 他描述了一組可以在網絡上通過標準的XML消息傳遞訪問的操作,它基於xml語言協議來描述要執行的操作或者要與另外一個web 服務交換數據, 一組以web服務在面向服務體系結構中定義的web
  • 接口測試用例設計
    >」進行關注,微信公眾號TestMadman設計思路1)   優先級--針對所有接口1、暴露在外面的接口,因為通常該接口會給第三方調用;2、供系統內部調用的核心功能接口;3、供系統內部調用非核心功能接口; 2)   優先級--針對單個接口
  • DOClever 5.5.0 自動化測試支持斷言,支持多接口快速聯調
    無論你是前端工程師,還是後端工程師,接口永遠都是兩者交互的橋梁,所以 DOClever 專為中小型團隊量身打造,旨在解決接口的管理,測試與數據生成,實現真正的一體化解決方案。目前DOClever已經完成了文檔,接口和測試三位一體的生態搭建,擁有線上用戶1w+,接口數10w+,每天日活600+,成功為滴滴,同程,58等網際網路公司提供了接口管理和自動化測試服務,我們接下來的發展方向是讓DOClever立志成為一個項目中後階段的掌舵手,從項目的接口,文檔,測試三個方面為開發者們提供更強大,更快捷的服務!
  • JMeter安裝與接口測試入門
    後來,因為其便捷的關聯功能、豐富的斷言以及Beanshell的存在,使JMeter成為接口測試的利器。1 JMeter安裝下載地址各版本JMeter下載地址,本文及後續都使用的5.1.1版本,即下圖中紅圈中。
  • 接口測試平臺代碼實現105:登錄態接口
    接口測試平臺,有個比較重要的功能,就是登陸態接口設置。那麼什麼是登錄態,一般的app接口 是需要一個token欄位來驗證 此時的用戶是否是登陸狀態,登錄的又是哪個帳號。     如果這個token不對,那麼後臺就會給當前帳號踢掉。而這個token是客戶端怎麼獲取到的呢?其實絕大部分都是從登陸接口獲取的。
  • SpringBoot單元測試保姆級教程,文末介紹Postman的基本使用
    接口MockMvcBuilder,提供一個唯一的build方法,用來構造MockMvc。主要有兩個實現:StandaloneMockMvcBuilder和DefaultMockMvcBuilder。第四部分只是針對Service層做了測試,但是咱麼也需要對Controller層(API)做測試,這時候就用到MockMvc了,它使得你無需啟動項目工程就能測試這些接口。
  • Postman教程大全
    5  tests:tests標籤功能比較強大,通常用來寫測試,它是運行在請求之後。支持JavaScript語法。postman每次執行request的時候,會執行tests。測試結果會在tests的tab上面顯示一個通過的數量以及對錯情況。
  • POST請求 報 HTTP status 415 錯誤(postman測試)
    今天用postman測試uat環境接口時遇到了一個問題?測試時出現了HTTP status 415 錯誤。感覺很疑惑,有點懵,在網上找了些資料,總算知道為什麼出現這個問題了,記錄下來,防止自己以後再出現這個問題,也正好分享給各位同學,希望都同學們有所幫助。
  • 乾貨| 接口測試用例和報告模板
    ,接口測試的步驟中,最重要的是將實現向接口發送預設請求,結果則要關注響應信息及後續處理。要注意的是,實際工作場景中我們可能還會對接口之間的串聯和混合場景進行測試。二、測試報告模板接口測試報告很多時候會和接口性能測試報告一起,如果要單獨報告的話,可以考慮以下內容:
  • 接口測試平臺代碼實現43:接口底層請求邏輯
    其實就是點擊Send按鈕,我們調用requests來發送請求,並把返回值顯示到調試層的返回體中即可,注意實際中這部分會越來越複雜,內容也會越來越多,本教程目前章節只會實現初始的各種請求難度,後續章節可能會不斷完善這塊。
  • Python接口測試實戰丨如何實現特殊字符集的自動化測試?
    在當前網際網路產品更新迭代的快節奏下,回歸測試的時間被嚴重壓縮,在金融領域和其他網際網路應用場景下,支付、轉帳、清算往往是核心功能,為了確保資金安全和快速到帳,接口在對用戶名、帳戶名中的特殊字符的正確處理顯得尤為重要。