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动态参数关联的方案。

你可能感兴趣的:(Python工具类集合)