【pytest】三、pytest用例管理框架的前后置(固件、夹具)setup和teardown,及封装

一、引言:

1)setup的作用:用来实现执行前的一些初始化操作(如:数据准备、连接设备、打开APP/浏览器、创建日志对象、创建数据库连接、创建接口的请求对象等操作);

2)teardown的作用:用来实现执行用例后的一些操作(如:数据清理、关闭APP/浏览器、销毁日志对象、关闭数据库连接等操作)。

二、分类:

函数级:setup_function/teardown_function    在每个函数形式的用例前/后,都会执行的代码
方法级:setup_method/teardown_method     在类中方法形式的用例前/后,都会执行的代码
类级:setup_class/teardown_class   用于类中,在一个类中只调用一次,类的前/后,都会执行的代码
模块级:setup_module/teardown_module     用于当前模块,当前模块执行前/后,都会执行的代码
用例级:setup/teardown

1)用例级: setup/teardown

在每个用例前/后,都会执行的代码

 ----------与方法级:setup_method/teardown_method,产生的效果一样

import pytest

class TestLogin:

    def setup(self):
        print("在每个用例执行前,执行一次")

#    def setup_method(self):
#        print("在每个用例执行前,执行一次")

    def teardown(self):
        print("在每个用例执行后,执行一次")

    def test_tangseng(self):
        print("测试登录成功-唐僧")

    def test_sunwukong(self):
        print("测试登录成功-孙悟空")

    def test_zhubajie(self):
        print("测试登录成功-猪八戒")

    def test_shaheshang(self):
        print("测试登录成功-沙和尚")

2)函数级和方法级:

其实函数和方法的区别,以前我经常分不清楚:

函数长这样:def test_001():

        --不带self

        --调用的方式:通过“函数名()”的方式进行调用

        --分类:可以分为python的内置函数、匿名函数、递归函数、用户自定义函数

方法长这样:def test_001(self): 

        --带self

        --调用的方式:通过“对象.方法名”的方式进行调用

        --分类:普通方法、私有方法、属性方法、特殊方法(双下划线方法:__init__)、类方法、静态方法

        --在类中的是方法

 如果在类中,用函数级:setup_function/teardown_function,则执行案例时是不会被调用的。

  如果在类中,用方法级:setup_method/teardown_method,则执行案例时会被调用。

三、封装

        为了避免在每个py文件中,重复编写相同的代码(如setup和teardown进行初始化和结束的处理),让用例中的代码更加整洁清晰,我们可以将这些代码提取出来,放在公共文件夹中(比如:common文件夹)进行封装。

公共的工具包中代码如下:

class CommonUtil:
    def setup_class(self):
        print("在每个类执行前,执行一次")

    def teardown_class(self):
        print("在每个类执行后,执行一次")


    def setup(self):
        print("在每个用例执行前,执行一次")

    def teardown(self):
        print("在每个用例执行后,执行一次")

1、新建一个python文件夹:common

2、在该文件夹中,创建py文件:common_util,定义CommonUtil类,如上

3、在待使用的类中,去继承CommonUtil类即可:

import pytest
from common.common_util import CommonUtil

class TestLoginA(CommonUtil):



    def test_tangseng(self):
        print("0130类测试登录成功-唐僧")

    def test_sunwukong(self):
        print("0130测试登录成功-孙悟空")

    def test_zhubajie(self):
        print("0130测试登录成功-猪八戒")

    def test_shaheshang(self):
        print("0130测试登录成功-沙和尚")

运行结果图:

思考:

        封装之后,每个用例执行前后,都会执行对应的setup和teardown;但实际应用过程中,可能只有部分用例需要用到前后置,应该怎么处理呢?

        对应解决方法见:【pytest】之fixture()和conftest使用详解_福多多的福的博客-CSDN博客 

猜你喜欢

转载自blog.csdn.net/Moonlight_16/article/details/128803659
今日推荐