Pytest系列(3)- setup和teardown的使用

前置方法和后置方法

  • 模块级别:setup_module、teardown_module,运行在模块始末,全局的(优先级最高)
  • 函数级别:setup_function、teardown_function,只对函数用例生效(不在类中)
  • 类级别:setup_class、teardown_class,在类中前后运行一次
  • 方法级别:setup_method、teardown_method,开始于方法使用(在类中)
  • 方法细化级别:setup、teardown,运行在调用方法的前后

参考下例

import pytest

def setup_module():
    print("=====整个.py模块开始前只执行一次:setup_module=====")


def teardown_module():
    print("=====整个.py模块结束后只执行一次:teardown_module=====")


def setup_function():
    print("===每个函数级别用例开始前都执行setup_function===")


def teardown_function():
    print("===每个函数级别用例结束后都执行teardown_function====")


def test_one():
    print("test1")


def test_two():
    print("test2")


class TestCase():
    def setup_class(self):
        print("====整个测试类开始前只执行一次setup_class====")

    def teardown_class(self):
        print("====整个测试类结束后只执行一次teardown_class====")

    def setup_method(self):
        print("==类里面每个用例执行前都会执行setup_method==")

    def teardown_method(self):
        print("==类里面每个用例结束后都会执行teardown_method==")

    def setup(self):
        print("=类里面每个用例执行前都会执行setup=")

    def teardown(self):
        print("=类里面每个用例结束后都会执行teardown=")

    def test_three(self):
        print("test3")

    def test_four(self):
        print("test4")

    def test_five(self):
        assert 1 == 2

if __name__ == '__main__':
    pytest.main(["-q", "-s", "-ra", "setup_teardown.py"])

运行结果如下:

扩展-字符参数

上面的例子,我们通过在main函数来执行的pytest,可以添加一些参数,达到过滤用例结果的效果

if __name__ == '__main__':
    pytest.main(["-q", "-s", "-ra", "setup_teardown.py"])

举个栗子:可以通过rfs过滤出失败和未执行的

说明:-r选项可以在执行结束后,打印一个简短的总结报告;-r选项后面要紧接一个参数,用于过滤显示测试用例的结果

以下是一些比较常用的参数:

  • f:失败的
  • E:出错的
  • s:跳过执行的
  • x:跳过执行,并被标记为xfailed的
  • X:跳过执行,并被标记为xpasse的
  • P:测试通过的
  • p:测试通过,并有输出信息的(print等)
  • a:除了测试通过之外其他所有的
  • A:所有的

以上参数,可以叠加使用

posted @ 2021-11-06 22:56  莫伊101  阅读(42)  评论(0编辑  收藏  举报