unittest是python的官方库,功能较少,pytest是第三方库,是基于unittest的扩展框架,可支持多种插件,目前有100多种,功能强大。
pytest可兼容unittest写的用例,代码完全不用更改。
一、用例编写方面
1、测试文件:
unittest必须:test*.py,pytest默认定义方式:test_*.py或者*_test.py,也可通过配置文件pytest.ini,配置块[python],配置项pytest_files自定义;
2、测试类:
unittest不要求测试类命名,pytest默认以Test开头,也可自定义;
3、测试方法:
unittest必须以test开头,非test_,pytest默认以test开头,非test_,也可自定义;
4、unittest编写测试用例必须定义为类的形式,且类必须要继承unittest.TestCase类;
pytest可定义为类形式(不用继承什么),也可定义为函数,运行时是以函数去查找的。
小结:
unittest测试文件、方法必须以test开头;
pytest测试文件必须以test开头或结尾,测试方法必须以test开头,测试类必须以Test开头(不考虑自定义情况)
二、运行方面
1、unittest创建运行文件run.py,必须加载测试集合(存放测试用例的文件夹目录),并通过TestRunner创建运行对象,然后运行测试集合(suite,也称为测试套件)
2、pytest:
(1)在命令行中输入“pytest 参数”即可自动查找test开头的测试方法并执行;
(2)创建run.py:pytest.main([参数])
三、用例前后置
1、unittest:
用例级别前置:setUp(),后置:tearDown()
类级别前置:setUpClass(),后置:tearDownClass()
2、pytest提供了模块级、函数级、类级、方法级的setup/teardown,比unittest的setUp/tearDown更灵活。
模块级(setup_module/teardown_module)开始于模块始末,全局的
函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
方法级(setup/teardown)开始于方法始末(在类中)
pytest还可以在函数前加@pytest.fixture()装饰器,在测试用例中装在fixture函数。fixture的使用范围可以是function,module,class,session。
firture相对于setup和teardown来说有以下几点优势:
命名方式灵活,不局限于setup和teardown这几个命名
conftest.py (名字必须是conftest.py)配置里可以实现数据共享,不需要import就能自动找到一些配置,可供多个py文件调用。
scope="module" 可以实现多个.py跨文件共享前置
scope="session" 以实现多个.py跨文件使用一个session来完成多个用例
用yield来唤醒teardown的执行,yield前是前置,yield后是后置
四、断言
unittest提供了assertEqual、assertIn、assertTrue、assertFalse;
pytest只能通过python的关键字assert进行断言
五、参数化
unittest需依赖ddt库;
pytest直接使用@pytest.mark.parametrize装饰器:
@pytest.mark.parametrize("用例方法中用于接收测试数据的参数名",数据)
六、unittest没有而pytest有的功能
1、用例分类执行
(1)unittest默认执行全部用例,也可以通过加载testsuit,执行部分用例。
(2)pytest可以通过@pytest.mark来标记类和方法,通过标签执行指定用例,
具体步骤如下:
(1)注册标签:创建pytest.ini配置文件,创建配置块[pytest],配置项marker,值为标签名
(2)给用例加标签:在用例前加:@pytest.mark.标签名
(3)执行用例:python -m 标签名 或者 python.main(["-m","标签名"])
2、重运行机制
(1)unittest无此功能;
(2)pytest支持用例执行失败重跑,pytest-rerunfailures插件。
pytest --reruns 3 --reruns-delay 2或者pytest.main(["--reruns","3","--reruns-delay","2"])
重运行次数共3次,每隔2秒重运行一次
七、测试报告
1.unittest使用HTMLTestRunnerNew库。
2.pytest有pytest-HTML、allure插件。
最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础