python+pytest+yaml框架接口关联参数存储&获取

以下方法是用于python+pytest+yaml框架下,多个接口之间的参数关联。例如:登录接口返回的token用于下一个接口使用。

方法一:使用os.environ来存储及获取参数

yaml文件编写如下,动态获取的参数为$sms

-
  case_id: login_success
  title: 获取登录需要的参数
  url: /reglogin
  method: get
  data:
    mobile: 18829354854
    sms: $sms
    timestamp: 1629858222
  ex_result:
    code: 0
    result: {"expire": 3000}

在登录接口下的py文件中,将获取到的参数存起来,语法如下:

os.environ["sms"] = "6666"

封装获取完整测试数据的函数,即将yaml中的动态参数补齐:

import yaml
import os
from string import Template
import json

def replace_yaml(data,**kwargs):
    tempTemplate1 = Template(json.dumps(data))
    dic = {}
    if len(kwargs) == 0 :
        data = tempTemplate1.safe_substitute(os.environ)
    else:
        for key in kwargs:
            dic[key] = kwargs[key]
        data = tempTemplate1.safe_substitute(dic)
    data = json.loads(data)
    return data

在其他接口中调用replace_yaml函数,获得完整的参数:

方法一:部分参数动态获取,例如sms、appkey
new_data = replace_yaml(data,sms=os.environ["sms"],appkey="20")
方法二:全部os.environ中有存储且xml中设置动态获取的参数,进行动态获取
new_data = replace_yaml(data)

方法二:定义全局类变量类,存储参数

新建全部变量类py文件:

@staticmethod
class GlobalData(object):
   cookie = {}

登录接口中获取token,将token存入类变量中,语法如下:

from util.get_globals_data import GlobalData

GlobalData.cookie["token"] = "DFSAFSDGAFSDGjgiojsdofigjsdg"

其他接口中,直接从类变量中取参数token:

from util.get_globals_data import GlobalData

def test_page():
    data = GlobalData.cookie["token"]
    print ("11111111111111:{}".format(data))

方法三:conftest.py文件内,fixture获取

conftest.py文件编写请求登录接口,获取token等必须的参数:

import pytest

# scope='session',session代表仅运行一次
@pytest.fixture(scope='session')
def get_token():
    token = "1111"
    uid = "22222"
    print ("hahha ")
    return token,uid

其他用例直接引入该函数即可,如下:

def test_login(data,get_token):
	token = get_token[0]
	uid = get_token[1]

方法四:使用装饰器,封装存参和取参

创建get_globals_data.py文件

def xx(fun):
    ins={}
    def _xx(*args,**kw):
        if fun not  in ins:
            ins[fun]=fun(*args,**kw)
        return ins[fun]
    return _xx

@xx
class Pool(object):
    def __init__(self):
        self.data = {}

    def set_value(self,keyname,valuename):
        self.data[keyname] = valuename

    def get_value(self,keyname):
        valuename = self.data[keyname]
        return valuename

例如test_passport.py文件使用的时候:

from util.get_globals_data import Pool

Pool().set_value("uid","11111")
Pool().get_value("uid")

后续有其他方法时,不断更新中

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值