软件测试框架之unittest与pytest的对比-
![[��ǩ:����] [��ǩ:����]](https://www.xuefen.net//file/upload/img/7/21.jpg)
这篇 文章 是关于 自动化测试 框架的,算是一种传统的 测试框架 与新测试框架的一种对比吧( 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更高。
Python自动化测试框架有哪些?
自动化测试常用的Python框架有哪些?常用的框架有Robot f
ramework、Pytest、UnitTest/PyUnit、Behave、Lettuce。Pytest、Robot f
ramework和UnitTest主要用于功能与单元测试,Lettuce和Behave仅适用于行为驱动测试。
一、Robot f
ramework
Python测试框架之一,Robot f
ramework被用在测试驱动(test-driven)类型的开发与验收中。虽然是由Python开发而来,但是它也可以在基于.Net的IronPython和基于Java的Jython上运行。作为一个Python框架,Robot还能够兼容诸如Windows、MacOS、以及Linux等平台。
在使用Robot f
ramework(RF)之前,需要先安装Python 2.7.14及以上的版本。推荐使用Python 3.6.4,以确保适当的注释能够被添加到代码段中,并能够跟踪程序的更改。同时还需要安装Python包管理器--pip。
二、Pytest
适用于多种软件测试的Pytest,是另一个Python类型的自动化测试框架。凭借着其开源和易学的特点,该工具经常被QA(质量分析)团队、开发团队、个人团队、以及各种开源项目所使用。鉴于Pytest具有“断言重写(assert rewriting)”之类的实用功能,许多大型互联网应用,如Dropbox和Mozilla,都已经从下面将要提到的unittest(Pyunit)切换到了Pytest之上。
除了基本的Python知识,用户并不需要更多的技术储备。另外,用户只需要有一台带有命令行界面的测试设备,并且安装好了Python包管理器、以及可用于开发的IDE工具。
三、UnitTest/PyUnit
UnitTest/PyUnit一种标准化的针对单元测试的Python类自动化测试框架。基类TestCase提供了各种断言方法、以及所有清理和设置的例程。因此,TestCase子类中的每一种方法都是以“test”作为名词前缀,以标识它们能够被作为测试用例所运行。用户可以使用load方法和TestSuite类来分组、并加载各种测试。
可以通过联合使用,来构建自定义的测试运行器。正如我们使用Junit去测试Selenium那样,UnitTest也会用到UnitTest-sml-reporting、并能生成各种XML类型的报告。由于UnitTest默认使用了Python,因此我们并不需要什么先决条件。除了需要具备Python框架的基本知识,您也可以额外地安装pip、以及用于开发的IDE工具。
四、Behave
行为驱动开发是一种基于敏捷软件开发的方法。它能够鼓励开发人员、业务参与者和QA人员,三者之间的协作。Python测试框架Behave允许团队避开各种复杂的情况,去执行BDD测试。从本质上说该框架与SpecFlow和Cucumber相似,常被用于执行自动化测试。用户可以通过简单易读的语言来编写测试用例,并能够在其执行期间粘贴到代码之中。而且,那些被设定的行为规范与步骤,也可以被重用到其他的测试方案中。
任何具备Python基础知识的人都可以使用Behave。其他先决条件还包括:先安装Python 2.7.14及以上的版本。通过Python包管理器或pip来与Behave协作。大多数开发人员会选择Pycharm作为开发环境,当然您也可以选用其他的IDE工具。
五、Lettuce
Lettuce是另一种基于Cucumber和Python的行为驱动类自动化工具。Lettuce主要专注于那些具有行为驱动开发特征的普通任务。它不但简单易用,而且能够使得整个测试过程更流畅、甚至更有趣。安装带有IDE的Python 2.7.14、及以上的版本。当然,您也可以使用Pycharm或任何其他IDE工具。同时,您还需要安装Python包管理器。
什么是软件测试架构求解答
测试架构从何而来?其实它就是为了解决上述问题而产生的。从基本的观点看,测试架构是由软件系统技术架构和软件测试框架(特别是自动化测试框架)构建的需求而定。这些需求,决定了以下从不同方面所形成的测试架构。
大家都能理解,越早进行测试,就能越早地发现缺陷,对提高产品质量、降低企业成本就越有利,更重要的是越能预防系统 设计时出现严重的缺陷。如果所设计的系统架构存在严重的缺陷,直到系统集成测试时才发现,所造成的返工将是可怕的。这就需要测试人员对设计进行复审、评 审。测试人员应参与系统架构及其组件接口等设计的审查,包括是否全面考虑非功能特性、各个特性的可测试性评估、设计的合理性等。
现在的系统越来越复杂,其设计往往不是一蹴而就的,需要不断地重构和优化,而这些工作是基于以前版本的测试结果(包 括发现的问题)来实施的。测试人员在完成系统测试后,可以通过对测试结果的分析发现问题,如系统性能瓶颈、安全漏洞等,进而可以对系统的性能、可靠性、安 全性等改善提出有价值的建设性意见。
在系统功能测试时,需要对功能进行合理的划分、归类,建立用例模型,设计合理的测试结构。
从测试工作自身来看,需要建立合适的测试管理系统,包括测试用例库的设计、缺陷跟踪机制等。
什么是测试框架
测试框架总体而言可以参考软件开发框架来构建,下面是从软件开发框架原则中对应提取的测试框架的属性:1、测试框架是测试开发过程中提取特定领域测试方法共性部分形成的体系结构;(软件框架是软件开发过程中提取特定领域软件的共性部分形成的体系结构)2、测试框架的作用:在其基础上重用测试设计原则和测试经验,调整部分内容便可满足需求,可提高测试用例设计开发质量,降低成本,缩短时间;3、不同测试技术领域有不同的测试框架类型;4、测试框架不是一个现成可用的系统,是一个半成品,需要测试工程师基于它结合自己的测试对象知识转化成自己的测试用例;5、测试框架是提供给测试人员开发相应领域测试用例的测试分析设计工具;6、测试框架不是测试用例集,而是通用的,具有一般性的系统主体部分。测试人员像做填空一样,根据具体业务完成特定应用系统中与众不同的特殊部分;7、测试设计模式的思想(等价类/边界值)在测试框架中进行应用。以上为个人总结体会,不一定正确,但我开发的测试框架却是的确满足了以上7个属性来实现的。
什么是软件自动化测试框架?
目前测试工作大多数以手动为主,并不是各个软件公司不想做自动化测试,无奈再没有成熟单位应用的情况下,但靠每个公司自己的摸索,显然比手动测试代价更大,且项目变化频度过快,也对测试框架提出了挑战,到底公司能够下多大的人力,物力来做测试框架的搭建,想必也是困扰了大家许久。框架这个概念并不是只有在测试里面有,开发同样也有框架的概念。框架(f
ramework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。构件领域框架方法在很大程度上借鉴了硬件技术发展的成就,它是构件技术、软件体系结构研究和应用软件开发三者发展结合的产物。在很多情况下,框架通常以构件库的形式出现,但构件库只是框架的一个重要部分。框架的关键还在于框架内对象间的交互模式和控制流模式。框架比构件可定制性强。在某种程度上,将构件和框架看成两个不同但彼此协作的技术或许更好。框架为构件提供重用的环境,为构件处理错误、交换数据及激活操作提供了标准的方法。应用框架的概念也很简单。它并不是包含构件应用程序的小片程序,而是实现了某应用领域通用完备功能(除去特殊应用的部分)的底层服务。使用这种框架的编程人员可以在一个通用功能已经实现的基础上开始具体的系统开发。框架提供了所有应用期望的默认行为的类集合。具体的应用通过重写子类(该子类属于框架的默认行为)或组装对象来支持应用专用的行为。应用框架强调的是软件的设计重用性和系统的可扩充性,以缩短大型应用软件系统的开发周期,提高开发质量。与传统的基于类库的面向对象重用技术比较,应用框架更注重于面向专业领域的软件重用。应用框架具有领域相关性,构件根据框架进行复合而生成可运行的系统。框架的粒度越大,其中包含的领域知识就更加完整。框架,即f
ramework.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。同样,测试框架也是如此,每个公司力求的最终结果,就是花少量的资源来尽可能多的完成测试任务,所以测试框架的建立以及框架的重用性方面是最值得探讨的地方,沙龙里面“自动化测试的框架要讲究粒度”和“建立测试框架需要一定的开发能力”这2句话说的非常有道理,你不能苛求测试人员完成所有测试应用框架的建立,这是不现实的,时间、资源都不允许。所以被测系统的主营业务,核心应用理当成为框架的首选。本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。
以上的文章内容软件测试框架之unittest与pytest的对比-就是小编最近整理出来的,大家可以互相讨论吐槽发表自己的观点哦~!查看更多相关文章请访问学分高考(本文合计6780字)