【pytest】YAML管理测试数据

  • 前言:

    • 代码的可维护性除了代码冗余之外还有就是数据尽量不要和代码掺杂在一起,因为阅读起来会非常的凌乱;数据分离能更好的增加代码可读性和可维护性,也能更好的二次修改使用。
    • 上一篇小编与大家分享了pytest参数化,文章中,数据与代码放在一个py文件中,如果要修改数据就比较麻烦了,本篇我们将使用YAML文件来管理数据。
  • yaml基本语法规则

    • 大小写敏感
    • 使用缩进表示层级关系
    • 缩进时不允许使用Tab键,只允许使用空格。
    • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
    • #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
#yaml中序列(list)
- admin
- admin2
- admin3

#yaml中键值对(字典)
#1、直接使用花括号
{"message": "update some data!", "code": 0}
#2、键值对
user: admin
pwd: 123456
  • 操作步骤
    • 1、环境安装
      • pip install PyYAML== 3.12
    • 2、新建yaml文件,保存数据
# data\userinfo.yaml
-
    - "M"
    - "message": "update some data!", "code": 0
-
    - "F"
    - "message": "update some data!", "code": 0
  • 3、封装函数,读取yaml文件
#common\read_yaml.py
import yaml
import os

def readyml(yaml_path):
    #判断yaml文件是否存在
    if not os.path.isfile(yaml_path):
        raise FileNotFoundError('文件路径不存在,请检查路径是否正确:%s'%yaml_path)
    #读取文件
    with open(yaml_path,encoding='utf8') as f:
        yaml_data = f.read()
        data = yaml.safe_load(yaml_data)   #转换成列表、字典对象
    return data
  • 4、用例中使用
#case\test_param.py
import pytest
import os
from common.read_yaml import readyml

#获取文件绝对路径
cur_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
yaml_path = os.path.join(cur_path,'data','userinfo.yaml')
print(yaml_path)

test_data = readyml(yaml_path)

@pytest.mark.parametrize("test_input,expect", test_data)
def test_001(test_input,expect):
    print(test_input,expect['message'])
posted @ 2022-08-06 22:23  Tony_xiao  阅读(586)  评论(0编辑  收藏  举报