python下常见的测试框架之一--unittest

关于python下常见的测试框架,看过一些博客,也看过一些书籍,在ipad上写过总结,但一直没有写技术博客的习惯,所以最近才开始往博客上面转。

unittest是python里最常用的单元测试模块(我习惯说成是模块,但很多人好像都说是框架),但其实它在集成测试、冒烟测试和其他测试中都有应用。



使用unittest框架时,测试类必须从unittest.TestCase继承。测试类主要包括3个方法:setUp,tearDown,以及以test开头的测试用例。你可以自己选择是否要setUp和tearDown。如果有setUp和tearDown,则每个测试用例执行的时候setUp和tearDown都会执行一遍。所以其实setUp和tearDown是有多少测试用例就执行了多少遍。

在写测试类以及测试用例时要规定一个命名习惯,一般测试类可以以Test开头,也可以以Test结尾。测试用例一般是以test开头。
import unittest
class RomanNumeralConverterTest(unittest.TestCase):
    def setUp(self):
  
    def tearDown(self):


    def test_(self):




让测试用例执行起来
if __name__ =="__main__":
    unittest.main()




unittest的基本工作方式是通过TestLoader加载测试用例为testsuite,然后通过TextTestRunner来运行testsuite(所有的这些工作都封装在testunit.main),因此以下代码也可以将测试用例执行起来。 
if __name__ =="__main__":
   suite = unittest.TestLoader().loadTestsFromTestCase(RomanNumeralConverterTest)
   unittest.TextTestRunner(verbosity=2).run(suite)




默认是通过loadTestsFromTestCase把所有的以test开头的测试用例都加到testsuite里面去,你也可以根据你自己的需要选择性的加一些测试用例到testsuite。最常用的办法是利用python的sys模块去解析输入参数。如下所示
if __name__ == "__main__":
    import sys
    suite = unittest.TestSuite()
    if len(sys.argv) == 1:
        suite = unittest.TestLoader().loadTestsFromTestCase(\
                                   RomanNumeralConverterTest)
    else:
        for test_name in sys.argv[1:]:
            suite.addTest(\
                RomanNumeralConverterTest(test_name))
    unittest.TextTestRunner(verbosity=2).run(suite)






可以将多个testsuite合并
if __name__ == "__main__":
    import unittest
    from recipe5 import *


    suite1 = unittest.TestLoader().loadTestsFromTestCase( \
                                 RomanNumeralConverterTest)
    suite2 = unittest.TestLoader().loadTestsFromTestCase( \
                                 RomanNumeralComboTest)
    suite = unittest.TestSuite([suite1, suite2])
    unittest.TextTestRunner(verbosity=2).run(suite)




判断测试用例算法成功与失败的方式是通过比对期望结果与被测试类函数运行结果是否相同,如相同,则测试通过,如不同,则测试失败。主要函数有以下几个:
assertEquals(first,second[,msg])
assertTrue(expression[,msg])
assertFalse(expression[,msg])
assertRaises(exception,callable,...)
使用规则:assertEquals is prefered over assertTrue and assertFalse
          不同版本的python,assert函数可能不同,所以最好在使用前阅读当前使用python unittest模块API


def test_parsing_decade(self):
        self.assertEquals(10, self.cvt.convert_to_decimal("X"))





优点:可以把不同的测试用例写在不同的测试类里,如边界测试写一个测试类,反面测试写一个测试类等,方便管理。
           结构清晰,知道从哪儿开始或者哪些代码是与测试相关的,如测试用例,测试类,测试suite等。


缺点: 一个测试用例也得写成测试类包含测试用例的形式,其实有时候用assert就可以了。

           测试类“显得”没有什么用,这个类也没有自己的方法函数(除了setUp,tearDown,测试用例)和数据成员等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值