基于pytest框架下使用yaml文件进行token关联

1.要写两个读取yaml文件的方法
2.要写一个将token写入yaml文件名2的方法
3.要写一个清空yaml文件名2的方法
4.要写一个用例执行之前清空yaml文件名2的方法,要使用fixture固件
5.创建两个yaml文件
6.接下来就写用例方法了

1.要写两个读取yaml文件的方法

def read_yaml():
    with open("yaml文件名1", encoding="utf-8")as f:
        value = yaml.load(f,Loader=yaml.FullLoader)
        return value

def read_yaml1():
    with open("yaml文件名2", encoding="utf-8")as f:
        value = yaml.load(f,Loader=yaml.FullLoader)
        return value

2.要写一个将token写入yaml文件名2的方法

def write_yaml(data):
    with open("yaml文件名2",encoding="utf-8",mode="a")as f:
        value = yaml.dump(data,stream=f,allow_unicode=True)

3.要写一个清空yaml文件名2的方法

def clear_yaml():
    with open('yaml文件名2', mode='w', encoding='utf-8') as f:
        f.truncate()

4.要写一个用例执行之前清空yaml文件名2的方法,要使用fixture固件

# 在所有的接口请求之前执行清空文件里的内容
@pytest.fixture(scope="session",autouse=True)
def clear_token():
    clear_yaml()

5.创建两个yaml文件
yaml文件名1.yaml-装测试数据 如url,data,json,params,headers,validate等
yaml文件名2.yam-装token或者apikey,再或者下游接口的参数需要使用上游的json数据

  1. yaml文件名1.yaml内容:
apikey:
  - name: 用户登录获取apikey接口
    request:
      method: post
      url: https://xxx.xxxxx.xxx/developerLogin
      data:
        name: zxtest2
        passwd: 123456
      header:
    extract:
      apikey: $.api

user:
  - name: 关联apikey接口
    request:
      method: post
      url: https://xxx.xxxxx.xxx/loginUser
      data:
      	# 注意template 是字符串模板,用于替换字符串中的变量,
      	# 是 string 的一个类引用变量有 2 种格式 
      	# $variable 使用 $变量名 引用变量,
      	# ${variable} 使用 ${变量名} 大括号包起来
      	# 这块具体怎么使用建议网上搜一搜用法
        apikey: $api
        name: peakchao
        passwd: 123456
      header: none
  1. yaml文件名2.yam不需要提前写任何东西。

6.接下来就写用例方法了

class TestYamlData():

    #定义session的全局变量,以便于登录
    sess = requests.session()

    @pytest.mark.parametrize("args",read_yaml()["apikey"])
    def test_01(self,args):
        url = args["request"]["url"]
        data = args["request"]["data"]
        method = args["request"]["method"]
        res = TestYamlData.sess.request(method,url=url,data=data)
        json_data = res.json()
        # 提取apikey
        apikey = jsonpath.jsonpath(json_data, "$..apikey")[0]
        # 将apikey写入第二个 test_study_token.yaml 里面
        write_yaml({"apikey": apikey})
        print(json_data)

    @pytest.mark.parametrize("args1", read_yaml()["user"])
    def test_02(self, args1):
        url = args1["request"]["url"]
        # 注意template 是字符串模板,用于替换字符串中的变量,
      	# 是 string 的一个类引用变量有 2 种格式 
      	# $variable 使用 $变量名 引用变量,
      	# ${variable} 使用 ${变量名} 大括号包起来
      	# 这块具体怎么使用建议网上搜一搜用法
        # 使用template进行对第一个 test_study_yaml.yaml 里面的apikey: $api进行替换
        template = Template(args1["request"]["data"]["apikey"])
        # 将apikey的值进行读取
        args1["request"]["data"]["apikey"] = template.safe_substitute({"api": read_yaml1()["apikey"]})
        # 最后读取最终的结果,这时候会发现该变量$api的值已经替换成 test_study_yaml.yaml 里的内容了
        data = args1["request"]["data"]
        method = args1["request"]["method"]
        res = TestYamlData.sess.request(method, url=url, data=data)
        print(res.json())

if __name__ == '__main__':
    pytest.main()

7.整体代码:
yaml文件就是上面yaml文件名1.yaml的内容

from string import Template
import jsonpath as jsonpath
import yaml
import requests
import pytest


def read_yaml():
    with open("test_study_yaml.yaml", encoding="utf-8")as f:
        value = yaml.load(f,Loader=yaml.FullLoader)
        return value

def read_yaml1():
    with open("./test_study_token.yaml", encoding="utf-8")as f:
        value = yaml.load(f,Loader=yaml.FullLoader)
        return value

# 写入
def write_yaml(data):
    with open("./test_study_token.yaml",encoding="utf-8",mode="a")as f:
        value = yaml.dump(data,stream=f,allow_unicode=True)

# 清空
def clear_yaml():
    with open('./test_study_token.yaml', mode='w', encoding='utf-8') as f:
        f.truncate()

# 在所有的接口请求之前执行清空文件里的内容
@pytest.fixture(scope="session",autouse=True)
def clear_token():
    clear_yaml()


class TestYamlData():

    #定义session的全局变量,以便于登录
    sess = requests.session()

    @pytest.mark.parametrize("args",read_yaml()["apikey"])
    def test_01(self,args):
        url = args["request"]["url"]
        data = args["request"]["data"]
        method = args["request"]["method"]
        res = TestYamlData.sess.request(method,url=url,data=data)
        json_data = res.json()
        # 提取apikey
        apikey = jsonpath.jsonpath(json_data, "$..apikey")[0]
        # 将apikey写入第二个 test_study_token.yaml 里面
        write_yaml({"apikey": apikey})
        print(json_data)

    @pytest.mark.parametrize("args1", read_yaml()["user"])
    def test_02(self, args1):
        url = args1["request"]["url"]
        # 使用template进行对第一个 test_study_yaml.yaml 里面的apikey: $api进行替换
        template = Template(args1["request"]["data"]["apikey"])
        # 将apikey的值进行读取
        args1["request"]["data"]["apikey"] = template.safe_substitute({"api": read_yaml1()["apikey"]})
        # 最后读取最终的结果,这时候会发现该变量$api的值已经替换成 test_study_yaml.yaml 里的内容了
        data = args1["request"]["data"]
        method = args1["request"]["method"]
        res = TestYamlData.sess.request(method, url=url, data=data)
        print(res.json())

if __name__ == '__main__':
    pytest.main()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值