Python 各种测试框架简介(三):nose
本篇将介绍的 nose 不再是 Python 官方发行版的标准包,但它与 unittest 有着千丝万缕的联系。比如 nose 的口号就是:
扩展 unittest,nose 让测试更简单。
简单在哪
自古(1970)以来,任何标榜“更简单”的工具所使用的手段基本都是隐藏细节,nose 也不例外。nose 不使用特定的格式、不需要一个类容器,甚至不需要 import nose ~(这也就意味着它在写测试用例时不需要使用额外的 api)
前两篇中一直使用的 unnecessary_math.py 的 nose 版测试用例是这样子的:
lang:python
from unnecessary_math import multiply
def test_numbers():
assert multiply(3,4)==12
def 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.001s
OK
另外非常棒的一点是,nosetests 兼容对 doctest 和 unittest 测试脚本的解析运行。如果你认为 nose 比那两个都好用的话,完全可以放弃 doctest 和 unittest 的使用。 <br />
测试环境
由于扩展自 unittest,nose 也支持类似于 setUp() setUpClass() setUpModule() 的测试环境创建方式,只不过函数命名规则最好改一改,我们可以使用更符合 Python 规范的命名规则。另外因为 nose 支持上例中所展示的函数式测试用例,所以还有一种为单个函数创建运行环境的装饰器可用。下面我们将使用一个例子来展示这四种功能的用法。
test.py:
lang:python
from nose import with_setup
from unnecessary_math import multiply
def 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)==12
class 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 ... ok
test.test_2b_decorated ... ok
---------------------------------------------------------------------
Ran 2 tests in 0.002s
OK
我们的 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 各种测试框架简介
转载:https://blog.csdn.net/yockie/article/details/47415265 一.doctest doctest 是一个 Python 发行版自带的标准模块.本篇将 ...
- python pytest测试框架介绍三
之前介绍了pytest以xUnit形式来写用例,下面来介绍pytest特有的方式来写用例 1.pytest fixture实例1 代码如下 from __future__ import print_f ...
- pytest测试框架 -- 简介
一.pytest测试框架简介: (1)pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效. (2)pytest框架可以兼容unittest用 ...
- Pytest测试框架(三):pytest fixture 用法
xUnit style 结构的 fixture用于初始化测试函数, pytest fixture是对传统的 xUnit 架构的setup/teardown功能的改进.pytest fixture为测试 ...
- python主流测试框架的简介
1.python自动化的一些测试框架 1).unitest(也称为PyUnit) 地址:https://docs.python.org/2/library/unittest.html 2).Nose ...
- python pytest测试框架介绍二
在介绍一中简单介绍了pytest的安装和简单使用,接下来我们就要实际了解pytest了 一.pytest的用例发现规则 pytest可以在不同的函数.包中发现用例,发现的规则如下 文件名以test_开 ...
- Assignment3:白盒测试以及测试框架简介
一. 白盒测试简介 白盒测试又称结构测试.透明盒测试.逻辑驱动测试或基于代码的测试.白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及 ...
- Selenium3+python自动化010-UnitTest框架简介和单元测试框架使用
一.UnitTest介绍 unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过, ...
- Cypress与TestCafe WebUI端到端测试框架简介
近期接触了Cypress和TestCafe,两个测试框架都基于Node.js,都不再使用Selenium+WebDriver,而且开箱即用,非常轻量级,就冲着不再使用WebDriver这一点,极大地勾 ...
随机推荐
- linux-socket connect阻塞和非阻塞模式 示例
~/cpp$ ./connect 192.168.1.234 1234 kkkk block mode: ubuntu 14.04 : time used:21.0.001053s connect ...
- select,poll,epoll之间的区别
(1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替.而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替, ...
- Java Web乱码分析及解决方式(一)——GET请求乱码
引言: 在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...
- Snmp学习总结(六)——linux下安装和配置SNMP
一.安装SNMP 1.1.下载Net-SNMP的源代码 选择一个SNMP版本,比如5.7.1,下载地址如下:http://sourceforge.net/projects/net-snmp/files ...
- 使用Axure RP原型设计实践06,登录验证
登录验证主要功能包括: ● 用户名错误,提示无效用户名,用户名和密码文本框清空● 用户名存在,密码错误,提示密码错误,密码清空,焦点进入密码框● 用户名和密码都正确,验证通过 本篇接着"使用 ...
- Delphi XE5 Android 运行黑屏卡死的解决方法
1. 确保正确安装Android SDK: 开始菜单 > 所有程序 > Embarcadero RAD Studio XE5 > > Android Tools > 打开 ...
- 使用WebRTC搭建前端视频聊天室
在两个浏览器中,为聊天.游戏.或是文件传输等需求发送信息是十分复杂的.通常情况下,我们需要建立一台服务器来转发数据,当然规模比较大的情况下,会扩展成多个数据中心.这种情况下很容易出现很高的延迟,同时难 ...
- linux下生成https的crt和key证书
今天在配置kibana权限设置时,kibana要求使用https链接. 于是总结了一下linux下openssl生成 签名的步骤: x509证书一般会用到三类文,key,csr,crt Key 是 ...
- Mysql一个非常有用的内置函数今天碰到要把MySQL数据库中的varchar转换成date类型进
Mysql一个非常有用的内置函数 今天碰到要把MySQL数据库中的varchar转换成date类型进行时间的比较和查询.在网上找了找,发现MySQL也跟其他数据库一样有自己内置的转换函数:str_to ...
- [Web 前端] mockjs让前端开发独立于后端
cp from : https://www.codercto.com/a/9839.html mock.js 可以模拟ajax数据,拦截ajax请求,返回模拟数据,无需后端返回就可以测试前端程序 ...