知識來源於其他鏈接,這里記錄下。
首先我們不能把登錄模塊和交易的信息寫在一個線程組里面,僅一次控制器,這個配件只是在一個線程里面生效;
我們並發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