如有任何学习问题,可以添加作者微信:lockingfree
更多学习资料请加QQ群: 822601020获取

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

888米兔: python+requests接口自动化测试框架实例详解教程

上海一悠悠: selenium+python自动化91-unittest多线程生成报告(BeautifulReport)

严北: Python - 用协程并发执行测试用例

pytest

晶莹的营: pytest学习笔记(一)
晶莹的营: pytest学习笔记(二)
晶莹的营: pytest学习笔记(三)

liuchunming033: 用Pytest+Allure生成漂亮的HTML图形化测试报告

Python测试框架对比的更多相关文章

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

      测试框架 什么是框架? 框架(Framework)是整个或部分系统的可重用设计,框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求 ...

  2. Python测试框架对比----unittest, pytest, nose, robot framework对比

    什么是框架? 框架(Framework)是整个或部分系统的可重用设计, 框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求,记录日志, ...

  3. 用 Python 测试框架简化测试

    用 Python 测试框架简化测试 摘要:本文将向您介绍了三种流行 Python 测试框架(zope.testing,py.test,nose)的基本特性,并讨论新一代的测试风格. 最近出现了行业级的 ...

  4. 前端测试框架对比(js单元测试框架对比)

    前端测试框架对比(js单元测试框架对比) 本文主要目的在于横评业界主流的几款前端框架,顺带说下相关的一些内容. 测试分类 通常应用会有 单元测试(Unit tests) 和 功能测试(Function ...

  5. 【转载】Python测试框架doctest

    原文在这里 :Python测试框架doctest 先记录一下,直接复制粘贴后,排版是乱的,后续再弄.

  6. 全功能Python测试框架:pytest

    python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest.   imag ...

  7. <自动化测试>之<使用unittest Python测试框架进行参数化测试>

    最近在看视频时,虫师简单提到了简化自动化测试脚本用例中的代码量,而python中本身的参数化方法用来测试很糟糕,他在实际操作中使用了parameterized参数化... 有兴趣就查了下使用的方法,来 ...

  8. python 测试框架nose

    python测试框架nose nose不是python自带模块,这里我才用pip的方式安装 pip install nose 这样就完成了安装,然后再确认下是否安装成功了,直接打开cmd输入noset ...

  9. Python测试框架unittest

    Python测试框架unittest 一.unittest框架 (1)unittest特点 1.python自带的单元测试框架,不需要安装 2.用例执行互不干扰 3.提供不同范围的setUp和tear ...

随机推荐

  1. PAT-1111 Online Map (30分) 最短路+dfs

    明天就要考PAT,为了应付期末已经好久没有刷题了啊啊啊啊,今天开了一道最短路,状态不是很好 1.没有读清题目要求,或者说没有读完题目,明天一定要注意 2.vis初始化的时候从1初始化到n,应该从0开始 ...

  2. Python之算法评估-4

    一.评估算法的方式分两种,一种是分类算法的评估,一种是回归算法的评估.为什么要分两种呢,因为分类算法中可以通过准确率.精准率.召回率.混淆矩阵.AUC来评估算法的准确度.但是在预测值的时候是没有办法去 ...

  3. syslog 日志

    syslog日志是系统日志的一种,可以存放在本地也可以发送到syslog日志服务器, 但是syslog日志由于的格式不统一,在日常工作中审计syslog日志是一种很麻烦的 事情.不过在2001出现了一 ...

  4. Http 和 Socket 之间的恩爱情仇

    前言 一些刚入门的小伙伴可能会用 Socket,也会用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客户端工具,这两个东西看着有点像可是又不太一样,到底是哪里不一样呢? ...

  5. 异常-Phoenix HBASE Last region should end with an empty key. You need to create a new region and regioninfo in HDFS to plug the hole

    1 详细异常信息 RROR: There is a hole in the region chain between \x03\x00\x00\x00\x00\x00\x00\x00\x00 and ...

  6. 可能是东半球最好的 Curl 学习指南,强烈建议收藏!

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  7. 偶然发现的几个OPENWRT工具安装包

    https://rychly.gitlab.io/openwrt-packages/ 有心人已经打好包了,下载拿用 例如:dropbrute https://rychly.gitlab.io/open ...

  8. PAT基础级-钻石段位样卷2-7-7 危险品装箱 (25 分)

    集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否 ...

  9. 开源框架---tensorflow c++ API中./configure步骤细节

    u@u160406:~/tf1.13/tensorflow$ git checkout r1.13 分支 r1.13 设置为跟踪来自 origin 的远程分支 r1.13.切换到一个新分支 'r1.1 ...

  10. Codeforces #496 E1. Median on Segments (Permutations Edition)

    http://codeforces.com/contest/1005/problem/E1 题目 https://blog.csdn.net/haipai1998/article/details/80 ...