[转]Python测试框架对比----unittest, pytest, nose, robot framework对比

什么是框架?
框架(Framework)是整个或部分系统的可重用设计,
框架是用来解决代码的组织及运行控制问题的。
在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求,记录日志,连接并对比数据库数据。每个脚本里都重写一遍各种方法不仅工作量大而且易错。所以我们需要把公共的方法提取出来,封装成单独的模块,放到公用方法包里。另外配置文件,数据文件,日志等我们也需要分类存到不同的文件夹下。这种对公共方法的封装及对脚本及配置文件怎么组织的设计就叫做框架。
同时,一般框架除了完成对代码及配置文件的组织之外还要提供运行的控制功能。比如批量执行,分模块执行,生成报告,异常处理等等。
总结为以下3点:
- 封装公共方法
 - 代码及配置文件的组织
 - 执行控制
 
什么是测试框架?
一个完整的测试脚本(用例)一般包含以下几个步骤:
- 环境准备或检查
 - 执行业务操作
 - 断言结果
 - 清理环境
 
而测试框架一般还要完成用例加载,批量执行,异常控制,结果输出等功能。基础的测试框架一般只提供执行控制方面的功能。
测试框架应具有的特点
- 易用性:编写用例,执行用例,生成报告及定位问题方便
 - 健壮性:稳定,比如timeout机制等
 - 扩展性:插件
 - 灵活性:用例组织或执行的灵活性,Fixture功能(不同范围的setUp和tearDown)等
 - 定制性:二次开发方便
 
unittest,pytest,nose,robot framework简介
- unittest: Python自带,最基础的单元测试框架
 - nose: 基于unittest开发,易用性好,有许多插件
 - pytest: 同样基于unittest开发,易用性好,信息更详细,插件众多
 - robot framework:一款基于Python语言的关键字驱动测试框架,有界面,功能完善,自带报告及log清晰美观
 
| 项目 | unittest | nose | pytest | robot framework | 
|---|---|---|---|---|
| 用例编写 | 继承unittest.TestCase类需要组织各种testSuite断言种类繁多 | test开头的方法即可 | test开头的方法即 | 可 robot格式,文本文件 | 
| 执行器 | 自己写run_all_tests+discover+CommandParser+... | nosetests ... | py.test ... | pybot ... | 
| 用例发现Discover | 支持 | 支持 | 支持 | 支持 | 
| 跳过用例 | unittest.skip()unittest.skipIf()raise uniitest.SkipTest | from nose.plugins.skip import SkipTestraise SkipTest | @pytest.mark.skipif( condition)@pytest.mark.xfail | - | 
| Fixtures | setUp/tearDown@classmethodsetUpClass... | 支持 | @pytest.fixture(session="session", autouse=True)fixture的作用域:function、module、session ,autouse=True使得函数将默认执行 | [Setup] ...[Teardown] ... | 
| 用例标签tags | 借助unittest.skip()+comandParser实现 | attrib标签from nose.plugins.attrib import attr@attr(speed='slow')def test_big_download(): pass$ nosetests -a speed=slow | @pytest.mark.webtest自定义一个mark,如下,然后 py.test -v -m webtest 只运行标记了webtest的函数, py.test -v -m "not webtest" 来运行未标记webtest的 | [Tags] test level1pybot -i/--include tagName C:\TF-Testpybot -e/--exculde level1 *.robot排除 | 
| 超时机制Timeout | 自己实现 | from nose.tools import timedimport time@timed(1)def test_lean_5():time.sleep(2)pass | pip install pytest-timeout@pytest.mark.timeout(60)或 pytest --timeout=300 | [Timeout] 3 seconds | 
| 参数化 | 结合ddt使用 | 结合ddt使用 | @pytest.mark.parametrize("a,b,expected", testdata)def test_timedistance_v0(a, b, expected):diff = a - bassert diff == expected | [Template] 1 2 3 | 
| 报告 | HTMLTestRunner | pip install nose-htmloutput--with-html --html-file= | pip install -U pytest-htmlpy.test --html=./report.html | 支持,默认自动生成 | 
| 日志log | 自己实现 | --nologcapture 不使用log--logging-format=FORMAT使用自定义的格式显示日志--logging-datefmt=FORMAT 和上面类类似,多了日期格式--logging-filter=FILTER日志过滤,一般很少用,可以不关注--logging-clear-handlers 也可以不关注--logging-level=DEFAULT log的等级定义 | pytest test_add.py --resultlog=./log.txtpytest test_add.py --pastebin=all | 支持,默认自动生成 | 
| 只列出用例collect-only | 无 | nosetests --collect-onlynosetests -v --with-id | --collect-only -v | - | 
| 失败用例重跑rerun failures | 无 | nosetests -v --failed | pip install -U pytest-rerunfailures@pytest.mark.flaky(reruns=5)py.test --rerun=3 | robot --rerunfailed | 
| baseline对比 | 无 | 无 | 无 | 无 | 
| 并发 | 改造unittest使用协程并发,或使用线程池+Beautiful Report | 命令行并发 | pytest-xdist:分发到不用的cpu或机器上 | 命令行并发 | 
| xml报告 | 无 | --with-xunit | --xunit-file=... /pytest+Allure | --junit-xml= | 
| Selenium支持 | 无 | 无 | pytest-selenium | robotframework-seleniumlibraryrobotframwork-selenium2library | 
总结:总体来说,unittest比较基础,二次开发方便,适合高手使用;pytest/nose更加方便快捷,效率更高,适合小白及追求效率的公司;robot framework由于有界面及美观的报告,易用性更好,灵活性及可定制性略差。
参考框架设计方案
unittest
上海一悠悠: selenium+python自动化91-unittest多线程生成报告(BeautifulReport)
pytest
[转]Python测试框架对比----unittest, pytest, nose, robot framework对比的更多相关文章
- Python测试框架对比----unittest, pytest, nose, robot framework对比
		
