【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博客 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
pytest和unittest都是Python中常用的测试框架。其中,setup和teardown是两个常用的测试用例执行前和执行后的钩子函数。 在pytest中,setup和teardown可以通过pytest.fixture装饰器来使用。装饰器可以被附加到函数、方法或类上,以标记其为fixture。当测试函数需要使用fixture时,它们可以将fixture名称作为输入参数,pytest将自动查找和运行fixture函数,并将其输出值传递给测试函数。例如: ```python import pytest @pytest.fixture def setup(): print("执行setup操作") yield print("执行teardown操作") def test_example(setup): print("执行测试操作") ``` 在这个例子中,setup函数被标记为fixture,test_example函数接收setup作为输入参数。在运行test_example函数之前,pytest将自动运行setup函数,然后运行测试函数,最后再运行teardown函数。 在unittest中,setup和teardown可以通过setUp和tearDown方法来实现。这些方法被定义在unittest.TestCase类中,并在每次运行测试方法之前和之后自动调用。例如: ```python import unittest class TestExample(unittest.TestCase): def setUp(self): print("执行setup操作") def tearDown(self): print("执行teardown操作") def test_example(self): print("执行测试操作") ``` 在这个例子中,TestExample类继承自unittest.TestCase类,并覆盖了setUp和tearDown方法。在运行test_example方法之前,unittest将自动调用setUp方法,然后运行测试方法,最后再调用tearDown方法。 总体而言,pytest和unittest都提供了简单易用的setup和teardown机制来帮助测试人员编写可靠的测试用例。但是,pytest相对于unittest更加灵活,可以通过fixture装饰器来定义setup和teardown函数,同时也提供了更多的扩展性和定制化选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值