以下方法是用于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文件:
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
@pytest.fixture(scope='session')
def get_token():
token = "1111"
print ("hahha ")
return token
其他用例直接引入该函数即可,如下:
def test_login(data,get_token):
以上,个人觉着获取token可以用第三种方法,其他接口关联,例如获取product_id等参数关联可以用第二种方法比较好,方便直观。。。 后续有其他方法时,不断更新中
|