zoukankan      html  css  js  c++  java
  • 使用python的nose模块进行测试

    一、安装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.选择测试文档
               nosetests xxx.py
            2.选择函数名
               nosetests xxx.py:test_function
            3.选择类的方法
               nosetests xxx.py:TestCase.test_method
    三、编写测试
      上面说的运行测试其实非常简单,写好测试放到一个文件夹里面,然后在这个文件夹里面执行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.toolsimport 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的运行信息和调试信息。例如会给出当前正在运行哪个测试。

  • 相关阅读:
    【idea】批量修改文件的换行类型
    【shell】for循环执行sql语句
    【gitlab】创建token供外部git clone
    【idea】修改git源
    【浏览器】 NET::ERR_CERT_INVALID
    mac os 11 Big Sur 根目录无法写入解决办法
    dbeaver把表数据导出csv时字符串自动加双引号问题解决
    spring boot2 jpa分页查询百万级数据内存泄漏
    win10安装MAT并单独配置jdk11
    Transaction silently rolled back because it has been marked as rollback-only
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4144896.html
Copyright © 2011-2022 走看看