欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python测试框架——unittest和nosetest

程序员文章站 2022-06-14 12:13:46
1.使用unittest来开发python测试    pyunit创建于1999,2001年被加入到python2.1的基础类库中。名字叫unittest。...

1.使用unittest来开发python测试
   pyunit创建于1999,2001年被加入到python2.1的基础类库中。名字叫unittest。
 例子1:
#first demo
class myclass(object):
    def __init__(self,num):
        self.num = num
       
    def printnum(self):
        return self.num
       
class testmyclass(unittest.testcase):
    def test_printnum(self):
        value = myclass(6)
        self.assertequals(7,value.printnum()) #当assertequals失败时,会把第一个和第二个参数的值打印出来
        self.assertfalse(value.printnum()==6) #assertfalse和asserttrue不会打印值

if __name__=='__main__':
    unittest.main()
 

     unittest.main()的方法可以替换为:
suite = unittest.testloader().loadtestsfromtestcase(testmyclass)
unittest.texttestrunner(verbosity=2).run(suite)

必须为所要运行的测试活动建立测试套件。

 

2.python  unittest的set up和tear down

class testmyclass(unittest.testcase):
    def setup(self):  #run before every test method
        print 'test before'
       
    def test_printnum(self):
        value = myclass(6)
        self.assertequals(6,value.printnum()) #当assertequals失败时,会把第一个和第二个参数的值打印出来
        self.asserttrue(value.printnum()==6) #assertfalse和asserttrue不会打印值

    def teardown(self): #run after every test mehtod
        print 'test after'


       
以上使用可以应付大多数情况下的测试。


3.使用nose
nose将递归浏览当前目录以发现测试,并创建一个自己的测试套件,唯一要做的就是编写测试类。
nosetests + py文件
代码中不需要:
if __name__=='__main__':
    unittest.main()
nose可以自动运行它。

4.编写测试装置
 nose支持3中级别的测试装置
   1)包级别  将setup和teardown放到__init__.py文件中
   2)模块级  测试的模块可以有自己的setup和teardown函数
   3)测试级别 可调用对象也可以使用提供的with_setup装饰器设置测试装置

#coding=utf-8
import nose
from nose import with_setup
def setup():  #模块的setup代码
    pass

def teardown(): #模块的teardown代码
    pass
   
def set_ok():  #只针对test_ok的setup代码
    pass

@with_setup(set_ok)
def test_ok():
    print 'my test'
或者是:
test_ok.setup=set_ok

 

5.与setuptools和插件的集成
   nose与setuptools实现了平滑的集成,通过在setup.py中添加test_suite元数据来完成:
 setup(
              test_suite = 'nose.colletor'
             )


   设置好以后我们就可以通过使用python setup.py test来运行所有的测试了。


6.nose介绍
  为什么要使用测试框架?
  def test_me():
   # ... many tests, which raise an exception if they fail ...

   if __name__ == '__main__':
     test_me()
   这样也是可以测试的,但是缺点是:只有当它以主程序被调用时测试才会运行。这是一个很大的问题。
   我们使用测试驱动框架可以自动发现和执行我们所编写的测试,并给予我们一个简单的反馈。

7.nose如何自动寻找和执行测试
  通常情况下nose只会在当前的工作目录下寻找测试文件,除非我们使用-w参数指定。
  寻找文件的时候,它会搜索test开头的文件夹,文件,模块,包。特别是nose会递归的扫描整个包来寻找test测试。
  如果找到测试后,setup装置就会运行,然后运行测试的函数或者类。

8.如何测试nose是否发现了你的测试模块
  只需要在你的测试模块中添加一行:assert 0
  如果这个模块被找到了,那么nose就会报错。

9.nose常用参数
  -w:指定寻找目录
   nosetests -w simple/
   nosetests -w simple/ -w basic/
  -s:关闭标准输出
  -v:通常nose直接显示的都是比较精简的信息,如果希望看到更详细的,可以使用这个参数
  我们可以在当前目录新建一个.noserc或者nose.cfg文件,然后将nose的配置放在里面就可以了。

10.在代码中使用nose运行测试
   除了使用nose自带的nosetests命令来运行测试以外,我们还有其他一些方法来运行测试。例如:
   import nose
   nose.run()