接口測試之postman

一、Postman功能簡介

3天精通Postman接口測試,全套項目實戰教程!!

Postman是由Postdot Technologies公司打造的一款功能強大的調試HTTP接口的工具。在做接口測試的時候,Postman相當于一個客戶端,它可以模擬用戶發起的各類HTTP請求,將請求數據發送至服務端,獲取對應的響應結果,從而驗證響應中的結果數據是否和預期值相匹配;并確保開發人員能夠及時處理接口中的bug,進而保證產品上線之后的穩定性和安全性。進入postman官網Download Postman | Get Started for Free

工作原理:

  1. 在Postman中輸入請求地址,并點擊Send按鈕后;
  2. 對應的應用服務器接收到該請求,并且返回對應的響應報文;
  3. Postman接收到響應報文后,并通過友好的方式進行可視化的顯示在界面上。

二、常用接口測試工具以及返回數據

常用的接口測試工具有postman、jmeter

接口返回數據的格式一般有:json、html、xml

  1)json格式

一般有三組數據:{"code":200,"message":"請求成功","dataMap":{"..."}}

code:返回的狀態碼

message:對返回信息或者狀態錯誤的解釋說明

dataMap:真正的返回數據

  2)html格式

復制代碼

<html><title></title><body><code>200</code>......</body>
</html>

復制代碼

  3)xml格式
<?xml?version="1.0"encoding="utf-8"><code>200</code>......
</xml>

三、接口測試協議

接口測試協議
1.webservice協議:

接口地址:http://......?wsdl

2.dubbo協議:

接口地址以dubbo://......

適用于少量數據的傳輸

3.http協議(90%):

接口地址:http://.....

http端口為: 80

https = http+ssl 安全傳輸協議 ,端口為443

市面上主要使用HTTP協議進行數據傳輸,所以我們主要學習這個協議。

什么是http協議?

http是超文本傳輸協議,主要用于瀏覽器和服務器之間傳輸數據,交互有兩個部分:請求和響應。

請求: get、post、put、delete

請求部分一般包含的內容:

1、請求行:請求方式、請求地址和協議版本

2、請求頭:HTTP協議使用HTTP頭來傳遞請求的元信息。HTTP頭是一個用冒號分隔的名稱/值對,冒號前面是HTTP頭發名稱,后面是HTTP的值,例如:

accept:application/json ---客戶端可以接收的數據格式

X-Requested-with:XMLHttpRequest --異步請求

user-agent: --客戶端的用戶

Host:--請求的主機地址

cookie:--cookie信息(請求的)

accept-encoding: gzip, deflate, br--壓縮方式

connection: keep-alive? ---- 保持長鏈接

content-type: application/json;charset=UTF-8? --- 客戶端發送的數據格式

3、空行: 發送回車符和退行,通知服務器一下不再有請求頭;

4、消息體: HTTP請求中帶有查詢字符串時,如果是GET方法,查詢字符或表單數據附加值請求行中,則消息體中就沒有內容;如果是POST方法,查詢字符串或表單數據及添加在消息體中。

2xx:表示請求發送成功;

3xx:表示資源發生轉移,俗稱重定向;

4xx: 表示接口的路徑找不到,客戶端錯誤;

5xx:表示系統內部異常,一般存在接口缺陷或者請求內容不正確,服務器錯誤。

四、postman的頁面內容

主界面如下:

Params:用于在get請求傳參

Authorization:postman自帶的鑒權功能

Headers:請求頭

Body:post請求傳參

  -- none:沒有參數

  -- form-data:既有文件又有鍵值對

  -- x-www-form-urlencoded:只傳輸鍵值對

  -- raw:JSon、TXT、xml、HTML、javasripts

  -- binary:把文件以二進制方式傳輸

Pre-request Script:接口請求之前的腳本,用js格式寫

Tests:斷言的代碼

響應的功能頁面:

Body:響應內容。

  --Pretty? 是json格式數據

  --Raw? ?是文本格式

  --Preview 是網頁格式

Cookies:響應的cookies信息

Headers:響應的頭部信息

TestResult:斷言的結果

五、發送請求與查看相應

  1)GET請求
  • 選擇請求方式為GET,填寫接口測試地址URL和輸入參數;
  • 確認填寫無誤后,點擊Send按鈕發送請求,查看response內容;

  2)POST請求

選擇請求方式為POST,采用以下幾種傳參方式進行接口測試;

  (1)URI 傳參

  (2)form-data 傳參?

