zoukankan      html  css  js  c++  java
  • python测试框架——unittest和nosetest

    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()    

  • 相关阅读:
    ASP.NET的内置对象 —— Response 对象
    dd命令测试硬盘IO
    Linux netstat命令详解
    tpcc-mysql安装、使用、结果解读
    【MySQL案例】error.log的Warning:If a crash happens thisconfiguration does not guarantee that the relay lo(转)
    mysql5.6主从
    无法远程访问Mysql
    pythonMD5加密
    python随机验证码函数
    log buffer space事件(转)
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4144884.html
Copyright © 2011-2022 走看看