Pytest学习笔记1——传统前后置处理

目录

  引言

  实例

  总结


  引言

  在《Python 自动化测试框架unittest与pytest的区别》这篇文章中,已经介绍了pytest的前后置,现在单独拿出来,再来复习一次。

  文中unittest是有三个处理前后置的函数:

  setUp()&tearDown() < setUpClass()&tearDownClass() < setUpModule()&tearDownModule(),而pytest相对比unittest多了2个,函数级和方法级。

  逻辑优先级:

  • 模块级(setup_module/teardown_module)开始于模块始末,全局的
  • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
  • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
  • 方法级(setup_method/teardown_method)开始于方法始末(在类中)
  • 类里面的(setup/teardown)运行在调用方法的前后

  实例

import pytest


# setup_function&teardown_function 不在类中使用
def setup_function():
    print("这是函数级setup>>>>>每条用例执行前执行")
def teardown_function():
    print("这是函数级teardown>>>>>每条用例执行后执行")

# setup_module&teardown_module 全局
def setup_module():
    print("这是模块级setup>>>>>所有用例执行前执行")
def teardown_module():
    print("这是模块级teardown>>>>>所有用例执行后执行")

# 测试用例
def test_001():
    print("用例001")
def test_002():
    print("用例002")

# 测试类
class Test_Api:
    def setup(self):
        print("这是方法setup>>>>>每条用例执行前执行")
    def teardown(self):
        print("这是方法teardown>>>>>每条用例执行后执行")

    def setup_class(cls):
        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 test_003(self):
        print("用例003")

    def test_004(self):
        print("用例004")

if __name__ == '__main__':
    pytest.main('-s','test2.py')

  

运行结果:

test2.py::test_001 
这是模块级setup>>>>>所有用例执行前执行
这是函数级setup>>>>>每条用例执行前执行
PASSED                                                [ 25%]用例001
这是函数级teardown>>>>>每条用例执行后执行

test2.py::test_002 这是函数级setup>>>>>每条用例执行前执行
PASSED                                                [ 50%]用例002
这是函数级teardown>>>>>每条用例执行后执行

test2.py::Test_Api::test_003 
test2.py::Test_Api::test_004 

============================== 4 passed in 0.05s ==============================

Process finished with exit code 0
这是类方法setup_class>>>>>所有用例执行前执行
这是setup_method方法>>>>>每个用例开始前执行
这是方法setup>>>>>每条用例执行前执行
PASSED                                      [ 75%]用例003
这是方法teardown>>>>>每条用例执行后执行
这是teardown_method方法>>>>>每个用例结束后执行
这是setup_method方法>>>>>每个用例开始前执行
这是方法setup>>>>>每条用例执行前执行
PASSED                                      [100%]用例004
这是方法teardown>>>>>每条用例执行后执行
这是teardown_method方法>>>>>每个用例结束后执行
这是类方法teardown_class>>>>>所有用例执行后执行
这是模块级teardown>>>>>所有用例执行后执行

  

从结果上看,逻辑优先级:

对于类外:模块级是最大的,全局的,针对.py模块的,你可以认为(setup_module/teardown_module)是global,针对整个py文件,你可以将测试数据初始化和清理数据放到这里。

对于类中:setup_class>setup_method>setup

对于整个py文件(模块):首先setup_module/teardown_module永远是最先执行的,然后识别函数和类的位置,按从上到下来执行,也是python程序执行规则。

可以试试,将类和外面的函数换一下位置:

 

执行结果:

 

执行顺序:

 

  总结

  pytest的前后置处理函数实例已经讲完,这是传统的处理方法,如果像一些场景,比如说登录,在测试业务接口的时候,我们有些接口是不需要登录,但是有些是需要登录,前置条件是登录,如果说用这种传统的函数处理,肯定不适应了,于是有大神开发的了一个fixtrue函数,它其实是setup/teardown的升级版,设计思想是由它而来。我会在下篇进行分享,请尽情期待。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest中的前后指的是在运行测试用例之前和之后执行的代码块。它们用于进行测试环境的配和清理工作,以确保测试用例的可靠性和独立性。 pytest提供了几种不同的前后方式,包括函数级别的和模块级别的前后: 1. 函数级别的前后:使用`@pytest.fixture`装饰器定义的函数可以作为前后函数使用。在测试用例函数中使用这些装饰器标记,pytest会在运行测试用例之前自动调用前函数,在测试用例运行结束后自动调用后函数。比如: ```python import pytest @pytest.fixture def setup(): # 前操作 print("执行操作") yield # 后操作 print("执行操作") def test_example(setup): # 测试用例 print("执行测试用例") ``` 2. 模块级别的前后:使用`@pytest.fixture(scope="module")`装饰器定义的函数可以作为模块级别的前后函数使用。这意味着该函数会在运行模块中的所有测试用例之前被调用一次,并在所有测试用例运行结束后被调用一次。比如: ```python import pytest @pytest.fixture(scope='module') def setup_module(): # 模块级别的前操作 print("执行模块级别的前操作") yield # 模块级别的后操作 print("执行模块级别的后操作") def test_example1(): # 测试用例1 print("执行测试用例1") def test_example2(): # 测试用例2 print("执行测试用例2") ``` 这些前后函数可以用于设测试数据、启动服务、连接数据库等操作,以及清理临时文件、关闭服务等操作。通过使用pytest的前后功能,可以更方便地编写和维护测试用例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值