會將表單的數據處理為一條消息,以標簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件。當上傳的字段是文件時,會有Content-Type來說明文件類型;content-disposition,用來說明字段的一些信息

問題:
對接接口,發現對方的接口使用form-data進行數據提交,直接使用requests庫的data參數對接,會報參數錯誤: 

復制代碼

params = {'timestamp':timestamp,'nonce':nonce,'apikey':APIKEY,'signature': signature
}
data = {'name': name,'phone': phone,'idnum': idnum,'products': [201,]
}
resp = requests.post(URL, data=data, params=params,verify=False, timeout=10)                   

復制代碼

執行結果:

解決方案

這一塊Requests包做的不是很好,做法具體如下:
一種是手動組建form-data并加上headers;
另一種是通過files參數傳遞form-datal;

復制代碼

# 方案一:
params = {'timestamp':timestamp,'nonce':nonce,'apikey':APIKEY,'signature': signature
}
payload = """------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data;name=\"phone\"\n\n{}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"idnum\"\n\n{}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data;name=\"name\"\r\n\r\n{}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"products\"\r\n\r\n {}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--""".format(phone, idnum, name, [201,])
headers = {"content-type": "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
}
resp = requests.post(URL, data=payload, params=params,verify=False, timeout=10, headers=headers)# 方案二:
import json
params = {'timestamp':timestamp,'nonce':nonce,'apikey':APIKEY,'signature': signature
}
data = {'name':(None, name),'phone': (None, str(phone)),'idnum': (None, idnum),'products': (None, json.dumps([201,]))
}
resp = requests.post(URL, files=data, params=params,verify=False, timeout=10)
print resp.status_code
print resp.request.url
print resp.request.body
print resp.text                     

復制代碼

  (3)x-www-form-urlencoded 傳參

會將表單內的數據轉換為鍵值對

  (4)raw 傳參

可以上傳任意格式的文本,可以上傳text、json、xml、html等?

提示:在編輯器中選擇文本并按CMD / CTRL + B可以自動美化XML / JSON內容。

  (5)binary 傳參

只可以上傳二進制數據,通常用來上傳文件,由于沒有鍵值,所以,一次只能上傳一個文件。

multipart/form-data與x-www-form-urlencoded區別:multipart/form-data:既可以上傳文件等二進制數據,也可以上傳表單鍵值對,只是最后會轉化為一條信息;x-www-form-urlencoded:只能上傳鍵值對,并且鍵值對都是間隔分開的。

六、Cookies 和Code

Postman通過選項卡布局,用于在構建器中發送和管理API請求。上半部分是請求構建器,下半部分是響應查看器。

  Cookies——管理cookie模式是通過點擊cookie鏈接訪問的。該特性允許你管理與請求相關的cookie。
  Code——生成的代碼片段模式通過保存按鈕下面的最右邊的Code鏈接。該特性允許你生成與請求相關的代碼片段,該請求支持20多種語言(http、java、go等語言)

(一)cookie鑒權的原理:

當客戶端第一次訪問服務器時,服務器就會生成cookie,并且把生成的cookie信息放到響應頭的set-cookie字段里面,然后發送給客戶端,客戶端接收到cookie之后就會保存起來,然后在2-N次請求服務器的時候自動的帶上cookie信息實現鑒權。

(二)cookie分類

會話cookie:保存在內存中,當瀏覽器關閉之后會自動消失

持久化cookie:保存在硬盤中,瀏覽器關閉后不會消失只有當持久化的時間到期了才會消失。

name:cookie的名稱

value:cookie的值

domain:cookie作為的ip地址

path:cookie所在的服務器上面的項目路徑

exprise:失效時間

?七、環境變量和全局變量

  (1)環境變量和全局變量

在企業當中,一般有開發環境、測試環境和線上環境,有一些企業也會有預發布環境,我們在做接口測試的時候會發現,這些環境中接口的地址除了ip地址不一樣,其他的地方都是一樣的,我們在實際測試中,不可能每個環境都寫一套測試邏輯,這個時候就需要使用到環境變量,環境變量為全局變量。

注意:當全局變量和環境變量的名稱一致時,環境變量的權限比較大。

將接口地址中的IP地址參數化格式為{{ip}},試著運行一次

  (2)postman動態參數

一)postman內置動態參數

{{}}中加"$"代表示動態參數,不加"$"表示是全局變量或者是環境變量

{{$timestamp}}? 生成當前的時間戳

{{$randomint}}? ?生成0-1000的隨機數

{{$guid}} 生成隨機的guid的字符串

