httprunner—參數關聯-extract

應用場景&參數關聯

場景一:

假設我們需要查看某個用戶的個人信息,一般情況下我們需要先登錄這個用戶才能查看用戶的個人信息,在接口自動化測試中,一般可以通過獲取登錄接口的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章