多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

python自动化测试框架的选择

更新时间:2022-08-03 09:24:00 作者:多测师 浏览:22

  基本概念

  什么是框架?

  框架(Framework)是整个或部分系统的可重用设计,框架是用来解决代码的组织及运行控制问题的。

  框架是一个“架子”,这个架子能够完成领域内基础的、重要的功能。基于这个已有的架子,我们可以将重心放在面向业务的开发上。

  其次,框架也是一个“框框”。“框框”为我们设置了有形和无形的约束。所谓有形的约束,就是我们的开发工作需要符合框架的定义、与框架兼容。所谓无形的约束,就是我们的开发工作需要承受框架的缺点和不足(毕竟,没有十全十美的框架)。

  总结:封装公共方法、代码和配置文件的组织、执行控制。

python自动化测试框架的选择

  什么是测试框架?

  软件测试分为手工测试和自动化测试。需要注意的是,一般只有自动化测试才有框架的概念。(自动化)测试框架,需要提供自动化测试用例编写、自动化测试用例执行、自动化测试报告生成等基础功能。

  有了测试框架,我们只需要完成和业务高度相关的测试用例设计和实现即可。另外,框架会为我们处理好复杂度与扩展性的问题,我们无需为此操心。

  有了这些概念作为支撑,我们就很容易理解什么是Python单元测试框架了。所谓Python单元测试框架,就是面向Python编程语言,服务于Python单元测试的自动化测试框架。

  一个完整的测试脚本(用例)一般包含以下几个步骤:

  环境准备或检查

  执行业务操作

  断言结果

  清理环境

  而测试框架一般还要完成用例加载,批量执行,异常控制,结果输出等功能。基础的测试框架一般只提供执行控制方面的功能。

  测试框架应具有的特点:

  易用性:编写用例,执行用例,生成报告及定位问题方便

  健壮性:稳定,比如timeout机制等

  扩展性:插件

  灵活性:用例组织或执行的灵活性,Fixture功能(不同范围的setUp和tearDown)等

  定制性:二次开发方便

  什么是单元测试?

  单元测试是软件测试的一种类型。顾名思义,单元测试就是测试的对象是程序中的最小单元的测试。程序的最小单元可以是一个函数,一个类,也可以是函数的组合,类的组合。

  单元测试是软件测试中最低级别的测试活动,与之相对的更高级别的测试有模块测试,集成系统和系统测试等。单元测试一般由软件开发者而不是独立的测试工程师完成。另外,单元测试有一个隐含的性质,那就是单元测试天然就是自动化的,单元测试属于自动化测试。

  主流框架

  unittest:python自带,最基础的单元测试框架

  nose:基于unittest开发,易用性好,有许多插件

  pytest:同样基于unittest开发,易用性好,信息更详细,插件众多

  robotframework:一款基于Python语言的关键字驱动测试框架,有界面,功能完善,自带报告及log清晰美观

  总体来说,robotframework由于有界面及美观的报告,易用性更好,灵活性及可定制性略差;unittest比较基础,二次开发方便,适合高手使用;pytest/nose插件多更简洁;pytest>nose>unittest

  pytest优点:

  社区更活跃,学习资料详细(node2不支持node全部功能)

  pytest支持更复杂的测试功能

  pytest报错调试更易查看

  unittest

  用例编写规则?

  unittest提供了testcases、testsuites、testfixtures、testrunner相关的类,让测试更加明确、方便、可控。使用unittest编写用例,必须遵守以下规则:

  测试文件必须先importunittest

  测试类必须继承unittest.TestCase

  测试方法必须以“test_”开头

  测试类必须要有unittest.main()方法

  用例前置和后置

  unittest提供了setUp/tearDown,只能针对所有用例。

  断言

  unittest提供了assertEqual、assertIn、assertTrue、assertFalse。

  报告

  unittest使用HTMLTestRunnerNew库。

  失败重跑

  unittest无此功能。

  参数化

  unittest需依赖ddt库。

  用例分类执行

  unittest默认执行全部用例,也可以通过加载testsuit,执行部分用例。

  pytest

  用例编写规则

  pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规则:

  试件名必须以“test_”开头或者"_test"结尾(如:test_ab.py)

  测试方法必须以“test_”开头

  测试类命名以"Test"开头

  用例前置和后置

  pytest提供了模块级、函数级、类级、方法级的setup/teardown,比unittest的setUp/tearDown更灵活。

  模块级(setup_module/teardown_module)开始于模块始末,全局的

  函数级(setup_function/teardown_function)只对函数用例生效(不在类中)

  类级(setup_class/teardown_class)只在类中前后运行一次(在类中)

  方法级(setup_method/teardown_method)开始于方法始末(在类中)

  类里面的(setup/teardown)运行在调用方法的前后

  断言

  pytest直接使用assert表达式。

  报告

  pytest有pytest-HTML、allure插件。

  失败重跑

  pytest支持用例执行失败重跑,pytest-rerunfailures插件。

  参数化

  pytest直接使用@pytest.mark.parametrize装饰器。

  用例分类执行

  pytest可以通过@pytest.mark来标记类和方法,pytest.main加入参数("-m")可以只运行标记的类和方法。

  robotframework

  优点:

  不需要懂编程也可以用。

  有丰富的测试库:AutoItLibrary,AppiumLibrary,HTTPlibrary(Requests)...,所以,满足了主流的各种自动化测试需求。

  实在满足不了测试需求,只要你懂Python,也可以自己去开发关键字来用。

  便于团队推广,不是所有测试团队都懂编程的,也不是每个测试都对技术有追求的。这个时候,只要团队中有一个人懂python开发robotfamework关键字,其它人会关键字就可以。

  集成了非常棒的HTML测试报告,还带错误截图噢。

  缺点:

  一样有学习成本。robotframework也不带录制功能;不是录个脚本随便跑的那种。

  robotframework目前对Python3的支持性不好,主要是它的扩展库的问题。

  我不太喜欢robotframework的语法(我说的是我)。

  nose

  nose是Python的一个第三方单元测试框架。这意味着,如果要使用nose,需要先显式安装它:pipinstallnose。

  与unittest不同的是,nose的测试用例并不限制于类。任何函数和类,只要名称匹配一定的条件(例如,以test开头或以test结尾等),都会被自动识别为测试用例;并且,为了兼容unittest,所有的基于unitest编写的测试用例,也会被nose自动识别为。

  需要注意的是,nose已经进入维护模式,从github(https://github.com/nosedevs/nose/commits/master)上可以看到,nose最近的一次代码提交还是在2016年5月4日。继承nose的是nose2,但要注意的是,nose2并不支持nose的全部功能,

  nose2的主要目的是扩展Python的标准单元测试库unittest,因此它的定位是“带插件的unittest”。nose2提供的插件,例如测试用例加载器,覆盖度报告生成器,并行测试等内置插件和第三方插件,让单元测试变得更加完善。

  使用情况

  越来越多的项目开始放弃unittest和nose以及robotframework,转而使用pytest,比如Mozilla和Dropbox.因为pytest可以提供更丰富功能,包括assert重写,第三方插件,以及其他测试工具无法比拟的fixture模型。

  此外,现在大厂很多都用了pytest这个测试框架,因为效率高,数据驱动模式非常人性化,可持续集成也非常方便,最主要是非常简单,团队实习生都看一下模板都可以上手,团队从unittest转为nose,再最终定为pytest,目前基本是每个项目都有pytest的自动化覆盖,较少回归的时间。

  以上内容为大家介绍了python自动化测试框架的选择,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部