说明

相信之前接触过的unittest的各位对setup、teardown都不会陌生,当使用了setup、teardown之后,每个用例执行之前和执行结束后都会去执行一次。这就好比是开车一样,只要我开车了,都要先对车进行启动,然后到达目的地之后对车进行熄火。这样做的好处就是在我们进行自动化测试用例执行之前进行测试准备和初始化操作,测试结束后进行清理操作,比如说一些数据库的还原、浏览器的关闭等。

说了这么多,pytest也有这种功能和语法,而且种类比unittest更加的丰富,使用起来也更加的方便快捷。

pytest测试用例封装 pytest用例集管理_自动化测试

级别介绍

pytest的用例级别主要分为以下几类:

1、模块级:setup_module/teardown_module

2、函数级:setup_function/teardown_function

3、类级:setup_class/teardown_class

4、方法级:setup_method/teardown_method

5、类里面的级别:setup/teardown

下面通过代码来进行演示说明。

pytest测试用例封装 pytest用例集管理_用例_02

  1. 模块级:setup_module/teardown_module
    setup_module/teardown_module是适用于全局的,它适用于模块的始末,换句话说就是整个.py文件只运行一次,只要有一个.py文件运行,那就会执行一次setup_module和teardown_module,代码和运行结果如下:
# -*-coding:utf-8 -*-

#test_moudle.py
import pytest

def setup_module():
    print('\nsetup_moudle:整个.py模块只能执行一次')
    print('比如:所有用例开始前只打开一次浏览器')

def teardown_module():
    print('teardown_moudle:整个.py模块只执行一次')
    print('比如:所有的用例结束只最后关闭浏览器')
  
def test_one():
    print('正在运行test_one函数')
    x = 'hello'
    assert 'h' in x
 
def test_three():
    print('正在运行test_three函数')
    a = 'hello'
    b = 'hello world'
    assert a in b

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

pytest测试用例封装 pytest用例集管理_软件测试_03

  1. 函数级:setup_function/teardown_function
    setup_function/teardown_function是针对于用例的,每个用例执行前、执行结束后都会执行一次setup_function、teardown_function,代码和运行结果如下:
#-*-coding:utf-8-*-

import pytest
#test_fun_class.py
def setup_function():
    print('\nsetup_function:每个用例开始前都会执行')

def teardown_function():
    print('teardown_function:每个用例结束后都会执行')
    
def test_one():
    print('正在执行--test_one')
    assert 1==1
    
def test_two():
    print('正在执行--test_weo')
    assert 2==2

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

pytest测试用例封装 pytest用例集管理_用例_04


这里需要注意的是,setup_function和teardown_function不能作用于class类中的方法,例如,TestCase类中的test_three、test_four执行时setup_function、teardown_function并没有执行。

import pytest

def setup_function():
    print('\nsetup_function:每个用例开始前都会执行')

def teardown_function():
    print('teardown_function:每个用例结束后都会执行')
class TestCase():

    def test_three(self):
       print('正在执行--test_three')
       assert 5==5

    def test_four(self):
        print('正在执行--test_four')
        assert 6==6

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

pytest测试用例封装 pytest用例集管理_自动化测试_05

  1. 类级:setup_class/teardown_class
    setup_class/teardown_class使用对象是用于class类的,只在类中执行前后执行,类之外的用例是不会去执行的,如下所示:
import pytest


def test_one():
    print('正在执行--test_one')
    assert 1==1

def test_two():
    print('正在执行--test_weo')
    assert 2==2
    
class TestCase():

    def setup_class(self):
        print('\nsetup_class:所有用例执行之前')

    def teardown_class(self):
        print('teardown_class:所有用例执行之后')

    def test_three(self):
        print('正在执行--test_three')
        assert 5==5

    def test_four(self):
        print('正在执行--test_four')
        assert 6==6

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

pytest测试用例封装 pytest用例集管理_自动化测试_06

  1. 方法级:setup_method/teardown_method
    setup_method/teardown_method是适用于class中的方法的,它只在类中的方法执行时先执行setup_method和teardown_method,它和setup_function/teardown_function正好相反,代码演示及结果如下:
import pytest

def test_one():
    print('\n正在执行--test_one')
    assert 1==1

def test_two():
    print('正在执行--test_weo\n')
    assert 2==2
class TestCase():
	    def setup_method(self):
        print('setup_method:每个用例执行之前')

    def teardown_method(self):
        print('teardown_method:每个用例执行之后\n')

    def test_three(self):
        print('正在执行--test_three')
        assert 5==5

    def test_four(self):
        print('正在执行--test_four')
        assert 6==6

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

pytest测试用例封装 pytest用例集管理_pytest测试用例封装_07

  1. 类里面的级别:setup/teardown
    setup/teardown也是作用于类中,是在调用类的方法前后去使用的,如下所示:
import pytest

def test_one():
    print('\n正在执行--test_one')
    assert 1==1

def test_two():
    print('正在执行--test_weo\n')
    assert 2==2

print('***********************')
class TestCase():
    def setup(self):
         print('setup:每个用开始前执行')

    def teardown(self):
         print('teardown:每个用结束后执行\n')
	    def test_three(self):
        print('正在执行--test_three')
        assert 5==5

    def test_four(self):
        print('正在执行--test_four')
        assert 6==6

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

pytest测试用例封装 pytest用例集管理_python_08

总结

以上大概就是pytest常用的几种级别用例的使用方法介绍,掌握了以上的方法,将会方便于今后写自动化测试用例,做到不同级别的用例,方法去进行响应的一个前置和后置处理操作,希望能帮助到小伙伴,也希望大家能给点个赞,哈哈!

pytest测试用例封装 pytest用例集管理_用例_09