这篇文章上次修改于 795 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

pytest 安装:

主要是python安装完成后使用pip安装

pip install pytest

pytest 代码规范:

  • 测试用例命名规范

  • 文件要在test_开头,或者_test结尾

  • 类要以Test开头,方法要以test_开头

  • 测试类不可以包含__init__()方法

    pytest 常用的命令行参数

  • pytest –collect-only 只收集用例

  • pytest -k “add ” 匹配所有名称中包含add的用例(‘add or div’ ‘TestClass’)

  • pytest -m mark标签名 标记

  • pytest - - junitxml=./result.xml 生成执行结果文件

  • pytest –setup-show 回溯fixture的执行过程

  • 更多的用法使用pytest —help查看帮助文档

    pytest setup/teardown

    类似的setup,teardown同样更灵活

  • 模块级(setup_module/teardown_module)模块始末,全局的(优先最高)

  • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)

  • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)

  • 方法级(setup_method/teardown_methond)开始于方法始末(在类中)

  • 类里面的(setup/teardown)运行在调用方法的前后

参数化和数据驱动

利用 pytest.mark.parametrize() 方法进行数据生成,可更为灵活的进行接口测试
可利用 pyyaml 包进行数据yaml格式导入

# yaml 参数导入1
@pytest.mark.parametrize('par', yaml.load(open('./par.yaml', 'r'), Loader=yaml.FullLoader))
def test_yaml_add(self, par):
    assert self.cal.add_fun(par[0], par[1]) in [3, 5, 7]

# yaml 参数导入2
@pytest.mark.parametrize('a,b', yaml.load(open('./par.yaml', 'r'), Loader=yaml.FullLoader))
def test_yaml_add2(self, a, b):
    assert self.cal.add_fun(a, b) in [3, 5, 7]

yaml 文件

- [1, 2]
- [3, 4]
- [2, 5]
- [3, 6]
- [2, 7]

本文所有文件地址:github点击这里 gitlab点击这里 gitee点击这里