前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytest学习(三) - setup和teardown的使用

Pytest学习(三) - setup和teardown的使用

作者头像
软件测试君
发布2020-10-29 10:07:55
8330
发布2020-10-29 10:07:55
举报
文章被收录于专栏:测试人生

本文共1251字 阅读约需3分钟

一、前言

从文章标题可以看出,就是初始化和释放的操作,根据我的java习惯来学习pytest,个人感觉没差太多,理解上也不是很难。

哦,对了,差点跑题了,这个框架是基于Python语言的,在学习的时候难免总会用java的类比思想来学习,下面言归正传哈。

我们还从 unittest与pytest来对比学习吧

二、unittest用法

unittest有两个前置方法,两个后置方法,分别是:

  • setup()
  • setupClass()
  • teardown()
  • teardownClass()

个人始终觉得unittest和Junit像极了。

三、pytest用法

当然,Pytest也提供了类似setup、teardown的方法,分别是:

  • 模块级别:setup_module、teardown_module
  • 函数级别:setup_function、teardown_function,不在类中的方法
  • 类级别:setup_class、teardown_class
  • 方法级别:setup_method、teardown_method
  • 方法细化级别:setup、teardown

我总感觉学习pytest像是在学习testng一样,难道是我的错觉吗,啊啊啊啊,不能吧。

四、unittest示例

unittest的setupClass和teardownClass,需要配合@classmethod装饰器一起使用,也就是我们java说的注解呀,这块是翻译给java学Python的同学的,可忽略哈。示例代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/10/21 20:09
# @Author  : longrong.lang
# @FileName: test_setup_teardown_unittest.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
unittest代码示例
'''
import unittest


class TestUnitTest(unittest.TestCase):
    @classmethod 
    def setUpClass(cls):
        print("所有用例执行前执行")

    def setUp(self):
        print("每个用例开始前执行")

    def tearDown(self):
        print("每个用例结束后执行")

    @classmethod
    def tearDownClass(cls):
        print("所有用例执行后执行")

    def testA(self):
        '''用例A'''
        print("用例A执行了")
        self.assertEquals(1, 1)

    def testB(self):
        '''用例B'''
        print("用例B执行了")
        self.assertTrue(True)


if __name__ == "__main__":
    unittest.main()

执行结果

可以看出执行顺序为:

代码语言:javascript
复制
setUpClass
setUp
testA 
tearDown
setUp
testB
tearDown
tearDownClass
用例之间按用例名称ASCII码的顺序加载,数字与字母顺序为0~9,A~Z,a~z,  所以testA会在testB之前运行。

五、pytest示例

函数级的setup_function、teardown_function只对函数用例生效,而且不在类中使用

依旧还是把类和函数都有的情况放在一起,示例代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/10/21 20:27
# @Author  : longrong.lang
# @FileName: test_setup_teardown_pytest.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
pyetest示例
'''

import pytest


def setup_module():
    print("setup_module():在模块最之前执行,且只执行一次")


def teardown_module():
    print("teardown_module:在模块之后执行,且只执行一次")


def setup_function():
    print("setup_function():每个方法之前执行")


def teardown_function():
    print("teardown_function():每个方法之后执行")


def test_1():
    print("正在执行用例1")
    x = "this"
    assert 'h' in x


def test_2():
    print("正在执行用例2")
    assert 1 == 1


class TestClass(object):

    def setup_class(self):
        print("setup_class(self):每个类之前执行一次,只执行一次")

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

    def test_A(self):
        print("正在执行用例A")
        x = "this"
        assert 'h' in x

    def test_B(self):
        print("正在执行B")
        assert 1 == 1


if __name__ == "__main__":
    pytest.main(["-q", "test_setup_teardown_pytest.py"])

执行结果

可以看出来,互不影响,执行顺序为:

代码语言:javascript
复制
setup_module()
setup_function()
test_1
teardown_function()
setup_function()
test_2
teardown_function()
setup_class(self)
test_A
test_B
teardown_class(self)
teardown_module

main方法中的-q,为pytest打印测试用例的执行结果级别。

如不清楚,请移步到《Pytest学习(一)- 入门及基础》。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、unittest用法
  • 三、pytest用法
  • 四、unittest示例
    • 执行结果
    • 五、pytest示例
      • 执行结果
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档