Python Nose框架编写测试用例方法


Posted in Python onOctober 26, 2017

1. 关于Nose

nose项目是于2005年发布的,也就是 py.test改名后的一年。它是由 Jason Pellerin 编写的,支持与 py.test 相同的测试习惯做法,但是这个包更容易安装和维护。

nose的口号是:扩展unittest,nose让测试更简单!

nose官网:http://nose.readthedocs.io/en/latest/index.html

使用nose框架进行Python项目的自动化测试,可以参考:http://www.cnblogs.com/liaofeifight/p/5148717.html

本文主要介绍nose框架编写自动化测试用例的方法。

2. Nose编写测试用例方法

nose会自动识别源文件,目录或包中的测试用例。

任何匹配testMatch正则表达式(默认为(?:^|[\b_\.-])[Tt]est,在一个单词的边界处或者紧跟-或_处有test或Test)的函数或类,并且所在的模块也匹配该表达式,都会被识别为测试并执行。

出于对unittest兼容性的考虑,nose也支持继承unittest.TestCase的子类测试用例。与py.test类似,nose按照测试集在模块文件中出现的顺序执行功能测试。继承于TestCase的测试集和测试类按照字母表顺序执行。

2.1 Fixtures

nose支持包,模块,类和函数例级别的Fixtures(setup和teardown方法,用以自动测试的初始化或者清理工作)

2.2 Test packages

nose允许测试例以包的方式分组。

因此,也需要包级别的setup;比如,如果你想要创建一个数据库测试,你可能会想要在包setup时创建数据库,当每个测试结束之后运行包teardown时,销毁它。而不是在每一个测试模块或者测试例中创建和销毁数据库。

想要创建包级别的setup和teardown函数,你需要在测试包的_ init_.py 函数中定义setup和teardown函数。setup函数可以被命名为setup,setup_package,setUp,或者setUpPackage;teardown可以被命名为teardown,teardown_package, tearDown, 或者tearDownPackage。一旦第一个测试模块从测试包中被加载后,一个包中的测试例就开始执行。

2.3 Test modules

Test modules是一个匹配testMatch的python模块。

测试模块提供模块级别的setup和teardown。可以定义setup, setup_module, setUp, setUpModule用于setup,teardown, teardown_module, tearDownModule用于teardown。一旦一个模块中所有的用例被收集完后,模块中的测试就开始执行。

2.4 Test classes

Test classes是模块中定义的匹配testMatch或者继承unittest.TestCase的类。

所有的测试类以相同方式运行:通过testMatch匹配的找到类中的方法,并以全新的测试类实例运行测试方法。

像继承于unittest.TestCase的子类一样,测试类可以定义setUp tearDown函数,它们将会分别在每一个测试方法之前和之后运行。类级别setup fixture可以被命名为setup_class, setupClass, setUpClass, setupAll, setUpAll;teardown被命名为teardown_class, teardownClass, tearDownClass, teardownAll, tearDownAll, 类级别setup和teardown必须是类方法(@classmethod)。

2.5 Test functions

模块中任何匹配TestMatch的方法都将会被FunctionTestCase装饰,然后以用例的方式运行。最简单的失败和成功的用例如下:

def test():
  assert False
def test():
  pass

测试函数也可定义setup和teardown属性,它们将会在测试函数开始和结束的时候运行。还可以使用@with_setup装饰器,该方式尤其适用于在相同的模块中的许多方法需要相同的setup操作。

def setup_func():
  "set up test fixtures"
def teardown_func():
  "tear down test fixtures"
@with_setup(setup_func, teardown_func)
def test():
  "test ..."

6.Test generators

nose支持生成器测试函数和测试方法。如下:

def test_evens():
  for i in range(0, 5):
    yield check_even, i, i*3
def check_even(n, nn):
  assert n % 2 == 0 or nn % 2 == 0

上述代码执行五次测试。nose生成迭代器,创建一个函数测试用例包,包装每一个yield tuple。

Test generators必须yield tuples,且第一个元素必须是可调用的函数,其他的元素作为参数传递。

Test generators测试用例默认名称是函数或方法的名字+参数。如果你想要显示不同的名称,可以设置yield函数的description属性。

Test generators中定义的setup和teardown函数仅仅会被执行一次。若想对于每一个yield的用例都执行,可将setup和teardown属性设置到被yield的函数中,或者yield一个带有setup和teardown属性的可调用对象的实例。

比如:

@with_setup(setup_func, teardown_func)
def test_generator():
  # ...
  yield func, arg, arg # ...

上面的例子中,setup和teardown只会被执行一次。与此相比:

def test_generator():
  # ...
  yield func, arg, arg # ...
@with_setup(setup_func, teardown_func)
def func(arg):
  assert something_about(arg)

这个例子中,setup和teardown函数将会在每一次yield中执行。

对于生成器方法,class中的setUp和tearDown方法将会在每一个生成的测试用例之前或者之后运行。setUp和tearDown方法并不会在生成器方法本身 之前运行,这就导致在第一个用例运行之前setUp运行两次,之间却没有tearDown运行。

请注意,unittest.TestCase子类不支持Test generators方法。

总结

以上所述是小编给大家介绍的Python Nose框架编写测试用例方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python对字典进行排序实例
Sep 25 Python
python服务器与android客户端socket通信实例
Nov 12 Python
Python网络爬虫实例讲解
Apr 28 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
Flask框架工厂函数用法实例分析
May 25 Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
python3处理word文档实例分析
Dec 01 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
Dec 21 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 Python
详解pandas apply 并行处理的几种方法
Feb 24 Python
Python面向对象编程基础解析(二)
Oct 26 #Python
Python面向对象编程基础解析(一)
Oct 26 #Python
获取Django项目的全部url方法详解
Oct 26 #Python
Python探索之ModelForm代码详解
Oct 26 #Python
启动targetcli时遇到错误解决办法
Oct 26 #Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 #Python
python实现分页效果
Oct 25 #Python
You might like
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
原生js实现分页效果
2020/09/23 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
家长写给老师的建议书
2014/03/13 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL
Apache自带的ab压力测试工具的实现
2022/07/23 Servers