zoukankan      html  css  js  c++  java
  • Python nose test framework 介绍

    一、安装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"字符串的目录和文件进行测试。例如如下的目录结构:
    (图1)
     
      如果我们在C:\PythonTestRoot下运行nosetests,那么nose会自动找到TestUnit1文件夹,然后在找到 Test2.py和TestSomething.py两个文件进行测试,我的两个文件中各有两个方法,一共有四个测试:
    (图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的运行信息和调试信息。例如会给出当前正在运行哪个测试。

  • 相关阅读:
    bzoj 1030 [JSOI2007]文本生成器
    Swift 学习笔记 (闭包)
    Swift 学习笔记 (函数)
    HTML 学习笔记 JQueryUI(Interactions,Widgets)
    HTML 学习笔记 JQuery(表单,表格 操作)
    HTML 学习笔记 JQuery(animation)
    HTML 学习笔记 JQuery(盒子操作)
    HTML 学习笔记 JQuery(事件)
    HTML 学习笔记 JQuery(DOM 操作3)
    HTML 学习笔记 JQuery(DOM 操作2)
  • 原文地址:https://www.cnblogs.com/JeffreySun/p/1608900.html
Copyright © 2011-2022 走看看