二)自定義動態參數

也可以在Pre-request Script(發送請求之前)里面定義動態參數

//請求之前 自定義一個時間戳
var now_time = Date.now();
pm.globals.set("now_time",now_time)

八、接口關聯

在實際工作中,有一些變量的值是動態變化的,并且下一個接口請求的時候需要傳入該參數的值,比如token。

我們需要先在上一個接口的響應中獲取token的值,并將該值設置為全局變量,再在下一個接口中使用參數化的形式將該值傳入,即可實現了接口的關聯。

1、接口關聯方法一:json提取器

復制代碼

//把responseBody轉為json字符串
var jsvalue = JSON.parse(responseBody);
//將jsvalue的值打印到控制臺上
console.log(jsvalue)
// 提取token的值,并保存到全局變量
pm.globals.set("token", jsvalue.token);
復制代碼

復制代碼

2、接口關聯方法二:正則表達式提取器

復制代碼

{"tag":{"id":100,"name":"張三"}
}

復制代碼

假如響應數據的內容如上,我們現在要提取100,則在Tests中使用正則表達式提取的規則為 responseBody.match(new RegExp('"id":(.+?),')),這個方法表示匹配"id":后面且,之前的內容,如果將該結果打印到控制臺,為一個數組:[" "id":100,","100"],若只取到100,則需要再加上索引

//通過正則表達式提取
var value = responseBody.match(new RegExp('"timestamp":(.+?),'))[1];
console.log(value );

3、接口關聯方法二:cookie提取器

如下圖所示,我們需要提取響應結果Cookies中的值,并將結果打印到控制臺上。

方法如下:

//提取Cookies中SERVERID中的Value值并保存在cookies_serverid變量中
var cookies_serverid = postman.getResponseCookie('SERVERID').value
//將變量cookies_serverid中的值打印到控制臺
console.log(cookies_serverid)

4、接口關聯方法三:hearder信息提取

//獲取響應headers的值,需要從響應頭取值
var Content_Type = postman.getResponseHeader('Content-Type');
console.log(Content_Type)

九、調試和日志

Postman控制臺類似于瀏覽器的開發者控制臺,不同之處在于它針對API開發進行了調整。如果API或API測試沒有按照我們期望的那樣進行,那么Postman控制臺將是我們進行調試的得力工具。只要Postman控制臺窗口處于打開狀態,所有的API活動都將記錄在此處,我們可以通過這里查看底層發生了什么。

Postman控制臺會記錄以下信息:

  • 發送的實際請求,包括所有底層請求頭和變量值等;
  • 服務器返回的最原始的響應報文,這里輸出的響應報文是沒有被Postman處理的響應報文;
  • 用于請求的代理配置和證書;
  • 測試腳本或預先請求腳本的錯誤日志;
  • 使用console.log()輸出的內容。

在腳本中使用consolle.info()或console.warn()將有助于確認執行的代碼行。這個使用方法和JavaScript中的console.log()類似

在應用程序菜單中前往View,然后單擊“Show Postman Console”或使用鍵盤快捷鍵(CMD / CTRL + ALT + C)。每個調用及其標頭和有效負載都將記錄到Postman控制臺。

十、斷言

要想完整的實現接口測試,自然是少不了斷言的,在postman中,斷言的內容寫在Tests中,

關于postman語法postman腳本語法大全,不包括插件語法 - 執劍之心 - 博客園

系統提供了八種斷言方式:

八種斷言方式:

復制代碼

//1、返回的狀態碼為200
pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});//2、返回的結果中包含一個指定的字符串
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});//3、對返回結果做json字段檢查
pm.test("Your test name", function () {var jsonData = pm.response.json();pm.expect(jsonData.value).to.eql(100);
});//4、斷言返回的結果等于一個字符串
pm.test("Body is correct", function () {pm.response.to.have.body("response_body_string");
});//5、斷言響應頭中包含有指定的響應頭
pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});//6、斷言接口請求的時間少于200ms
pm.test("Response time is less than 200ms", function () {pm.expect(pm.response.responseTime).to.be.below(200);
});//7、斷言一個post請求返回的狀態碼是否在指定的范圍之間
pm.test("Successful POST request", function () {pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});//8、斷言返回的狀態碼信息中包含指定的字符串
pm.test("Status code name has string", function () {pm.response.to.have.status("Created");
});

復制代碼

?十一、導入和導出

  1)Colltions測試數據包導出導入
  • 導出

  選擇要導出的數據包,點擊Export;

  • 導入

