pytest—setup和teardown简单用法

前言

小伙伴们好呀,我又来了我们今天聊聊关于pytest前后置应用,使用过unittest的小伙伴们都知道,setup和teardown是用来处理用例的开始前工作和结束后的工作,其中还有setupclass和teardownclass是保证执行所以的用例都只执行1次前置和后置,使用起来超级方便,那么学习pytest强劲的测试框框,肯定也有这个功能,并且还比unittest的简单不少。

pytest—setup和teardown简单用法

pytest中的前置

pytest比较强劲,提供了不仅仅一种方法的前置和后置:

  • setup_module、teardown_module
  • setup_function、teardown_function
  • setup_class、teardown_class
  • setup_method、teardown_method
  • setup、teardown

光看上面的内容,肯定一脸懵逼,不知道到底什么时候使用,我来通过举例一个个介绍

setup、teardown

先介绍第一个大家都比较熟悉的与unittest中的书写一致,这个可以在类中使用,也可以在类外进行使用。

该方法每条用例都会执行

import pytest

def setup():
    print('这是测试用例的前置')

def teardown():
    print('这是测试用例的后置')

def test01():
    print('用例01')

def test02():
    print('用例02')

if __name__ == '__main__':
    pytest.main(['-s'])

pytest—setup和teardown简单用法

setup_module、teardown_module

该方法表明只能类外面执行用例过程中,只执行1次。相当于unittest中的setupclass和teardownclass方法

import pytest

def setup_module():
    print('这是测试用例的前置')

def teardown_module():
    print('这是测试用例的后置')

def test01():
    print('用例01')

def test02():
    print('用例02')

if __name__ == '__main__':
    pytest.main(['-s','test_02.py'])

pytest—setup和teardown简单用法

setup_function、teardown_function

该方法表明在类外面执行用例过程中,每次都会执行前置和后置。

import pytest

def setup_function():
    print('这是测试用例的前置')

def teardown_function():
    print('这是测试用例的后置')

def test01():
    print('用例01')

def test02():
    print('用例02')

if __name__ == '__main__':
    pytest.main(['-s','test_02.py'])

pytest—setup和teardown简单用法

setup_method、teardown_method

该方法表明在类中每次执行测试用例前,测试前置和测试后置都会执行一次

# coding:utf-8
import pytest

class Test():

    def setup_method(self):
        print('这是setup函数前置内容')

    def teardown_method(self):
        print('这是teardown函数后置内容')

    def test01(self):
        print('这是测试用例1')

    def test02(self):
        print('这是测试用例2')


if __name__ == '__main__':
    pytest.main(['-s','test_01.py'])

pytest—setup和teardown简单用法

setup_class、teardown_class

该方法表明在类中执行测试用例前,只执行1次测试前置和测试后置

# coding:utf-8
import pytest

class Test():

    def setup_class(self):
        print('这是setup函数前置内容')

    def teardown_class(self):
        print('这是teardown函数后置内容')

    def test01(self):
        print('这是测试用例1')

    def test02(self):
        print('这是测试用例2')


if __name__ == '__main__':
    pytest.main(['-s','test_01.py'])

pytest—setup和teardown简单用法

组合混用

上面介绍了每种方法的单独用法,那么如果这些方法都一起使用?会怎么样?

setup_class和setup_method、setup混合

# coding:utf-8
import pytest

class Test():
    def setup_method(self):
        print('这是setup_method用例前置内容')

    def setup_class(self):
        print('这是setup_class用例前置内容')

    def setup(self):
        print('这是setup用例前置内容')

    def teardown_class(self):
        print('这是teardown_class用例后置内容')

    def teardown_method(self):
        print('这是teardown_method用例后置内容')

    def teardown(self):
        print('这是teardown用例后置内容')

    def test01(self):
        print('这是测试用例1')

    def test02(self):
        print('这是测试用例2')


if __name__ == '__main__':
    pytest.main(['-s','test_01.py'])

pytest—setup和teardown简单用法

通过上面测试结果可以看出来,其中执行顺序:setup_class>>setup_method>>setup,其中setup和setup_method都是表明执行每条用例前都需要进行执行前置内容

setup_module、setup_function组合

import pytest

def setup():
    print('这是setup测试用例前置内容')

def setup_function():
    print('这是setup_function测试用例前置内容')

def setup_module():
    print('这是setup_module测试用例前置内容')

def teardown_module():
    print('这是teardown_module测试用例后置内容')

def teardown():
    print('这是teardown测试用例后置内容')

def teardown_function():
    print('这是teardown_function测试用例后置内容')

def test01():
    print('用例01')

def test02():
    print('用例02')

if __name__ == '__main__':
    pytest.main(['-s','test_02.py'])

pytest—setup和teardown简单用法

通过上述测试发现,执行顺序:setup_module>>setup_function>>setup。其中setup_module表明执行用例只执行一次前置。

总结:

1、setup_class和setup_module执行用例时,只执行一次前置和后置

2、setup_class,setup_method,setup是在类中执行的

3、setup_module,setup_function,setup是在类外执行的

4、其中setup类中,类外都可以执行。

阿六通过简单的例子介绍了pytest的setup和teardown的使用方法和类型,希望大家能够自己行动起来哟,毕竟实践是真理。

如果大家喜爱这篇文章可以动动发财的小手给阿六点个赞和收藏,顺便加个关注,关注阿六不迷路哟。

pytest—setup和teardown简单用法

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...