Postman腳本介紹
Postman支持JavaScript,它允許用戶向請求和集合添加動態行爲。通過使用JavaScript腳本,可以構建包含動態參數的請求,在請求之間傳遞數據。用戶可以在下面的兩個事件流中添加JavaScript代碼:
⑴在請求被髮送到服務器之前:在“Pre-request Script”標籤頁下添加預請求腳本
⑵在服務器響應內容被接收到以後:在“Tests”標籤頁下添加測試腳本
注:
用戶可以將預請求腳本和測試腳本添加到集合,文件夾,請求中。(集合中的請求或未保存到集合的請求中)
爲集合添加腳本
1、進入集合編輯頁面:依次點擊集合右側">"-->"..."-->"Edit"
2、進入到"集合編輯頁面"後,可以分別在"Pre-request Script"或"Tests"選項卡下編輯腳本
3、添加腳本後,運行集合
爲文件夾添加腳本
1、選擇需要添加腳本的文件夾,點擊右側的"..."-->"Edit"
2、進入到"文件夾編輯頁面"後,可以分別在"Pre-request Script"或"Tests"選項卡下編輯腳本
3、添加腳本後,運行文件夾(集合中的測試腳本也運行了)
爲請求添加腳本
打開請求直接在"Pre-request Script"或"Tests"選項卡下編輯腳本
腳本執行順序
1、在Postman中,單個請求的腳本執行順序如下所示
⑴與請求相關聯的預請求腳本將在請求發送之前執行
⑵與請求相關聯的測試腳本將在接收響應之後執行
2、對於集合中的每一個請求,腳本會按照下面的順序進行執行
⑴與集合關聯的預請求腳本將在集合中的每個請求之前運行
⑵與文件夾關聯的預請求腳本將在文件夾中的每個請求之前運行
⑶與集合關聯的測試腳本將在集合中的每個請求之後運行
⑷與文件夾關聯的測試腳本將在該文件夾中的請求之後運行
注:
對於集合中的每個請求,腳本將始終按照以下層次運行:集合級腳本、文件夾級腳本、請求級腳本。 請注意,此執行順序適用於前置請求和測試腳本
例:
1、構建目錄
分別在集合、文件夾(該例子中只有"請求1"在文件夾中)、請求(請求1和請求2)中編寫"Pre-request Script"和"Tests"腳本
2、運行結果
打開Postman的Console控制檯,查看請求運行結果
從運行結果可以看出:
1、對於存在文件夾中的請求,腳本執行順序爲:集合預請求腳本->文件夾預請求腳本->請求預請求腳本->請求->集合測試腳本->文件夾測試腳本->請求測試腳本
2、對於直接存在集合中的請求(無文件夾層),腳本執行順序爲:集合預請求腳本->請求預請求腳本->請求->集合測試腳本->請求測試腳本
預請求腳本
預請求腳本是在請求發送之前執行的代碼片段。對於前置請求腳本的使用一般有以下場景:
⑴設置動態請求頭信息
⑵設置動態請求參數信息
例:
比如需要在請求頭中添加一個timestamp字段,而該字段值是表示當前的時間戳,是一個動態變化值,所以該字段就需要動態設定。此時,我們就可以通過前置請求腳本來實現
步驟1:
⑴編輯集合預請求腳本:設置集合預請求腳本的好處是,該集合中所有的請求都可以用
⑵腳本的含義爲:將函數的返回值賦值給變量TimeStampHeader
步驟2:
構建請求:在請求中調用變量{{TimeStampHeader}},其值就是腳本中函數的返回值
步驟3:
運行集合並查看運行結果(此時沒有選擇環境變量)
注:
1、當發送請求時,預請求腳本將被執行,並且TimeStampHeader的值將被賦給變量{{TimeStampHeader}}
2、如果設置一個空的環境變量集來查看該變量的變量可能會更直觀一點(設置一個空的環境變量集,裏面沒有任何變量)
設置環境變量
運行集合並查看運行結果
多個請求使用不同的變量值:在運行集合時選擇創建的環境變量並勾選"保持變量"(如果不勾選的話,不會寫到環境變量中或前面的不會覆蓋前面的值)
注:從運行結果可以看出
1、通過腳本設置了環境變量"TimeStampHeader",並在請求構建器中調用了該變量,變量值爲腳本中函數的返回值
2、當然我們也可以直接在單個請求中設置(此時如果有環境變量集,就會直接將變量及其值寫到環境變量集中)
3、感覺整個過程是:腳本先將變量添加到環境變量集(沒有環境變量集時只是沒體現出來),然後構建器中調用環境變量集中的環境變量
單個請求
Postman內置腳本
另,Postman已經是一個比較成熟的軟件了,因此它自動提供了常用腳本示例,可以分別在"Pre-request Script"和"Tests"選下卡下選擇
設置獲取、獲取變量
與變量相關的函數有:
函數名 | 描述 |
pm.globals.set("variable_key", "variable_value"); | 設置一個全局變量 |
pm.environment.set("variable_key", "variable_value"); | 設置一個環境變量 |
pm.globals.get("variable_key"); | 獲取一個全局變量(的值) |
pm.environment.get("variable_key"); | 獲取一個局部變量(的值) |
pm.variables.get("variable_key"); | 獲取一個變量(的值) |
例:有道翻譯API接口
1、構建請求
API爲:http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=hello
⑴type:翻譯類型,值可以爲AUTO、ZH_CN2JA、ZH_CN2KR等
⑵i:待翻譯的文字,其值任意
2、設置環境變量
任意設置一個環境變量,在實際請求中無作用,只是爲了方便學習變量函數的使用(未設置全局變量)
3、編輯預請求腳本
可以直接在腳本框內手動輸入腳本,也可以點擊腳本輸入框右側的示例腳本來添加腳本
//設置變量
pm.globals.set("doctype","json");
pm.environment.set("type","AUTO");
pm.environment.set("i","心有猛虎,細嗅薔薇");
//獲取變量
global_doctype_value = pm.globals.get("doctype");
variable_doctype = pm.variables.get("doctype");
//獲取變量
environment_type_value = pm.environment.get("type");
variable_type = pm.variables.get("type");
//獲取變量
variable_name = pm.variables.get("name");
//打印變量
console.log("通過獲取全局變量函數獲取全局變量",global_doctype_value)
console.log("通過獲取變量函數獲取全局變量",variable_doctype)
console.log("通過獲取環境變量函數獲取環境變量",environment_type_value)
console.log("通過獲取變量函數獲取環境變量",variable_type)
console.log("通過獲取變量函數獲取變量",variable_name)//name變量也是一個環境變量,只是說不是腳本設置的
4、查看結果
通過Postman的console控制檯,可以清晰的看到請求的執行日誌
清除變量
與清除變量相關的函數有
函數名 | 描述 |
pm.globals.unset("variable_key"); | 清除一個全局變量 |
pm.environment.unset("variable_key"); | 清除一個環境變量 |
注:
1、清除變量後,在對應的環境變量集或全局變量集中就看不到對應變量的信息了,也就不能正常調用對應的變量了
2、要設置環境變量,環境必須處於活動狀態(要選中對應的環境變量集)
2、預請求腳本使用JavaScript編寫,語法與測試腳本完全相同除了響應對象不存在
發送請求示例腳本
通過腳本發送一個請求:可以在發送一個請求前通過腳本發送一個其他的請求
注:
1、上面腳本是postman提供了一個“Send a request”代碼段,它是已經封裝好的發送請求的方法,但更多時候我們需要自己去封裝請求
2、URL:https://postman-echo.com/get表示要發送的請求
3、function中的err表示請求返回的錯誤信息,response表示響應內容
4、console.log()是postman封裝的查看日誌的方法,可以調出postman的console控制檯來查看代碼運行情況,方便調試。想要打印出什麼由自己來定義,上面表示打印出json格式的響應信息
5、上面整個請求表示:
Postman中的方法sendRequest接收兩個參數:一個封裝好的請求或一個URL和一個函數function(有兩個參數:err, res),sendRequest方法對請求或URL進行處理後,將返回結果傳遞給function函數繼續處理
3、需要注意的是,這個代碼段默認只能發送get請求,且這樣直接使用的話無法指定請求頭等信息,當然大部分情況下我們不需要單獨指定一些請求信息,postman可以自動幫我們完成準備工作
腳本發送post請求
使用腳本發送psot請求的腳本格式如下:感覺其實get方法也可以寫成這樣,只是說get方法的腳本簡化了很多
示例代碼:下面請求中服務器接收的數據類型爲raw
// 構建一個請求
const echoPostRequest = {
url: 'https://postman-echo.com/post',
method: 'POST',//請求方法
header: 'headername1:value1',//請求頭部
body: {
mode: 'raw',//數據類型
raw: JSON.stringify({ key: 'this is json' })
}
};
//發送請求
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(err ? err : res.json());
});
注:
1、const是js中用來定義變量的關鍵字,由const定義的變量不可以修改,而且必須初始化
2、url表示要發送的請求url
3、method指定請求方法
4、header定製請求頭信息:很重要,假如要傳json格式的數據的話,需要在這裏定義請求頭爲Content-Type:application/json
5、body表示請求body中攜帶的參數:JSON.stringify()方法是將一個JavaScript值(對象或者數組)轉換爲一個JSON字符串;mode表示服務器接收的數據類型:比如form-data,x-www-form-urlencoded等
6、定義好const變量後再由sendRequest()來發送請求即可
接口依賴
在遇到有依賴的接口時,比如需要登錄或者需要從前一個接口的結果中獲取參數時,我們往往需要在該請求前先發送一下所依賴的請求, 我們可以在Pre-request script中使用pm.sendRequest實現
例:發送GET請求
1、構建請求
構建一個GET請求:請求使用到了name,該變量的值是另外一個請求返回來的數據
2、編輯腳本
⑴在腳本區域編輯腳本:在腳本中構建一個get請求,並使用該請求返回的數據作爲構建器中的請求的參數
⑵需要注意下預請求腳本中獲取響應是res.json()等(獲取預請求的響應),而在測試腳本中獲取響應是pm.response.json
pm.sendRequest("https://postman-echo.com/get?name=mouseA",function(err,res){
if (err){
console.log(err);
}
else {
console.log(res.json())//打印響應
console.log(typeof(res.json()))//查看響應類型
name = res.json()["args"]["name"]//提取響應中的有效信息
console.log(name)
pm.environment.set("name",name)//將提取出來的內容設爲環境變量
}
})
3、查看結果
在console中查看請求的運行結果,並查看環境變量集中變量的變化(將變量存到變量集中的好處在於其他請求可以用到這個變量)
例:發送表單格式Post請求
1、構建請求
構建了一個get請求:該請求就沒有選擇環境變量集(在腳本中設置的環境變量就不會被存到環境變量集中)
2、編輯腳本
在腳本區域編輯腳本:在腳本中構建一個post請求,並使用該請求返回的數據作爲構建器中的請求的參數
//構建請求
const SendRequest = {
url: "https://postman-echo.com/post",
method: "POST",//請求方法
body: {
mode: 'urlencoded', // 模式爲表單url編碼模式
urlencoded: 'name=mouse&password=123456'
}
};
// 發送請求
pm.sendRequest(SendRequest, function (err, res) {
console.log(err ? err : res.json());
name = res.json()["form"]["name"]
console.log(name)
pm.environment.set("name",name)//設置環境變量
});
3、查看結果
例:發送JSON格式Post請求
1、構建請求
2、編輯腳本
這裏需要注意的是:需要將Content-Type:application/json定義在請求頭中,否則會識別不了傳入的json參數
//需要發送的數據
var data = {
"name":"小小",
"password":"123456",}
// 構造一個post請求
const regRequest = {
url: "https://postman-echo.com/post",
method: 'POST',//請求方法
header: 'Content-Type: application/json', //注意要在Header中聲明內容使用的類型,使用表單時可以不聲明
body: {
mode: 'raw', // 使用raw(原始)格式
raw: JSON.stringify(data)//也可以使用下面那種寫法
//raw: JSON.stringify({ name: '小小', password: '123456' })
}
};
//發送請求
pm.sendRequest(regRequest, function (err, res) {
console.log(err ? err : res.json()); // 響應爲JSON格式可以使用res.json()獲取到JSON對象
console.log(err ? err : res.text());//也可以使用text()方法返回響應內容
name = res.json()["data"]["name"]
pm.environment.set("name",name)
});
3、查看運行結果
例:發送XML格式請求
發送XML格式和發送JSON格式差不多, 只要指定內容格式併發送相應的內容即可
//構造請求
const demoRequest = {
url: 'http://httpbin.org/post',
method: 'POST',
header: 'Content-Type: application/xml', // 請求頭種指定內容格式
body: {
mode: 'raw',
raw: '<xml>hello</xml>' // 按文本格式發送xml
}
};
//發送請求
pm.sendRequest(demoRequest, function (err, res) {
console.log(err ? err : res.json());
});