YAML
-
YAML是一个对所有编程语言都很友好的数据序列化标准,它是一种直观的能够被电脑识别的数据序列化格式,是一种可读性高且容易被人类阅读的脚本语言
-
YAML语言的本质是一种通用的数据串行化格式
-
适用场景
- 可以直接序列化为数组、字典
- 解析成本低
- 专门写配置文件的语言,比JSON格式方便,比ini文档功能更强
-
支持的三种数据结构
- 对象:键值对的集合,例如:映射、哈希、字典
- 数组:一组按次序排列的值,例如:序列、列表
- 纯量:单个的,不可再分的值,例如:字符串、float、int
-
建议将数据都放在YAML中,而测试用例中只保留流程
YAML字典的写法
- 最外层的key顶格,后面value里的字典,空两格,不同的键值对之间换行隔开
YAML数组的写法
- 最外层的key顶格,后面value里的数组空两格,然后跟
-
再空一格后跟元素,元素之间换行隔开
- 元素也可以是一个字典,但是字典和字典之间需要用
-
和换行隔开
- 元素也可以是一个数组,数组之间也需要用
-
和换行隔开
示例
- 注意,
hero
和hero2
等价,我们可以用yaml字典的写法可以加{}
,也可以不加,但是加{}
时需要加,
- YAML不需要写
" "
读取yaml文件
- 首先需要安装
pyyaml
依赖,但是导入时使用yaml
- 然后需要创建文件流,可以使用
open()
读取yaml
文件 - 接着需要把文件流用
yaml
依赖打开
- 稍复杂的yaml数据
YAML + parametrize,实现参数化
单参数单次循环
- 我们首先需要在
utils
目录中定义好读取yaml数据的方法 - 此处的路径,我们需要动态获取,可以根据以下的三个方法获得
os.path.realpath(_ _file_ _)
是可以获取当前文件的绝对路径os.path.dirname()
是可以获取上一级目录的目录名os.path.join()
可以将三个字符串凭借起来,中间用/
连接
- 其次我们可以在测试方法中导入这个方法,并在装饰器
parametrize
中将yaml数据作为参数值传给自定义的参数 - 注意:参数值需要是可迭代类型
yaml
中heros_name
的数据如下:
多参数多次循环
- 我们需要写一个符合以下形式的yaml代码
- 注意,列表内的每一个元素都需要用
-
开头,且后要空一格 - 这里一个大列表里由两个子列表,所以每个子列表前都需要加上
-
,且子列表内的每个元素也需要加上-
,如下:
- 而我们的测试用例可以这么写,用两个自定义参数来接收返回值: