unittest与pytest的区别,2024年最新最详细的docker中安装并配置redis

实例演示

讲了七大区别,总要演示一下具体实例,用事实说话。

前后置区别

这里抽用例前置与后置的区别来讲,先看unittest的前后置使用:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41import unittest class TestFixtures01(unittest.TestCase): # 所有用例执行前执行 def setUp(self) -> None: print(``"setUp开始"``) def tearDown(self) -> None: print(``"tearDown结束"``) # 每条用例执行前执行 @classmethod def setUpClass(cls) -> None: print(``"setUpClass开始"``) @classmethod def tearDownClass(cls) -> None: print(``"tearDownClass结束"``) # 测试用例 def test_001(self): print(``"测试用例001"``) class TestFixtures02(unittest.TestCase): def test_002(self): print(``"测试类2"``) # 每个模块执行前执行 def setUpModule(): ""``" 在所有测试类在调用之前会被执行一次,函数名是固定写法,会被unittest框架自动识别 ""``" print(``'集成测试 >>>>>>>>>>>>>>开始'``) def tearDownModule(): print(``"集成测试 >>>>>>>>>>>>>>结束"``) if __name__ ==``'__main__'``: unittest.main()

运行结果:

从结果上得知, 三个方法的逻辑优先级: setUp()&tearDown() < setUpClass()&tearDownClass() < setUpModule()&tearDownModule()

接下来看pytest的前后置:

1、我们都知道在自动化测试中都会用到前后置,pytest 相比 unittest 无论是前后置还是插件等都灵活了许多,还能自己用 fixture 来定义。

首先了解一下,用例运行前后置级别如下:

1.模块级:全局的,整个模块开只运行一次,优先于测试用例。

2.类级别:定义在类里面,只针对此类生效。类似unittest的cls装饰器

3.函数级:只对函数生效,类下面的函数不生效。

4.方法级:定义在类里面,每个用例都执行一次

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42def setup_module(): print(``'\n整个模块 前 只运行一次'``) def teardown_module(): print(``'\n整个模块 后 只运行一次'``) def setup_function(): print(``'\n不在类中的函数,每个用例 前 只运行一次'``) def teardown_function(): print(``'\n不在类中的函数,每个用例 后 只运行一次'``) def test_ab(): b = 2 assert b < 3 def test_aba(): b = 2 assert b < 3 class Test_api(): def setup_class(self): print(``'\n此类用例 前 只执行一次'``) def teardown_class(self): print(``'\n此类用例 后 只执行一次'``) def setup_method(self): print(``'\n此类每个用例 前 只执行一次'``) def teardown_method(self): print(``'\n此类每个用例 后 执行一次'``) def test_aa(self): a = 1 print(``'\n我是用例:a'``)       # pytest -s 显示打印内容 assert a > 0 def test_b(self): b = 2 assert b < 3

运行结果:

2、这是原始用法,下面看使用Fixture,Fixture 其实就是自定义 pytest 执行用例前置和后置操作,首先创建 conftest.py 文件 (规定此命名),导入 pytest 模块,运用 pytest.fixture 装饰器,默认级别为:函数级:

其它用例文件调用即可,如下定义一个函数,继承 conftest.py 文件里的 login 函数即可调用:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15# conftest.py配置需要注意以下点: # conftest.py配置脚本名称是固定的,不能改名称 # conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件 # 不需要import导入 conftest.py,pytest用例会自动查找 import pytest def test_one(login): print(``"登陆后,操作111"``) # def test_two(): #   print("操作222") # # def test_three(login): #   print("登陆后,操作333")

运行结果:

3、扩展用法,多个自定义函数和全局级别展示:(全局的比如用于登录获取到token其他用例模块就不需要再登录了)

1 2 3 4 5 6 7 8 9 10import pytest def test_one(login): print(``"登陆后,操作111"``) def test_two(login,open_page): print(``"测试用例2"``) def test_three(open_page): print(``"测试用例3"``)

运行结果:

细心的人应该可以知道,测试用例2并没有调用login函数,因为前置设置的是共享模式,类似全局函数。

参数化区别

参数化应用场景,一个场景的用例会用到多条数据来进行验证,比如登录功能会用到正确的用户名、密码登录,错误的用户名、正确的密码,正确的用户名、错误的密码等等来进行测试,这时就可以用到框架中的参数化,来便捷的完成测试。

参数化 就是数据驱动思想,即可以在一个测试用例中进行多组的数据测试,而且每一组数据都是分开的、独立的。

unittest参数化其实是:ddt,叫数据驱动。

pytest数据驱动,就是参数化,使用@pytest.mark.parametrize

1.先看unittest如何进行参数化:

1 2 3 4 5 6 7 8 9test_data = [1,2,3] @ddt.ddt class Testddt(unittest.TestCase): @ddt.data(*test_data) def test_001(self,get_data): print(get_data) if __name__ ==``'__main__'``: unittest.main()

运行结果:

2.pytest中参数化的用法

在测试用例的前面加上:
@pytest.mark.parametrize(“参数名”,列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:一组测试数据。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)**
[外链图片转存中…(img-UsFkyX4U-1712991013067)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值