Httprunner2.0解決動態參數關聯方案

Httprunner框架背景介紹略

參考本博客的另一篇文章![搭建HTTPRUNNER框架接口測試DEMO](https://blog.csdn.net/u011466469/article/details/103049963)

熟知的動態參數關聯

  這裏不講參數化數據驅動:csv或者其他數據類型的形式
  先以一個用戶成功登錄之後獲取登錄token的參數關聯爲例
下一個接口需要登錄接口返回的token進行身份驗證
  • 思路:按照接口測試工具的用法:獲取登錄接口返回的token,或是代碼實現接口測試
  • 好在httprunner框架中,提供了extract關鍵字:提取響應報文中的動態參數
"extract":[{
	"token":"content.content.token"
	}]
	
tips:第一個content是接口響應報文的整體,後面.接的纔是json報文的關鍵字參數
  • 這是一種方法,但有一個弊端:如果有多個json測試用例文件都需要用到token,需要每個測試用例文件都請求一次登錄接口,那麼有沒有解決辦法呢?
在每個json測試用例中都加入一個登錄接口,並且提取token有效參數,在一定場景中引用並無不妥
  • 框架中支持debugtalk.py熱處理文件,那麼將登錄接口寫在debugtalk.py文件中,json測試用例文件${your_function()}調用即可:
#!/usr/bin/python3
'''
# -*- encoding=utf-8 -*-
Created on 2019年11月18日下午12:11:17
@author: qguan
@file:smallTools.debugtalk.py

'''
import requests
import json

def get_token(token=1):
    session=requests.Session()
    data= {         "app_version": "8.10.7",
                    "channel": "ios",
                    "device": "ios",
                    "device_name": "iPhone 8 Plus",
                    "device_uid": "9E6C9FFF-21DF-4B6D-B05B-FF4C30203406",
                    "mobile": "13800138000",
                    "password": "123456",
                    "push_token": "be279582bfbf63ec5f80ee79471ee75c",
                    "system_version": "13.1.3",
                    "zone": "+86"
                }
    headers={       "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
                    "__btg_request_identify_uuid": "1234567",
                    "User-Agent": "IeltsBro/1 CFNetwork/1107.1 Darwin/19.0.0"
                }
    res=session.request(method="POST", url="https://xxxxxxxxxxxxxx/v1/app_users/password_login", data=data,headers=headers)
    json_data=json.loads(res.text)
    
    if token==1:
        return json_data['content']['token']
    else:
        return json_data['content']['user_center_token']


if __name__ == '__main__':
    print(get_token(1))
  • 示例:json測試用例中調用debugtalk.py寫好的方法即可:
  "teststeps": [
           {
            "name": "/info/basic_info",
            "request": {
                "url": "https://xxxxxxx/info/basic_info",
                "params": {
                    "token": "${get_token(1)}"
                },
                "method": "GET",
                "headers": {
                    "User-Agent": "IeltsBro/1 CFNetwork/1107.1 Darwin/19.0.0"
                }
            },
            "validate": [
                {
                    "eq": [
                        "status_code",
                        200
                    ]
                },
                {
                    "eq": [
                        "content.status",
                        0
                    ]
                }
            ]
        }
    ]
  • 上面一看並沒有什麼不妥,但是當測試用例teststeps多的時候,在reports查看報告中發現每次token的值都不一樣?那麼是什麼意思?你懂的。爲了避免多次請求登錄接口該如何做?
  • 框架在json測試用例中提供了公共參數變量variables
"variables": {
	"token":${get_token(1)}
	}
  • 在測試用例直接$token引用參數即可,與extract關鍵字提取參數用法無異,保證了登錄接口只調用了一次。
如此簡單的解決了httprunner動態參數關聯的方案。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章