細說postman變量中的local

關於local變量,手冊中的原文如下:

Local variables are temporary, and only accessible in your request
scripts. Local variable values are scoped to a single request or
collection run, and are no longer available when the run is complete.

1. 一知半解

按我之前的理解個local變量的生命週期是一次單獨的請求。一次最複雜的請求包括如下步驟:

集合pre-request
文件夾pre-request
請求中的pre-request
發送請求, 收到響應
集合test
文件夾test
請求中的test

也就是說,你可以在任何步驟裏通過pm.variables.set設置一個變量,然後在其後續步驟中通過pm.variables.get取變量值。但無論如何,變量的生命也僅存在於這單一的一個請求中,不能跨越請求。然而真的是這樣麼?

2. 跨越請求的local

來看這樣一個例子
Test集合中有request1和request2兩個請求。
我們在request1的Tests中設置local變量name=lunar, 如下圖所示:
在這裏插入圖片描述
在request2中,我們在get請求引用name值。同時在Tests中嘗試取request1中的name值。
在這裏插入圖片描述
接下來,我們整體運行一次Test集合
在這裏插入圖片描述執行後,在postman cosole中可以看到如下結果:
在這裏插入圖片描述
這說明我們在request2中可以取到request1中的name值!但name是local類型啊!居然跨越了請求!

3. 好像又不行了

還是2中的例子,我們換一種執行方式。
我們用手動send方式,分別發送request1和request2
在這裏插入圖片描述
執行後在postman console中看到如下結果:
在這裏插入圖片描述
很明顯,request2中沒能取到request1中設置的name。弄啥嘞!

4. 深入

再來好好看看手冊中的這句話:

Local variable values are scoped to a single request or collection run

首先,local變量的作用範圍是a single request run,也就是單一請求執行。這也是爲什麼會出現第3部分中的實驗結果。
然後,local變量的作用範圍還可以是a collection run! 什麼是a collection run呢?就是第2部分中的操作方式了。一個集合中的所有請求,從頭至尾執行一遍。整個過程中local變量都是有效的。這也是爲什麼會出現第2部分中的實驗結果。
可見,local變量的生命週期,是一次run!無論是單一請求的一次run,還是集合的一次run。只要這次run沒有全部執行完,local變量就是生效的。

5. 實踐中的用法

  1. 類似將請求A中的結果傳給請求B使用,可以使用local變量實現了。也就是
pm.variables.set
pm.variables.get
  1. 如果想在同一集合中實現單次發請求,仍然可以跨請求傳數據(第3部分的場景),那麼用collection變量比較適合(不得不說,個人認爲還是有這種需要求的,比如在寫測試時,這樣調試比較方便)。collection變量,一旦設置會一直存在,生命跨越所有run!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章