什么是框架? 框架(Framework)是整个或部分系统的可重用设计, 框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求,记录日志, ...
 - Python测试框架之Unittest梳理
		
1. 2.
 - Python测试框架对比
		
如有任何学习问题,可以添加作者微信:lockingfree 更多学习资料请加QQ群: 822601020获取 unittest, pytest, nose, robot framework对比 什么是 ...
 - Python测试框架pytest入门基础
		
Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...
 - 全功能Python测试框架:pytest
		
python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest. imag ...
 - <自动化测试>之<使用unittest Python测试框架进行参数化测试>
		
最近在看视频时,虫师简单提到了简化自动化测试脚本用例中的代码量,而python中本身的参数化方法用来测试很糟糕,他在实际操作中使用了parameterized参数化... 有兴趣就查了下使用的方法,来 ...
 - python 测试框架nose
		
python测试框架nose nose不是python自带模块,这里我才用pip的方式安装 pip install nose 这样就完成了安装,然后再确认下是否安装成功了,直接打开cmd输入noset ...
 - Python测试框架unittest
		
Python测试框架unittest 一.unittest框架 (1)unittest特点 1.python自带的单元测试框架,不需要安装 2.用例执行互不干扰 3.提供不同范围的setUp和tear ...
 - 用 Python 测试框架简化测试
		
用 Python 测试框架简化测试 摘要:本文将向您介绍了三种流行 Python 测试框架(zope.testing,py.test,nose)的基本特性,并讨论新一代的测试风格. 最近出现了行业级的 ...
 
随机推荐
- redis密码配置
			
配置密码 重启密码会失效 配置在redis.conf中 requirepass test123,则重启不会失效
 - SVN 本地文件锁/服务端文件锁清除步骤
			
1.本地文件锁,直接cleanup,cleanup界面选择break locks即可 2.服务端文件锁,本地文件右击没有release lock或者break lock的选项时 方法1:右键,svn选 ...
 - C#基于RabbitMQ实现客户端之间消息通讯实战演练
			
一.背景介绍和描述 MQ消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.何时需要消息队列?当你需要使用 ...
 - Android中的算法
			
算法是思想的体现形式,常见的算法做一些总结 算法简介 算法-Algorithm 解题方案的准确而完整的描述,是一系列解决问题的清晰指令 特征 有穷性,确切性,输入项,输出项,可行性 算法运算要素 算术 ...
 - 数组中重复的数字(Python)
			
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019-08-13 22:35 # @Author : daryl # @File : ...
 - python之生成器yeild
			
python生成器Generator——yield 思考: 首先思考这样一个问题: 创建一个列表,但是内存受限,容量一定是有限的.那么如果创建了一个包含100万个元素的列表,不仅占用很大的存储空间,而 ...
 - Create your first Java application
			
参考链接 -[IntelliJ IDEA] https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-appli ...
 - kafka和zookeeper安装部署(版本弄不好就是坑)
			
yum install -y unzip zip 配置host vi /etc/host172.19.68.10 zk1 1. zookeeper zookeeper下载地址 http://mirro ...
 - Python 获取本月的最后一天
			
一.需求 现在有一个场景,需要每月的最后一天,发送一封邮件. 二.获取本月最后一天 有没有办法使用Python的标准库轻松确定(即一个函数调用)给定月份的最后一天? 答案是有的,使用 datetime ...
 - Hadoop 系列(五)—— Hadoop 集群环境搭建
			
一.集群规划 这里搭建一个 3 节点的 Hadoop 集群,其中三台主机均部署 DataNode 和 NodeManager 服务,但只有 hadoop001 上部署 NameNode 和 Resou ...