【業務場景】
用戶輸入正確的用戶名及密碼登錄系統,若該登錄用戶存在多個公司則需要選擇相應的公司進入系統(若僅有一家公司則直接進入系統),可瀏覽公司相關產品信息。
【實現邏輯】
用戶登陸成功后首先會獲取一個token值,出於安全機制會同步提供一個access_token。登錄時選擇公司及進入系統后的操作,如瀏覽產品會校驗token值與access_token值是否正常。
兩者均正常,則可操作成功,但未傳token值與access_token值或其失效的話,后續操作失敗。
【兩個接口在同一個線程組】
如果兩個接口在同一個線程組中,JMeter實現動態關聯比較簡單,通過添加Http信息頭管理器可以完成。
如下圖所示,登錄選擇公司時沒有傳相應token及access_token,導致選擇公司接口執行失敗,后續產品瀏覽相關操作也同樣失敗。
我們看下HTTP信息頭管理器中的內容,通過變量${token}獲取登錄請求下的token值,通過${token_tpye}${access_token}獲取AccessToken請求下對應token類型及access_token值。
啟用HTTP信息頭管理器后,再次執行可以正常通過。
_________________________________________________________________________________分割線_______________________________________________________________________________________________________
【思考】
如果登錄系統與瀏覽產品不在一個線程組下,那如何實現參數的動態關聯呢?
今天在學到這塊的時候,總結了下大致思路,不足之處希望大家指正。
【兩個接口不在同一個線程組】
現在登錄系統與瀏覽產品不在同一個線程組下,如果按照之前那種處理方式,添加一個HTTP信息頭管理器執行發現仍然報401錯誤,如圖所示。
【解決思路】
1.先提取上一個接口中的token與access_token值;
2.將提取出來的token與access_token設為全局變量;
3.同時需要用到Beanshell取樣器,目的用來執行一段java代碼;
4.這里需要用到函數助手__setProperty將token與access_token設為全局變量,將生成的代碼
${__setProperty(Token,${token},)}
${__setProperty(Token_Type,${token_type},)}
${__setProperty(Access_Token,${access_token},)}
放入Beanshell取樣器中;
5.在下一個接口中通過函數助手__property 生成代碼
${__property(Token,,)}
${__property(Token_Type,,)}
${__property(Access_Token,,)}
6.在下一個接口中,HTTP信息頭管理器中通過第5步生成的代碼獲取響應的token與access_token值。
【操作步驟】
1.通過函數助手__setProperty將token,token_type,access_token設置為全局變量,並放入BeanShell取樣器中;
2.通過函數助手__property生成可被調用的Token、Token_Type、Access_Token表達式和對應名稱,在下一個接口中,HTTP信息頭管理器中調用相應的值。
至此,接口已經調試通過。
該文章僅作為個人學習過程的總結,如有理解錯誤的地方歡迎大家指正,避免誤人子弟,哈哈哈。