iT邦幫忙

0

Jmeter如何將第一支API的output傳到第二支API的input?

  • 分享至 

  • twitterImage
  •  

大家好 :
小弟最近在研究Jmeter , 才剛了解如何讀取外部資料來當參數 , 目前碰上了一個問題 , 那就是我想把第一支API執行過後的結果 , 裡面有一組數字當成下一支API的參數

我在模擬手機註冊新會員的API , 總共有2支API , 第一支API會用要註冊的手機號碼當參數 , 執行完第一支API後 , 它的message(output)裡面會有一個4位數的驗證碼 , 我要將這組驗證碼當成第二支要執行API的參數

我上網查了很久 , 看過很多篇文章 , 但都沒有說到output當成下一支API的參數 , 請問各位是否有遇過這樣狀況?是否有解法或是其它做法?


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

3
huangsb
iT邦好手 1 級 ‧ 2016-05-20 08:30:52

你可使用「Post-Processor Elements」。

若此元素附加到「Sampler」中,則它會在「Sampler」之後執行

若要了解可用的元素,請參考 19.8 Post-Processors 一節。

其中的 Regular Expression Extractor 可用來將網頁上的資料,存到變數,供後續的「Sampler(例如, HTTP Request )」使用。

若要加入Regular Expression Extractor,你可在某個 HTTP Request 元素上按右鍵 -> Add -> Post Processors -> Regular Expression Extractor 。

定義下列的欄位值:

  • Reference Name: 變數名稱
  • Regular Expression: 正規運算式
  • Template: 指定要產生的樣版字串,您可以使用 $1$ 參考符合字串的第一個群組,使用 $2$ 代表第二個群組,以此類推。
  • Match No: 指定要使用第幾個符合字串。

範例:

Reference Name: RequestVerificationToken
Regular Expression: <input name="__RequestVerificationToken".*value="([^"]*)"
Template: $1$
Match No: 1

後續的HTTP Request可以使用 ${RequestVerificationToken} 來參考該變數。

hbl030201 iT邦新手 5 級 ‧ 2016-05-26 13:03:33 檢舉

Dear huangsb:
謝謝你的回應,我這幾天努力的研究你說的做法,但是....我實在是有聽沒有懂.....
很抱歉我的理解力很差,我直接用我的操作的案例當例子,並告訴你我遇到的問題,可否請你再幫我解答一次嗎?謝謝
操作步驟如下:
1.我先打開Jmeter.bat
2.在主畫面的"測試計畫",按右鍵>新增>Threads(Users)>執行緒群組,結果新增了一個"執行緒群組"
3.點擊執行緒群組,在"執行緒數量"輸入"3"(假設我要一次註冊3個會員)
4.在"執行緒群組"按右鍵>新增>取樣>HTTP要求,新增一個"HTTP要求"
5.在"HTTP要求"的
(1)"主機名稱或IP"輸入"api.xxx.xxx.xxx.tw"(這支API是的全名
是api.xxx.xxx.xxx.tw/api/ooo/o/ooo/ooo/o/register)(歹勢,基於機密,某些
地方用o,x表示)
(2)"端口號碼"輸入"80"
(3)"Implementation"選擇"HttpClient4"
(4)"協定"輸入"http"
(5)"方法"選"POST"
(6)"路徑"輸入"api/ooo/o/ooo/ooo/o/register"(就api的tw後面全部貼上)
(7)由於這支API要輸入3個參數,分別是account、loginType、siId,由於我是
讀取外部資料,所以我在"Parameters"將它設成以下步驟:
(8)點擊"新增",新增一個參數,名稱打"account",值打"${account}"
(9)點擊"新增",新增一個參數,名稱打"loginType",值打"${loginType}"
(10)點擊"新增",新增一個參數,名稱打"siId",值打"${siId}"
6.接著我先跳到桌面新增一個待會要被這支API讀取的資料檔,做法如下
(1)新增一個"txt檔"
(2)"account"是手機號碼,"loginType"和"siId"都固定是1,所以檔案內容輸入
如下:
886900000001,1,1
886900000002,1,1
886900000003,1,1
(3)輸入完成,儲存檔案(檔名是"aaa")
7.接著在"執行緒群組"按右鍵>新增>設定元素>CSV資料設定,新增一個"CSV
資料設定"
8.點擊"CSV資料設定",並設定:
(1)"檔名"輸入"C:\Users\mars\Desktop\aaa.txt
(2)"變數名稱(以逗號分隔)"輸入"account,loginType,siId"
(3)其他欄位都用預設
9.接著在"執行緒群組"按右鍵>新增>接聽>檢視結果樹,新增一個"檢視結果樹"(檢視結果樹不做任何設定)
10.全部完成,儲存,然後按"開始"
11.執行結束,點擊"檢視結果樹"
12."Text"那一欄出現3個HTTP要求,都是黑字(表示成功)
13."Text"右邊那一欄,點擊"要求",裡面顯示的部分資料如下(先只列一筆):
POST http://api.xxx.xxx.xxx.tw/api/ooo/o/ooo/ooo/o/register

POST data:
account=886900000001&loginType=1&siId=1

14.點擊"回覆資料",裡面顯示的資料如下(最重要的onfirmCode)
{"status":{"code":1,"message":"SUCCESS"},"timestamp":"2016-05-26 11:38:28.464+0800","sessionId":null,"confirmCode":"3434"}

好了,我的問題來了,接著要執行第2支API,做法幾乎和上述雷同,但我需要用剛剛回覆資料裡的confirmCode來當參數值
15.第2支API全名是api.xxx.xxx.xxx.tw/api/ooo/o/ooo/ooo/o/regconfirm,
其中需要2個參數,一個是account,另一個是剛剛回覆資料裡的
confirmCode , account可以固定,但confirmCode需要執行完上一支API才能得到,請問這時該怎麼做?(可否一步一步說明?謝謝)

fillano iT邦超人 1 級 ‧ 2016-06-03 09:12:34 檢舉

在第一個API的HTTP要求點右鍵,選取「新增」->「後置處理器」->「正規表示式處理器」,就會看到 huangsb 大大說的東西。中英名稱不同請自行轉換。

我要留言

立即登入留言