pytest学习和使用4-pytest和Unittest中setup、teardown等方法详解和使用(最全)

简介: pytest学习和使用4-pytest和Unittest中setup、teardown等方法详解和使用(最全)

1 Unittest两种前置和两种后置方法

  • 使用Unittest框架结合selenium做webUI自动化测试的时候,经常会遇到什么时候打开和关闭浏览器,这个时候就使用到了Unittest两种前置和两种后置方法;
  • 那具体这四种方法是什么呢?看下表:
方法 说明
setup() 每执行一个用例之前执行一次,比如每次运行某个用例前打开一次浏览器
teardown() 每执行一个用例之后执行一次,比如每次运行某个用例后关闭一次浏览器
setupClass() 每执行一个用例集之前执行一次,比如每运行一个testcase前打开一次浏览器
teardownClass() 每执行一个用例集之后执行一次,比如每运行一个testcase后关闭一次浏览器
  • 而setupClass()和teardownClass() 方法用配合@classmethod方法使用。

1.1 Unittest:setup、teardown方法举例

  • 创建一个脚本test_unittest_setup_teardown.py,写入以下代码:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/9/9 9:25
# 文件名称:test_unittest_setup_teardown.py
# 作用:验证unittest的setup、teardown方法
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson


import unittest


class TestOne(unittest.TestCase):
    def setUp(self) -> None:
        print("每运行一个case前,打开一次浏览器")

    def tearDown(self) -> None:
        print("每运行一个case后,关闭一次浏览器")

    def test_one(self):
        print("运行第一个用例")

    def test_two(self):
        print("运行第二个用例")


if __name__ == "__main__":
    unittest.main()
  • 运行后如下:
Ran 2 tests in 0.003s

OK
Launching unittests with arguments python -m unittest F:/pytest_study/test_case/test_b/test_unittest_setup_teardown.py in F:\pytest_study\test_case\test_b


进程已结束,退出代码 0
每运行一个case前,打开一次浏览器
运行第一个用例
每运行一个case后,关闭一次浏览器
每运行一个case前,打开一次浏览器
运行第二个用例
每运行一个case后,关闭一次浏览器

1.2 Unittest:setupClass、teardownClass方法举例

  • 创建一个脚本test_unittest_setupclass_teardownclass.py,写入以下代码:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/9/9 9:50
# 文件名称:test_unittest_setupclass_teardownclass.py
# 作用:验证unittest的setupclass、teardownclass方法
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson


import unittest


