yaml数据驱动

yaml读取

# yaml格式
# 语法规则
# 大小写敏感
# 使用缩进表示层级关系
# 缩进的空格树木不重要,只要相同层级的元素左侧对齐便可

# 支持的数据结构
# 对象,数组,纯量:单个的,不可再分的值(不可变类型)

# yaml数据格式-对象
# python字典  {'a':'b'}  yaml对象 a: b(必须要空格)
# yaml数据格式-数组
# -a
# -b
# -c   也可以直接python写法
# yaml数据格式-纯组
# yaml数据引用
# 同一个yaml文件表示多个文档

# yaml数据读取
# 安装pyyaml    pip install pyyaml
# 单个yaml读取
import yaml
import os

# 看是否有这个路径
def read_yaml(yamlpath):
    if not os.path.isfile(yamlpath):
        raise FileNotFoundError('文件路径不存在:{}'.format(yamlpath))
    with open(yamlpath, 'r', encoding='utf-8') as f:
        cfg = f.read()
    content = yaml.load(cfg, Loader=yaml.FullLoader)
    return content

if __name__ == '__main__':
    content = read_yaml(r'E:\testzidonghua\student\qingqiu\data.yaml')
    print(content)
    for i in content:
        print(i)



# loader有四种模式  BaseLoader:仅加载最基本的yaml
#                 safeLoader:安全地加载yaml语言的子集,建议加载不可信的输入
#                 FullLoader: 加载完整的yaml语言,避免执行任何代码(常用)
#                 UnsaFeLoader:不首信任的数据输入可以轻易利用原始loader代码

yaml变量传递

# yaml文件中的变量传递
# def yaml_template(yamlpath):
import yaml
import os
from string import Template

def yaml_tmplate(yamlpath,change_data):
    if not os.path.isfile(yamlpath):
        raise FileNotFoundError('文件路径不存在,请检查{}'.format(yamlpath))
    if not isinstance(change_data,dict):
        raise Exception('修改内容必须为字典:{}'.format(change_data))
    # 读取文本内容
    with open(yamlpath, 'r', encoding='utf-8') as f:
        cfg = f.read()
    content = Template(cfg).substitute(**change_data)
    return content

if __name__ == '__main__':
    change_data = {
        'user': 'user01',
        'pwd': 'psw01'
    }
    res = yaml_tmplate(r'E:\testzidonghua\student\qingqiu\post.yaml', change_data)
    print(res)

传递的yaml数据格式
在这里插入图片描述

写入yaml数据

# yaml写入
# 单个写入
# 参数说明   data:写入的数据  stream:打开的文件 allow_unicode:true:参数防止写入的中文乱码
import os

import yaml

lista = [{'username': 'use1', 'password': 'psw1'}, {'username': 'use2', 'password': 'psw2'}]


def write_yaml(yamlpath, data):
    if not os.path.isfile(yamlpath):
        raise FileNotFoundError('文件不存在,请检查:{}'.format(yamlpath))
    if not isinstance(data, list):
        raise TypeError('数据类型错误:{}'.format(data))
    with open(yamlpath, 'w', encoding='utf-8')as f:
        yaml.dump(data=data, stream=f)


if __name__ == '__main__':
    write_yaml(r'E:\testzidonghua\student\qingqiu\list.yaml', lista)

数据驱动

# yaml模式驱动
# 数据驱动实现步骤
#   1:从数据文件中读取数据,数据格式必须是列表中套用多个字典的形式[{}]
#   2:将读取到的数据通过parametrize装饰器传人测试用例函数中
import pytest
import yaml
import os

def read_yaml(yamlpath):
    if not os.path.isfile(yamlpath):
        raise FileNotFoundError('文件路径不存在:{}'.format(yamlpath))
    with open(yamlpath, 'r', encoding='utf-8') as f:
        cfg = f.read()
    content = yaml.load(cfg, Loader=yaml.FullLoader)
    return content

case_date = read_yaml(r'E:\testzidonghua\student\qingqiu\data.yaml')
print(case_date)

class TestCase():
    # data是名字  case_date是值
    @pytest.mark.parametrize('data', case_date)
    def test_login(self, data):
        print('输入用户名:{}'.format(data['usernaml']))
        print('输入密码:{}'.format(data['password']))
        print('点击登录')
        assert 1 == 1

为啥需要yaml数据?
1 Yaml 是一种所有编程语言可用的友好的数据序列化标准
2 数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议使用一种结构化的文件(例如yaml,json等)来对数据进行存储,然后在测试用例中读取这些数据。
原理与前面章节“UI自动化测试框架”中的“测试数据的数据驱动”大同小异。依然使用 @pytest.mark.parametrize 装饰器来进行参数化,使用参数化来实现数据驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值