写点什么

软件测试 | YAML 是什么?

  • 2023-03-03
    北京
  • 本文字数:1472 字

    阅读完需:约 5 分钟

数据驱动

在实际的测试工作中,通常需要对大量的测试数据进行验证,以保证软件的正确性。这种数据量大的测 试,在功能测试中非常耗费人力物力,但是在自动化测试中,却非常容易实现。只要编写好测试的操作 步骤,然后将多组不同的测试数据传入到相同的测试用例中,就能轻松实现对不同测试数据的验证。 前面学习了参数化用例,当数据量非常大的时候,我们不能把所有的用例都放在测试模块中。可以将数 据存放到一个外部文件中,使用的时候将外部文件的数据读取出来,也方便测试数据的管理。数据与测 试用例分别管理,可以利用外部数据源 YAML、Json、Excel、CSV 等工具管理测试数据。这里推荐使 用 YAML 工具。

YAML 介绍

YAML 是在开发中的一种标记语言,适合用来表达或编辑数据结构、各种配置文件等。YAML 不局限于 语言,可以用于不同语言程序间的数据传递(类似于 Json)。YAML 具有丰富的语法结构和可扩展性, YAML 的配置文件后缀为 .yml 或 .yaml(例如:data.yaml)。

YAML 的基本语法

大小写敏感

使用缩进表示层级关系

缩进不允许使用 tab,只允许空格

缩进的空格数不重要,只要相同层级的元素左对齐即可

'#'表示注释

YAML 支持数据类型

对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

纯量:单个的、不可再分的值

YAML 表示列表

以 - 开头的行表示构成一个数组:

- hogwarts1- hogwarts2- hogwarts3
复制代码

对应的 python 的数据结构是:['hogwarts1','hogwarts2','hogwarts3']

也可以列表嵌套列表,例如:

- - hogwarts1 - hogwarts2 - hogwarts3
复制代码

对应的 python 的数据结构是: [['hogwarts1','hogwarts2','hogwarts3']]

YAML 表示字典

key: value,冒号后面要加空格。

id: 1name: company1price: 200W
复制代码

上面表达 python 里的字典: {'id': 1, 'name': 'company1', 'price': '200W'} 相对复杂的例子:

hogwarts: - id: 1 name: 格兰芬多 price: 200 - id: 2 name: 拉文克劳 price: 200
复制代码

对应的 python 的数据结构是: {'hogwarts': [{'id': 1, 'name': '格兰芬多', 'price': 200}, {'id': 2, 'name': '拉文克劳', 'price': 200}]}

YAML 表示纯量

纯量是最基本的,不可再分的值,包括:

  • 字符串

  • 布尔值

  • 整数

  • 浮点数

  • Null

  • 时间

  • 日期

pytest 结合 YAML

PyYAML 模块在 python 中用于处理 YAML 格式数据,主要使用 yaml.safe_dump() 和 yaml.safe_load() 函数将 Python 对象和 YAML 格式数据相互转换。

安装

pip install PyYAML
复制代码

案例

创建用例文件以及数据文件来完成数据驱动的测试案例,创建一个文件夹 testdata,在这个文件夹下创 建 data.yml 和 test_yaml.py 文件。

创建 data.yml 文件:

- - 1 - 2- - 20 - 30
复制代码

创建“test_yaml.py”,代码如下:

import pytestimport yaml@pytest.mark.parametrize("a,b", yaml.safe_load(open("data.yml",\encoding='utf-8')))def test_foo(a,b): print(f"a + b = {a + b}")
复制代码

代码分析:

yaml 文件里定义了列表数据,通过 open( ) 方法获取 data.yml 文件对象,使用 yaml.safe_load() 加载这个文件对象,将 yaml 格式文件转换为 Python 对象,分别传递到用例中生成多条用例执行。

运行结果:

...test_params.py::test_foo[1-2]test_params.py::test_foo[20-30]...
复制代码

运行结果中 [1-2] 和 [20-30] 表示传入的两组参数,分别传入 test_foo( ) 用例方法中执行,并且 分别生成两条测试结果。pytest 结合 yaml 实现数据驱动,yaml 文件作为用例数据源,驱动测试用例的 执行,使测试用例数据维护更加方便快捷。

搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | YAML是什么?_测试_测吧(北京)科技有限公司_InfoQ写作社区