點擊Import按鈕,選擇要導入的文件;

  2)工作環境

選擇Settings->data,在Export data下點擊Download導出工作環境,在Import data下點擊選擇文件導入工作環境

十二、批量執行測試用例

1)在進行批量運行的時候 ,使用的數據驅動為csv或者是json? csv文件的編碼必須是utf-8

2)在請求參數里面取數據和取全局變量的方法一直({{變量名稱}}),在斷言里面取數據文件的值使用:data["變量名稱"]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87549.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87549.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87549.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【記錄】Ubuntu安裝Mysql

本文記錄Ubuntu系統下安裝Mysql 1 查看系統信息 lsb_release -a 2 使用apt下載安裝Mysql 1 打開終端,首先更新你的系統包索引,以確保所有包都是最新的 sudo apt update 2 安裝mysql服務器 sudo apt install mysql-server (也可以選擇對應的mysql-server 版本) 3 查看mysql狀…

【深度學習:進階篇】--4.1.循環神經網絡(改進)

RNN存在的問題&#xff1a;梯度爆炸&#xff0c;長期依賴參數量過大等問題 目錄 1.GRU(門控循環單元) 1.1.什么是GRU 1.2.直觀理解 1.3.本質解決問題 2.LSTM(長短記憶網絡) 2.1.作用 3.結構擴展與效率優化? 1.GRU(門控循環單元) 2014年&#xff0c;出現的算法&#x…

中心化錢包安全方案

先來看獨立的密鑰安全技術 1 自建或單租戶 CloudHSM 優點&#xff1a;密鑰永不出硬件&#xff0c;無法導出&#xff0c;只能對外提供公鑰。 交易時&#xff0c;外部應用把消息哈希傳進去簽名&#xff0c;再把簽好名的結果拿出來用。 這種方式安全性拉滿&#xff0c;但成本高、…

Android 實現底部彈窗

文章目錄在 Android 中創建優雅的底部選項彈窗 (BottomSheetDialogFragment) &#x1f4f1;第一步&#xff1a;設計底部彈窗的布局 &#x1f3a8;第二步&#xff1a;創建 BottomSheetDialogFragment 類 ??第三步&#xff1a;觸發并顯示底部彈窗 &#x1f680;在 Android 中創…

LAN8720 寄存器概覽和STM32 HAL庫讀寫測試

目錄 寄存器0x00:Basic Control Register&#xff08;BCR&#xff09;0x01:Basic Status Register&#xff08;BSR&#xff09; 連接測試寄存器讀寫測試 補充 寄存器 // 0x00:Basic Control Register&#xff08;BCR&#xff09; BIT15:Soft Reset 寫1復位&#xff0c;寫1之…

滲透測試深度分析:空密碼Administrator賬戶引發的安全風暴

滲透測試深度分析&#xff1a;空密碼Administrator賬戶引發的安全風暴0x01 測試背景 在內網滲透測試中&#xff0c;對Windows主機 192.168.1.98 使用 enum4linux 進行枚舉&#xff1a; enum4linux -u Administrator -p -a 192.168.1.98關鍵發現&#xff1a;Administrator賬戶空…

OpenCV CUDA模塊設備層-----高效地計算兩個 uint 類型值的帶權重平均值

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 OpenCV 的 CUDA 模塊&#xff08;cudev&#xff09; 中的一個設備端內聯函數&#xff0c;用于高效地計算兩個 uint 類型值的帶權重平均值。 該函…

[學習記錄]Unity毛發渲染[URP]-Shell基礎版

毛發&#xff0c;無論是人類的頭發、動物的皮毛&#xff0c;還是奇幻生物的絨毛&#xff0c;都是構成生命感和真實感不可或缺的元素。它對光線的獨特散射、吸收和反射&#xff0c;賦予了物體柔軟、蓬松、有生命力的質感。它不僅僅是讓角色看起來更“毛茸茸”那么簡單&#xff0…

數字孿生技術引領UI前端設計潮流:增強現實(AR)的集成應用

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;AR 與數字孿生融合的設計革新浪潮在體驗經濟與技術融合的雙重驅動下&…

碰一碰發視頻源碼搭建與定制化開發:支持OEM

在近場通信&#xff08;NFC&#xff09;技術與移動終端深度融合的背景下&#xff0c;“碰一碰發視頻” 功能憑借便捷的交互體驗&#xff0c;在商業推廣、信息傳遞等場景中快速落地。不同于標準化解決方案的黑盒模式&#xff0c;基于源碼的定制化開發能從底層優化傳輸效率、提升…

