设为首页 收藏本站
查看: 885|回复: 0

[经验分享] Python nose test framework 介绍

[复制链接]

尚未签到

发表于 2015-4-21 10:52:22 | 显示全部楼层 |阅读模式
  一、安装nose
  先用easy_install 安装 nose,easy_install是一个很好的python工具,可以方便安装很多的python程序。可以去http://pypi.python.org/pypi/setuptools了解一下easy_install。如果懒得去看的,可以直接从这里下载安装文件进行安装就可以了,注意,这个链接是windows 32位的安装包。
  安装完easy_install后,在相应版本的Scripts目录下(例如C:\Python26\Scripts)会有一个easy_install.exe程序,通过这个就可以安装了。在命令行下转到Python的Scripts目录下,执行以下的命令进行安装:
    C:\Python26\Scripts\easy_install nose

  上面的 C:\Python26\Scripts 需要根据您的Python的安装路径进行修改。

  安完毕后,在C:\Python26\Scripts下会有一个nosetests.exe文件,通过这个exe程序就可以在命令行下运行测试了。最好是把C:\Python26\Scripts加入环境变量,这样在其它目录中可以直接引用nosetests.exe。

二、运行测试
  在命令行下,直接运行nosetests(注意要把nosetests.exe所在的目录加入到环境变量Path里面),它就会自动查找当前目录下包含"Test"字符串的目录和文件进行测试。例如如下的目录结构:
DSC0000.png (图1)

  如果我们在C:\PythonTestRoot下运行nosetests,那么nose会自动找到TestUnit1文件夹,然后在找到 Test2.py和TestSomething.py两个文件进行测试,我的两个文件中各有两个方法,一共有四个测试:
DSC0001.png (图2)

  这样我们可以把所有测试放在一起,然后让测试自己去运行,我们最后看结果就可以了。我们可以指定具体如何输出结果,也可以指定如何搜索文件和文件夹,还可以把测试结果输入到指定的文件,在nosetests后面加上一些命令行参数就可以,参数如何设置在最后面介绍。

三、编写测试
  上面说的运行测试其实非常简单,写好测试放到一个文件夹里面,然后在这个文件夹里面执行nosetests就可以了。编写测试也非常简单:
 
  a)简单的测试
=======================
#### file: test.py ####
=======================
1 def Testfunc():
2     a = 1
3     b = 2
4     assert a == b
  把上面的文件保存到一个目录下,然后在该目录下在命令行里执行nosetests就可以运行测试了。  
  
  b)模块的setUp和tearDown


def setUp():
    print "function setup"
def tearDown():
    print "function teardown"
   
def Testfunc1():
    print "Testfunc1"
    assert True
def Testfunc2():
    print "Testfunc2"
    assert True  
  nose在文件中如果找到函数setup, setup_module, setUp 或者setUpModule等,那么会在该模块的所有测试执行之前执行该函数。如果找到函数 teardown,tearDown, teardown_module或者 tearDownModule 等,那么会在该模块所有的测试执行完之后执行该函数。
  对于上面的代码,nose实际的执行过程是这样的:
  setUp()->Testfunc1()->Testfunc2()->tearDown()
  
  c)测试函数的setUp和tearDown
  可能会想给每个函数单独指定类似的setUp和tearDown函数,可以如下处理:


1 def setUp():
2     print "function setup"
3
4 def tearDown():
5     print "function teardown"
6
7 def func1Start():
8     print "func1 start"
9
10 def func1End():
11     print "func1 end"
12
13 def func2Start():
14     print "func2 start"
15
16 def func2End():
17     print "func2 end"
18     
19 def Testfunc1():
20     print "Testfunc1"
21     assert True
22
23 def Testfunc2():
24     print "Testfunc2"
25     assert True
26
27 Testfunc1.setup = func1Start
28 Testfunc1.tearDown = func1End
29 Testfunc2.setup = func2Start
30 Testfunc2.tearDown = func2End  
  注意最后面的四行,分别指定了Testfunc1和Testfun2的setup和teardown函数。
  nose对上面代码的具体执行顺序如下:
  setUp()->func1Start()->Testfunc1()->func1End()->func2Start()->Testfunc2()->func2End()->tearDown()
  
  上面的代码也可以换一种写法如下,注意记得 import with_setup:


1 from nose.tools import with_setup
2
3 def setUp():
4     print "function setup"
5
6 def tearDown():
7     print "function teardown"
8     
9
10 def func1Start():
11     print "func1 start"
12
13 def func1End():
14     print "func1 end"
15
16 def func2Start():
17     print "func2 start"
18  
19 def func2End():
20     print "func2 end"
21
22
23 @with_setup(func1Start, func1End)
24 def Testfunc1():
25     print "Testfunc1"
26     assert True
27
28 @with_setup(func2Start, func2End)
29 def Testfunc2():
30     print "Testfunc2"
31     assert True  
  
  d)测试类的的setUp和tearDown
  看如下的代码:
  


1 class TestClass():
2     arr1 = 2
3     arr2 = 2
4     
5     def setUp(self):
6         self.arr1 = 1
7         self.arr2 = 3
8         print "MyTestClass setup"
9
10     def tearDown(self):
11         print "MyTestClass teardown"
12         
13     def Testfunc1(self):
14         assert self.arr1 == self.arr2
15     
16     def Testfunc2(self):
17         assert self.arr1 == 2  
  这里nose会对每个类的测试方法单独创建类的实例,并且有单独的setUp和tearDown。nose对上面测试的顺序如下:
  setUp()->Testfunc1()->TearDown()->setUp()->Testfunc2()->TearDown()
  
  e)package的setUp和tearDown
  package的setUp和tearDown方法需要放在__init__.py这个文件中,整个package只执行一次setUp和一次tearDown。
  
  四、nosetest常用的命令行参数
  这里只重点介绍几个常用的,其它的参数可以通过nosetests -h进行查看。
  a) -w ,指定一个目录运行测试。目录可以是相对路径或绝对路径。
  例如: nosetest -w c:\pythonTests\Test1,只运行目录c:\pythonTests\Test1下的测试。可以指定多个目录,例如: nosetest -w c:\pythonTests\Test1 -w c:\pythonTests\Test2。
  
  b)-s,不捕获输出,会让你的程序里面的一些命令行上的输出显示出来。例如print所输出的内容。
  
  c)-v,查看nose的运行信息和调试信息。例如会给出当前正在运行哪个测试。
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59173-1-1.html 上篇帖子: python开发_mysqldb安装 下篇帖子: Python 字典(Dictionary)操作详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表