Jmeter 線程之間傳遞變量


知識來源於其他鏈接,這里記錄下。

首先我們不能把登錄模塊和交易的信息寫在一個線程組里面,僅一次控制器,這個配件只是在一個線程里面生效;
我們並發10個線程,循環5次,那么就代表需要登錄10次,和循環次數無關,但是這樣就達不到我們只登錄一次的目的,那么我們需要另辟思路,把登錄模塊放到一個線程組里面,然后把獲取登錄的 token 放置到一個共享變量里面,再把其他模塊放到業務的線程組里面,需要token 的地方可以引用共享變量; 

在該請求下,添加BeanShell PostProcessor插件,使用__setProperty函數,將之前的變量轉換成全局變量

看一下截圖,設置共享變量:${__setProperty(name,value,)} 

這里寫圖片描述

 

在另外一個線程組中引用變量,使用${__P{}}函數:${__property(name)} 
這里寫圖片描述

 

 

其他例子說明,更有助於理解:

例子一:

1、獲取返回結果中的值,設置為變量

2、在該請求下,添加BeanShell PostProcessor插件,使用__setProperty函數,將之前的變量轉換成全局變量

3、在另一個線程組中引用該變量。使用${__P{}}函數

 

 4、這種引用關系存在執行的先后順序,需要在測試計划中設置執行完一個之后,再執行另一個

 

 

例子二及詳細說明:

jmeter的線程組之間是相互獨立的,各個線程組互不影響,所以線程組A中輸出的參數,是無法直接在線程組B中被調用的。

但是有時為了方便管理,我們可能是把各個接口單獨存放在不同的線程組中。拿token來說,雖然每一個線程組中我們也可以在放一個登錄請求,然后輸出一個token供此線程組使用,但這樣就比較繁瑣且冗余。此時我們就可以使用跨線程組傳遞參數來解決這樣的問題

 

方法:jmeter本身的內置函數中,“__setProperty”函數可以把某參數的值設置成jmeter本身的內置屬性,而jmeter的內置屬性是所有線程組都可以調用的,是全局變量。各個線程組調用時,只需使用調用jmeter屬性的函數“__P”來調用相應的屬性即可。

 

操作:以Token來示例,在登錄請求中添加一個正則表達式提取器(上一章有說),提取響應值中的token的值。然后再添加一個 Bean Shell PostProcessor 的后置處理器,在這個處理器中調用“__setProperty”函數,設置正則提取到的token的值為全局變量。然后在另外一個線程組中添加一個其他需要用到此token的請求,通過函數“__P”來調用token。

 

流程:

1.添加Bean Shell PostProcessor后置處理器

 

 

 

2. Bean Shell PostProcessor操作面板

Parametres:把需要操作的參數傳遞給Bean Shell PostProcessor。前面提取出來的Token的值,就把參數Token寫入

Script:  string Token=bsh.args[0];     把Bean Shell PostProcessor接收到的參數值,賦值給某參數。0是第一個值。

                 ${__setProperty(requestToken,${Token},)};        調用函數__setProperty,把Bean Shell PostProcessor中的參數Token的值賦值給requestToken,並設置requestToken為jmeter內置屬性。

 

 

 

3. 其他線程組調用Token的值

 

 

轉載:https://blog.csdn.net/Jasonliujintao/article/details/71542021

https://blog.csdn.net/qq_35885203/article/details/77562644

https://www.cnblogs.com/xuehuiganen/p/8205136.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM