前言
現在很多接口的登錄是返回一個json數據,token值在返回的json里面,在jmeter里面也可以直接提取json里面的值。
上一個接口返回的token作為下個接口的入參。
案例場景
我現在有一個登陸接口A,登陸成功后返回一個token值。有一個獲取綁定卡號的接口B,但是接口B必須要先登錄后傳登錄的token才能訪問
A接口登錄接口文檔基本信息
- 訪問地址:http://127.0.0.1:8000/api/v1/login/
- 請求類型:POST
- 請求頭部:application/json
- 請求參數:{"username":"test", "password":"123456"}
A接口的請求和返回的報文信息如下
D:\>http http://127.0.0.1:8000/api/v1/login/ username=test password=123456 -v
POST /api/v1/login/ HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 42
Content-Type: application/json
Host: 127.0.0.1:8000
User-Agent: HTTPie/1.0.3
{
"password": "123456",
"username": "test"
}
HTTP/1.1 200 OK
Allow: POST, OPTIONS
Content-Length: 109
Content-Type: application/json
Date: Sat, 21 Sep 2019 15:37:06 GMT
Server: WSGIServer/0.2 CPython/3.6.0
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN
{
"code": 0,
"msg": "login success!",
"token": "234af73571da46ade79ea6a74961b1d23d609b79",
"username": "test"
}
B接口獲取綁定卡號的接口文檔基本信息
- 訪問地址:http://127.0.0.1:8000/api/v1/user/info/
- 請求類型:GET
- 請求頭部:Content-Type: application/json
- 請求頭部token參數: Authorization: Token xxxxx login token xxxxx
登錄請求
先在jmeter里面添加http請求,填登錄接口的參數
HTTP信息頭管理器添加post請求類型:Content-Type: application/json
運行之后查看結果數,可以看到正確的返回我們想要的token值
Json 提取器
添加后置處理器-Json提取器
從返回的結果中提取token值
返回的結果
{
"code": 0,
"msg": "login success!",
"token": "234af73571da46ade79ea6a74961b1d23d609b79",
"username": "test"
}
JSON提取器參數說明:
- Names of created variables 參數名稱
- JSON Path expressions 提取表達式
- Match No.(0 for Random) 匹配規則,-1所有,0隨機,1第一個
- Compute concatenation va 如果有匹配到多個值,選擇此項,會將全部值保存到_ALL,並使用逗號分割每個值,注意Match No. (0 for Random)需要為-1才有效,不然只能匹配到一個值了
- Default Values 沒提取到就給默認值
關聯請求
下個請求頭部需要用到上面的token值
添加頭部管理器,引用token參數 ${token}
查看結果,請求頭部關聯參數成功
查看響應結果也能正確的返回
遇到的坑
參數關聯的時候,遇到一個坑,請求的參數都對,但是報錯:
Response code: Non HTTP response code: org.apache.http.NoHttpResponseException
后來查資料,需要把第一個請求的的客戶端實現用JAVA方式實現,才能正常的關聯成功