應用場景&參數關聯
場景一:
假設我們需要查看某個用戶的個人信息,一般情況下我們需要先登錄這個用戶才能查看用戶的個人信息,在接口自動化測試中,一般可以通過獲取登錄接口的token,在請求用戶信息接口的時候帶上這個token來實現“登錄並查看用戶個人信息”,這時候extract就發揮作用了,通過請求登錄接口,提取登錄token,將登錄token寫入查看用戶接口。
下面上實例:
/api/get-token 獲取到的token,通過變量$token 被 /api/users/$user_id 引用
- config:
name: testcase description
base_url: http://127.0.0.1:5000
variables:
device_sn: ${gen_random_string(15)}
- test:
name: /api/get-token
variables:
app_version: 2.8.6
os_platform: ios
request:
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
app_version: $app_version
device_sn: $device_sn
os_platform: $os_platform
json:
sign: ${get_sign($device_sn, $os_platform, $app_version)}
method: POST
url: /api/get-token
extract:
token: content.token
validate:
- eq: [status_code, 200]
- eq: [headers.Content-Type, application/json]
- eq: [content.success, true]
output:
token
- test:
name: /api/users/$user_id
variables:
# user_id: ${gen_random_userid(4)}
user_id: $user_id
request:
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
device_sn: $device_sn
token: $token
json:
name: user1
password: '123456'
method: POST
url: /api/users/$user_id
validate:
- eq: [status_code, 201]
- eq: [headers.Content-Type, application/json]
- eq: [content.success, true]
- eq: [content.msg, user created successfully.]
output:
user_id
提取response返回數據
應用場景二:
查看某個用戶的購買記錄,假設這一場景需要通過調用兩個接口實現,即通過調用登錄接口獲取用戶的userid字段,用戶購買記錄接口的請求參數即爲userid。
實現方法:
通過調用登錄接口,獲取並提取response內容,例如userid,再設置變量$userid,傳入購買記錄接口。
實例:
假設我們返回的數據格式如下,這時候我們要提取 userPhone
{
"success":true,
"statuscode":200,
"errorcode":0,
"errormsg":null,
"data":{
"userCity":"",
"designerFlag":false,
"userFrom":"EPS10",
"userOrganize":"df74f270-ac9b-4407-a46f-89898987777fff",
"userAuthState":0,
"isAutoPay":0,
"userNo":"RP201810291150907",
"userPhone":"13088889981",
"userOrgPackage":{
"orgPackageStatetime":"2020-01-19T11:39:52.000+0000",
"orgPackageSt":"2020-01-19T11:38:54.000+0000",
"orgPackageEt":"2021-01-19T11:38:54.000+0000",
"orgPackageRemark":null,
"orgPackageBuyMethod":1,
"orgPackagePayMethod":1,
"orgPackagePrice":0,
"orgPackagePriceRemark":null,
"orgPackageCt":"2020-01-19T11:39:52.000+0000",
"orgPackageUt":"2020-01-19T11:39:52.000+0000"
}
}
}
關於content對象
content對象相當於request中的r.content,content對象的提取方式有兩種,
content.key 和 content.int,關於提取list中的字段,用的方法是content.int
例如:
content.statuscode:提取的是 "statuscode":200的值 200
content.data.userPhone:提取的是 "userPhone":"13088889981"的值 13088889981