class TestTwo(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        print("每运行一个用例集前,打开浏览器,即这个类只打开一次浏览器")

    @classmethod
    def tearDownClass(cls) -> None:
        print("每运行一个用例集后,关闭浏览器,即这个类只关闭一次浏览器")

    def test_one(self):
        print("运行第一个用例")

    def test_two(self):
        print("运行第二个用例")


if __name__ == "__main__":
    unittest.main()
  • 运行后如下:
Ran 2 tests in 0.002s


OK
每运行一个用例集前,打开浏览器,即这个类只打开一次浏览器
运行第一个用例
运行第二个用例
每运行一个用例集后,关闭浏览器,即这个类只关闭一次浏览器

进程已结束,退出代码 0
  • 注意这两个方法需要使用@classmethod修饰方法,如果不加的话会报错。

2 Pytest十种前置和后置方法

  • 和unittest类似,但是方法更多,达到了十种,详细看下表:
方法 运行级别 说明
setup_module() 模块级别 整个.py模块开始前只执行一次,如打开一次浏览器
teardown_module() 模块级别 整个.py模块结束后只执行一次,如关闭一次浏览器
setup_function() 函数级别 每个函数级别用例开始前都执行,此方法不在类中
teardown_function() 函数级别 每个函数级别用例结束后都执行,此方法不在类中
setup_class() 级别 整个测试类开始前只执行一次,和Unittest基本一样
teardown_class() 级别 整个测试类结束后只执行一次,和Unittest基本一样
setup_method() 方法级别 里面每个用例执行都会执行
teardown_method() 方法级别 里面每个用例结束都会执行
setup() 方法细化级别 里面每个用例执行都会执行
teardown() 方法细化级别 里面每个用例结束都会执行

2.1 Pytest:setup_module、teardown_module方法举例

  • 创建test_pytest_setup_teardown_module.py,代码如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/9/9 10:18
# 文件名称:test_pytest_setup_teardown_module.py
# 作用:验证pytest的setup_module和teardown_module方法
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson


import pytest


def setup_module():
    print("整个.py模块开始前只执行一次")


def teardown_module():
    print("整个.py模块结束后只执行一次")


def test_one():
    print("用例1")


def test_two():
    print("用例2")


class TestOne():
    # @staticmethod
    # def setup_module():
    #     print("整个.py模块开始前只执行一次")
    #
    # @staticmethod
    # def teardown_module():
    #     print("整个.py模块结束后只执行一次")
    def test_thr(self):
        print("用例3")

    def test_fo(self):
        print("用例4")


if __name__ == "__main__":
    pytest.main()
  • 运行结果:
(venv) F:\pytest_study\test_case\test_c>pytest -s -q
整个.py模块开始前只执行一次
用例1
.用例2
.用例3
.用例4
.整个.py模块结束后只执行一次

4 passed in 0.02s
  • 把这两个方法写入类中呢,那需要使用@staticmethod方法修饰,不然语法就不对,但是写入类中的话,这两个方法应该是不会运行的。

2.2 Pytest:setup_function、teardown_function方法举例

  • 创建test_pytest_setup_teardown_function.py,代码如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/9/9 10:41
# 文件名称:test_pytest_setup_teardown_function.py
# 作用:验证pytest的setup_function、teardown_function方法
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson


import pytest


def setup_module():
    print("整个.py模块开始前只执行一次")


def teardown_module():
    print("整个.py模块结束后只执行一次")


def setup_function():
    print("每个函数级别用例开始前都执行")


def teardown_function():
    print("每个函数级别用例结束后都执行")


def test_one():
    print("用例1")


def test_two():
    print("用例2")


class TestOne():

    def test_thr(self):
        print("用例3")

    def test_fo(self):
        print("用例4")


if __name__ == "__main__":
    pytest.main()
  • 运行如下:
(venv) F:\pytest_study\test_case\test_c>pytest -s -q test_pytest_setup_teardown_function.py
整个.py模块开始前只执行一次
每个函数级别用例开始前都执行
用例1
.每个函数级别用例结束后都执行
每个函数级别用例开始前都执行
用例2
.每个函数级别用例结束后都执行
用例3
.用例4
.整个.py模块结束后只执行一次

4 passed in 0.42s
  • 同样把这两个方法写入类中呢,那需要使用@staticmethod方法修饰,不然语法就不对,但是写入类中的话,这两个方法应该是不会运行的。

2.3 Pytest:setup_class、teardown_class方法举例

  • 创建test_setup_teardoen_class.py代码如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/9/9 11:28
# 文件名称:test_pytest_setup_teardoen_class.py
# 作用:xxx
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson


import pytest


def setup_module():
    print("整个.py模块开始前只执行一次")


def teardown_module():
    print("整个.py模块结束后只执行一次")


def test_one():
    print("用例1")


def test_two():
    print("用例2")


class TestOne():

    def setup_class(self):
        print("整个测试类开始前只执行一次")

    def teardown_class(self):
        print("整个测试类结束后只执行一次")


    def test_thr(self):
        print("用例3")

    def test_fo(self):
        print("用例4")


if __name__ == "__main__":
    pytest.main()
  • 运行结果为:
(venv) F:\pytest_study\test_case\test_c>pytest -s -q test_setup_teardoen_class.py
整个.py模块开始前只执行一次
用例1
.用例2
.整个测试类开始前只执行一次
用例3
.用例4
.整个测试类结束后只执行一次
整个.py模块结束后只执行一次

4 passed in 0.02s

2.4 Pytest:setup_method、teardown_method方法举例

  • 创建test_pytest_setup_teardown_method.py,代码如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/9/9 12:28
# 文件名称:test_pytest_setup_teardown_method.py
# 作用:验证pytest的setup_method、teardown_method方法
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson


import pytest


def setup_module():
    print("整个.py模块开始前只执行一次")


def teardown_module():
    print("整个.py模块结束后只执行一次")


def test_one():
    print("用例1")


def test_two():
    print("用例2")


class TestOne():

    def setup_class(self):
        print("整个测试类开始前只执行一次")

    def teardown_class(self):
        print("整个测试类结束后只执行一次")

    def setup_method(self):
        print("1类里面每个用例执行前都会执行")

    def teardown_method(self):
        print("1类里面每个用例结束后都会执行")

    def test_thr(self):
        print("用例3")

    def test_fo(self):
        print("用例4")


if __name__ == "__main__":
    pytest.main()
  • 运行结果为:
(venv) F:\pytest_study\test_case\test_c>pytest -s -q test_pytest_setup_teardown_method.py
整个.py模块开始前只执行一次
用例1
.用例2
.整个测试类开始前只执行一次
1类里面每个用例执行前都会执行
用例3
.1类里面每个用例结束后都会执行
1类里面每个用例执行前都会执行
用例4
.1类里面每个用例结束后都会执行
整个测试类结束后只执行一次
整个.py模块结束后只执行一次

4 passed in 0.14s

2.5 Pytest:setup、teardown方法举例

  • 创建test_pytest_setup_teardown.py,代码如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/9/9 12:28
# 文件名称:test_pytest_setup_teardown.py
# 作用:验证pytest的setup、teardown方法
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson


import pytest


def setup_module():
    print("setup_module:整个.py模块开始前只执行一次")


def teardown_module():
    print("teardown_module:整个.py模块结束后只执行一次")


def setup_function():
    print("setup_function:每个函数级别用例开始前都执行")


def teardown_function():
    print("teardown_function:每个函数级别用例结束后都执行")

def test_one():
    print("用例1")


def test_two():
    print("用例2")


class TestOne():

    def setup_class(self):
        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 setup(self):
        print("setup:类里面每个用例执行前都会执行")

    def teardown(self):
        print("teardown:类里面每个用例结束后都会执行")

    def test_thr(self):
        print("用例3")

    def test_fo(self):
        print("用例4")


if __name__ == "__main__":
    pytest.main()
  • 运行结果如下:
(venv) F:\pytest_study\test_case\test_c>pytest -s -q test_pytest_setup_teardown.py
setup_module:整个.py模块开始前只执行一次
setup_function:每个函数级别用例开始前都执行
用例1
.teardown_function:每个函数级别用例结束后都执行
setup_function:每个函数级别用例开始前都执行
用例2
.teardown_function:每个函数级别用例结束后都执行
setup_class:整个测试类开始前只执行一次
setup_method:类里面每个用例执行前都会执行
setup:类里面每个用例执行前都会执行
用例3
.teardown:类里面每个用例结束后都会执行
teardown_method:类里面每个用例结束后都会执行
setup_method:类里面每个用例执行前都会执行
setup:类里面每个用例执行前都会执行
用例4
.teardown:类里面每个用例结束后都会执行
teardown_method:类里面每个用例结束后都会执行
teardown_class:整个测试类结束后只执行一次
teardown_module:整个.py模块结束后只执行一次

4 passed in 0.14s
目录
相关文章
|
存储 分布式计算 网络协议
阿里云服务器内存型r7、r8a、r8y实例区别参考
在阿里云目前的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y这几个实例规格,相比于活动内的经济型e、通用算力型u1实例来说,这些实例规格等性能更强,与计算型和通用型相比,它的内存更大,因此这些内存型实例规格主要适用于数据库、中间件和数据分析与挖掘,Hadoop、Spark集群等场景,本文为大家介绍内存型r7、r8a、r8y实例区别及最新活动价格,以供参考。
阿里云服务器内存型r7、r8a、r8y实例区别参考
|
安全 Linux KVM
倚天产品介绍|倚天虚拟化:CPU虚拟化原理介绍
虚拟化技术中最关键的技术之一就是CPU虚拟化。在没有硬件辅助虚拟化技术出来之前,通常都是通过TCG(软件进行指令翻译)的方式实现CPU虚拟化。但是由于TCG方式的虚拟化层开销太大,性能太差,因此引入了硬件辅助虚拟化技术。
|
数据采集 数据可视化 数据挖掘
Python量化炒股常用的Pandas包
Python量化炒股常用的Pandas包
334 7
|
域名解析 JavaScript 网络协议
Vue框架中根据域名获取租户ID的方法
通过上述方法,Vue应用可以根据域名动态获取租户ID,进而实现根据不同租户展示定制化信息的多租户系统功能。这种技术不仅增加了应用的灵活性,也提升了用户体验。
344 2
|
传感器 人工智能 自然语言处理
AI智能家居系统如何实现自动化控制?
【6月更文挑战第23天】AI智能家居系统如何实现自动化控制?
689 7
|
网络协议 算法 网络性能优化
|
运维 机器人 开发者
使用阿里云百炼通过appflow模板,组合钉钉机器人搭建个人知识库评测与感想
尝试构建个人助手机制,用阿里云百炼+AppFlow+钉钉机器人,花费两午休时间解决配置问题。百炼appid复制时多出空格致错,文档未提及,耗时排查。应用创建时模型选项限于max, plus, turbo,性价比高的qwen-long未上线。期望尽快修复bug和上线新模型以降低成本。附故障排查截图。
776 1
|
存储 安全 Unix
服务器的常用系统
【5月更文挑战第5天】服务器的常用系统
463 9
|
机器学习/深度学习 人工智能 安全
【大模型】LLM的广泛采用有哪些潜在的社会影响?
【5月更文挑战第7天】【大模型】LLM的广泛采用有哪些潜在的社会影响?
|
传感器 监控 芯片
嵌入式系统中MCU与SoC通信方式的选择与应用
嵌入式系统中MCU与SoC通信方式的选择与应用
462 3