这篇 文章 是关于 自动化测试 框架的,算是一种传统的 测试框架 与新测试框架的一种对比吧( unittest 与pytest)。如果正在学习自动化测试的小伙伴一定不要错过这篇文章了。
Unittest
unittest是 python 标准库,自带的 单元测试 框架,有时候也被称为PyUnit。类似于java的 JUnit 。
Pytest
pytest是python第三方单元测试库,功能非常的丰富,也比较成熟,比unittest更简洁方便。
下面会从是否需要安装,用例编写规则,用例分类执行,前置和后置,参数化,断言,报告,是否有失败重跑机制等多维度来分析unittest与pytest测试框架的区别;
一、是否需要安装
Unittest是标准库,所以是不需要安装的。
Pytest是第三方库,所以使用前需要安装:pip install pytest
二、用例编写规则
1、Unittest
· 首先需要导入unittest(import unittest)
· 测试类必须继承unittest.TestCase
· 测试方法必须以”test_”开头
· 测试类必须要有unittest.main()方法
2、Pytest
· 测试文件必须以”test_”开头或”_test”结尾
· 测试方法必须要”test_”开头
· 测试类的命名要以”Test”开头
· 运行不需要main方法
三、用例分类执行
1、Unittest
默认执行的是全部的 测试用例 ,但也可以通过加载testsuit执行部分测试用例
2、Pytest
通过@pytest.mark来标记类和方法,pytest.main加入参数(“-m”)只运行标记的类和方法
四、用例的前置和后置
1、Unittest
unittest提供了setUp/tearDown,在每个用例运行前执行一次,运行结束后执行一次。
SetUpClass和tearDownClass,用例执行前,用例执行结束后,只运行一次。
2、Pytest
pytest提供了模块级,类级,方法级等setup/teardown,比unittest的setUp/tearDown要更丰富灵活。
· 模块级(setup_module/teardown_module)开始于模块始末,全局的,整个模块开只运行一次,优先于测试用例。
· 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
· 类级(setup_class/teardown_class)只在类中前后运行一次(在类中),只针对此类生效
· 方法级(setup_method/teardown_method)开始于方法始末(在类中),定义在类里面,每个用例都执行一次
五、参数化
1、Unittest
需要依赖DDT库。
2、Pytest
使用@pytest.mark.parametrize装饰器。
六、断言
1、Unittest
unittest提供了很多断言方式。
如:assertEqual、assertIn、assertTrue、assertFalse
2、Pytest
pytest提供assert表达式,简单,方便。
七、报告
1、Unittest
unittest使用HTMLTestRunnerNew库
2、Pytest
pytest有pytest-HTML、allure插件
八、失败是否重跑
1、Unittest
unittest没有提供这个功能
2、Pytest
Pytest通过pytest-rerunfailures插件是支持用例执行失败重跑的,
好了,分析完unittest和pytest它们的区别以后,咱们再来做一个简单的总结:
Unittest和Pytest这两个都属于python的单元测试框架,也是目前用的比较多的自动化测试框架。
Unittest呢是Python自带的,比较传统的测试框架,提供的插件少,用例格式比较复杂。Pytest相对来说,更加简单方便 ,兼容性比较强,插件也很丰富。用例出错了还可以重跑,非常的灵活,效率要比Unittest更高。
第一种:Robot Framework作为最重要的python测试框架之一,Robot Framework主要被用在测试驱动类型的开发与验收中。虽然由python开发而来,但是它也可以在基于.net的Ironpython和基于Java的Jython上运行。同时,作为一个python框架,Robot还能够兼容诸如Windows、MacOS、Linux等平台。
在使用Robot Framework之前,需要先安装python2.7.14及以上版本,在这里推荐大家使用python3.6.4,以确保适当的注解能够被添加到代码段中,并能够跟踪程序的更改,同时,您还需要安装python包管理器--pip。
第二种:Pytest
适用于多种软件测试的Pytest,是另一个python类型的自动化测试框架。凭借着开源和易学的特点,该工具经常被QA团体、开发团体、个人团体以及各种开源项目所使用。鉴于Pytest具有断言重写之类的实用功能,许多大型互联网应用,如Dropbox、Mozilla,都已经从下面将要提到的unittest切换到了Pytest之上。
除了基本的python知识,用户并不需要更多的技术储备。另外,用户只需要有一台带有命令行界面的测试设备,并且安装好了python包管理器以及可用于开发的IDE工具。
第三种:UnitTest/PyUnit
受到Junit启发的UnitTest/PyUnit,也是一种标准化的针对单元测试的python类自动化测试框架。它的基类TestCase提供了各种断言方法、以及所有清理和设置的例程。因此,TestCase子类中的每一种方法都是以test作为名词点缀,以标识它们能够被作为测试用例所运行。用户可以使用load方法和TestSuite类来分组、并加载各种测试。当然,也可以通过联合使用,来构建自定义的测试运行器。正如我们使用Junit去测试Selenium那样,UnitTest也会用到unittest-sml-reporting,并能生成各种XML类型的报告。
第四种:Behave
行为驱动开发是一种基于敏捷软件开发的方法。它能够鼓励开发人员、业务参与者和QA人员,三者之间的协作。python测试框架Behave允许团队避开各种复杂的情况,去执行BDD测试。从本质上说该框架与SpecFlow和Cucumber相似,常被用于执行自动化测试。用户可以通过简单易读的语言来编写测试用例,并能够在其执行期间粘贴到代码之中。而且,那些被设定的行为规范与步骤,也可以被重用到其他的测试方案中。
第五种:Lettuce
Lettuce是另一种基于Cucumber和python的行为驱动类自动化工具。Lettuce主要专注于那些具有行为驱动开发特性的普通任务。它不但简单易用,而且能够使得整个测试过程更流畅、甚至更有趣。
您需要安装带有IDE的python2.7.14及以上版本。当然,您也可以使用pycharm或任何其他IDE工具。同时,您还需要安装python包管理器。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)