Ubuntu 24.04 安裝配置 Redis 7.0 開機自啟

下載源碼 wget https://download.redis.io/releases/redis-7.0.12.tar.gz安裝依賴 & 準備環境 sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential tcl curl解壓 tar xzf redis-7.0.12.tar.gz編譯安裝 cd redis-7.0.12 make -j$(nproc) …

【Linux 系統】基礎IO——Linux中對文件的理解

13.基礎IO(1) 文章目錄13.基礎IO(1)文件的基本概念&#xff1a;內容與屬性文件的打開機制&#xff1a;fopen 和 open被打開的文件與磁盤文件的區別文件的內核數據結構文件與進程的交互方式標準輸入/輸出/錯誤與文件流系統調用與文件描述符文件打開模式&#xff08;r/w/a/a&…

Go調度器的搶占機制:從協作式到異步搶占的演進之路|Go語言進階(7)

想象一下這樣的場景&#xff1a;你在餐廳排隊等位&#xff0c;前面有個人點了餐卻一直霸占著座位玩手機&#xff0c;后面的人只能干等著。這就是Go早期版本面臨的問題——一個goroutine如果不主動讓出CPU&#xff0c;其他goroutine就只能餓著。 今天我們來聊聊Go調度器是如何解…

開源模型應用落地-讓AI更懂你的每一次交互-Mem0集成Qdrant、Neo4j與Streamlit的創新實踐(四)

一、前言 在人工智能迅速發展的今天,如何讓AI系統更懂“你”?答案或許藏在個性化的記憶管理之中。Mem0作為一個開源的記憶管理系統,正致力于為AI賦予長期記憶與個性化服務能力。通過結合高性能向量數據庫Qdrant、圖數據庫Neo4j的強大關系分析能力以及Streamlit的高效可視化交…

基于微信小程序的校園二手交易平臺、微信小程序校園二手商城源代碼+數據庫+使用說明,layui+微信小程序+Spring Boot

school-market 介紹 基于微信小程序的校園二手交易平臺 功能結構圖 軟件架構 系統分為三個端&#xff0c;分別是客戶端、管理端、服務端&#xff1b; 客戶端&#xff1a;使用原生微信小程序實現 管理端&#xff1a;使用Layui實現 服務端&#xff1a;使用Java SpringBoot…

IDEA與Gradle構建沖突,導致java重復類的解決方案

項目構建總是報錯&#xff1a;錯誤提示1&#xff1a;java:重復類或錯誤提示2&#xff1a;Internal error in the mapping processor: java.lang.RuntimeException: javax.annotation.processing.FilerException: Attempt to recreate a file排查發現build/generated/sources/an…

如何調節筆記本電腦亮度?其實有很多種方式可以調整亮度

長時間面對屏幕工作、學習或娛樂&#xff0c;很多人會感到眼睛干澀、疲勞&#xff0c;甚至出現視力下降等問題。其實&#xff0c;這些問題的背后&#xff0c;往往隱藏著一個看似簡單卻極易被忽視的設置—屏幕亮度。 合適的屏幕亮度不僅能提升視覺體驗&#xff0c;還能有效緩解…

國際數字影像產業園創作空間升級 打造更優質營商環境

國際數字影像產業園創作空間升級后表現顯著&#xff0c;聚焦設施數字化與用戶體驗優化。整體提升了創意生態系統的競爭力&#xff0c;有效吸引全球企業。 升級核心改進 基礎設施現代化&#xff1a;引入智能硬件如5G網絡和云渲染設備&#xff0c;支持高清影像處理&#xff0c;…

淺談 webshell 構造之如何獲取惡意函數

前言這篇文章主要是總結一下自己學習過的如何獲取惡意函數的篇章&#xff0c;重點是在如何獲取惡意函數get_defined_functions(PHP 4 > 4.0.4, PHP 5, PHP 7, PHP 8)get_defined_functions — 返回所有已定義函數的數組我們主要是可以通過這個獲取危險的函數比如比如當然還有…

Python 單例模式與魔法方法:深度解析與實踐應用

在 Python 編程領域,設計模式解決常見問題的通用方案,而魔法方法則是 Python 語言賦予類強大功能的特殊接口。單例模式和魔法方法看似獨立,實則緊密關聯,魔法方法常被用于實現單例模式。深入理解并熟練運用它們,能夠幫助開發者編寫出結構清晰、高效且具有高復用性的代碼。…