Python 各种测试框架简介(三):nose
来源:互联网 发布:剑灵帅铃女捏脸数据 编辑:程序博客网 时间:2024/05/03 04:11
本篇将介绍的 nose 不再是 Python 官方发行版的标准包,但它与 unittest 有着千丝万缕的联系。比如 nose 的口号就是:
扩展 unittest,nose 让测试更简单。
简单在哪
自古(1970)以来,任何标榜“更简单”的工具所使用的手段基本都是隐藏细节,nose 也不例外。nose 不使用特定的格式、不需要一个类容器,甚至不需要 import nose
~(这也就意味着它在写测试用例时不需要使用额外的 api)
前两篇中一直使用的 unnecessary_math.py 的 nose 版测试用例是这样子的:
lang:pythonfrom unnecessary_math import multiplydef test_numbers(): assert multiply(3,4)==12def test_strings(): assert multiply('a',3)=='aaa'
看上去完全就是一个普通的模块文件嘛,甚至连 __main__
函数都不用。这里唯一需要一点“讲究”的语法在于,测试用例的命名仍需以 test_
开头。 <br />
运行 nose
nose 在安装的时候也向你 Python 根目录下的 Scripts 文件夹内添加了一个名为 nosetests 的可执行文件,这个可执行文件就是用来执行测试的命令;当然你也仍可以使用 -m
参数来调用 nose 模块:
$ nosetests test.py$ python -m nose test.py··------------------------------------------------Ran 2 tests in 0.001sOK
另外非常棒的一点是,nosetests 兼容对 doctest 和 unittest 测试脚本的解析运行。如果你认为 nose 比那两个都好用的话,完全可以放弃 doctest 和 unittest 的使用。 <br />
测试环境
由于扩展自 unittest,nose 也支持类似于 setUp() setUpClass() setUpModule()
的测试环境创建方式,只不过函数命名规则最好改一改,我们可以使用更符合 Python 规范的命名规则。另外因为 nose 支持上例中所展示的函数式测试用例,所以还有一种为单个函数创建运行环境的装饰器可用。下面我们将使用一个例子来展示这四种功能的用法。
test.py:
lang:pythonfrom nose import with_setup from unnecessary_math import multiplydef setup_module(module): print('setup_module 函数执行于一切开始之前')def setup_deco(): print('setup_deco 将用于 with_setup')def teardown_deco(): print('teardown_deco 也将用于 with_setup')@with_setup(setup_deco,teardown_deco)def test_2b_decorated(): assert multiply(3,4)==12class TestUM(): def setup(self): print('setup 方法执行于本类中每条用例之前') @classmethod def setup_class(cls): print('setup_class 类方法执行于本类中任何用例开始之前,且仅执行一次') def test_strings(self): assert multiply('a',3)=='aaa'
运行 $ nosetests -v test.py
结果如下:
test.TestUM.test_strings ... oktest.test_2b_decorated ... ok---------------------------------------------------------------------Ran 2 tests in 0.002sOK
我们的 print()
函数一点东西都没打出来,如果你想看的话,给 nosetests 添加一个 -s
参数就可以了。 <br />
Test Discovery
nose 的 discovery 规则为:
- 长得像测试用例,那就是测试用例。路径、模块(文件)、类、函数的名字如果能和
testMatch
正则表达式匹配上,那就会被认为是一个用例。另外所有unittest.TestCase
的子类也都会被当做测试用例。(这里的testMatch
可能是个环境变量之类的东西,我没有去查,因为反正你只要以test_
开头的格式来命名就可以保证能被发现) - 如果一个文件夹既长得不像测试用例,又不是一个包(路径下没有
__init__.py
)的话,那么 nose 就会略过对这个路径的检查。 - 但只要一个文件夹是一个包,那么 nose 就一定会去检查这个路径。
- 显式避免某个对象被当做测试用例的方法为:给其或其容器添加一个
__test__
属性,并且运算结果不为True
。并不需要直接指定为False
,只要bool(__test__) == False
即可。另外,这个属性的添加方式比较特别,确认自己已经掌握使用方法前最好都试试。例如在类里面需要添加为类属性而非实例属性(即不能写在__inti__(self)
里),否则不起作用。这里因为只是简介,就不挨个试了。(官方文档里就没解释清楚...)
调用 discovery 的语法为,cd 到目录后直接调用 $ nosetests
,后面不跟具体的文件名。另外这种方法其实对 unittest 也适用。
- Python 各种测试框架简介(三):nose
- python nose测试框架全面介绍三
- Python测试框架--nose
- python 测试框架nose
- Python测试框架nose基础(1)
- python测试工具--nose简介
- python测试工具--nose简介
- python下常见测试框架之三--nose
- python 中的测试框架 nose
- python测试框架nose研究
- python自动化测试框架nose
- (!)Python 各种测试框架简介
- Python 各种测试框架简介
- python nose测试框架全面介绍二
- python nose测试框架全面介绍四
- Python 各种测试框架简介(二):unittest
- Python 各种测试框架简介(一):doctest
- Python 各种测试框架简介(二):unittest
- 重构 改善既有代码的设计—— 重新组织方法
- 【26.8%】【CF 46D】Parking Lot
- stuscore.c:1:21: fatal error: stuscore.h: No such file or directory
- Tensorflow下载与安装
- 腾讯优测优分享 | 多媒体,多问题
- Python 各种测试框架简介(三):nose
- 安卓AS打包项目出现错误-【Android】Error: Expected resource of type styleable [ResourceType]
- USACO 2012 March Gold Large Banner
- 如何调试MAKEFILE
- Swift基础语法1
- 规格的添加边框列表
- POJO是什么,javabean是什么,以及POJO与javabean的区别
- Android 浅谈 Activity(上)
- 高吞吐量的分布式发布订阅消息系统Kafka--spring-integration-kafka的应用