使用数据提供程序的python unittest等等。
python-testl的Python项目详细描述
testly-针对python使用数据提供程序和更多功能增强unittest
功能
- 数据提供程序
- 与
unittest
兼容
- python2,3兼容
- 运行测试集的命令行参数(由同一数据提供程序提供)
安装
# install released version pip install python-testly # install latest version pip install git+git://github.com/pwwang/testly.git
开始
编写测试套件:
importtestlyclassTest(testly.TestCase):# your tests go herepassif__name__=='__main__':testly.main(verbosity=2)
python2,3兼容断言
classTest(testly.TestCase):deftest(self):self.assertCountEqual([1,2],[2,1])self.assertRaisesRegex(ZeroDivisionError,"(integer )?division (or modulo )?by zero",lambda:1/0)self.assertRegex('abcd',r'\w+')
有用的扩展断言
classTest(testly.TestCase):deftest(self):self.assertDictContains({'a':1},{'a':1,'b':2})self.assertDictNotContains({'a':2},{'a':1,'b':2})self.assertSeqContains([1],[1,2])self.assertSeqNotContains([3],[1,2])self.assertInAny('dogs',['one dog','two dogs'])self.assertNotInAny('cat',['one dog','two dogs'])self.assertRegexAny(r'dogs?',['one dog','two dogs'])self.assertNotRegexAny(r'cat',['one dog','two dogs'])
使用数据提供程序
classTestTest(testly.TestCase):defdataProvider_test(self):# use tupleyield1,1# use dictyielddict(in_=2,out=2)# use testly data composeryieldtestly.Data(4,out=4)deftest(self,in_,out):self.assertEqual(in_,out)
> python test.py test-0 (__main__.TestTest) ... ok test-1 (__main__.TestTest) ... ok test-2 (__main__.TestTest) ... ok test-3 (__main__.TestTest) ... ok
彩色差异输出
classTestTest(testly.TestCase):defdataProvider_test(self):yield1,1yield2,3yield'\n'.join(['oooooooone','two','aaa','tree','1','1','1','1','1','1','fourfourfourfourfourfourfourfourfour very very very very very very very very very very very very very very very very very very very very very very very very very very long line']),'\n'.join(['oooooooore','emu','three','1','1','1','1','1','1','aaa','fivefivefivefivefivefivefivefivefive'])yield['oooooooone','two','aaa','tree','1','1','1','1','1','1','fourfourfourfourfourfourfourfourfour very very very very very very very very very very very very very very very very very very very very very very very very very very long line'],['oooooooore','emu','three','1','1','1','1','1','1','aaa','fivefivefivefivefivefivefivefivefive']yield{'a':1,'b':2},{'a':1,'b':3,'c':8}deftest(self,in_,out):self.diffColWidth=160# max columns of the diff regionself.diffContext=1# number context lines to showifnotisinstance(in_,(dict,list)):self.diffLineNo=False# line numberifisinstance(in_,list):self.diffTheme='contrast'# the themeself.assertEqual(in_,out)
与原始输出相比:
运行特定的测试或测试集
importsys,testlyclassTestTest(testly.TestCase):defsetUp(self):# setUp for test setifself.isFirst():sys.stderr.write('TestSet %s starts ... '%self.setName())# setUp for regular testselifnotself.isOfSet():# regulator setUp for other testssys.stderr.write('Test %s starts ...'%self._testMethodName)deftearDown(self):# tearDown for test setifself.isLast():sys.stderr.write('TestSet %s ends ... '%self.setName())# tearDown for regular testselifnotself.isOfSet():# regulator setUp for other testssys.stderr.write('Test %s ends ... '%self._testMethodName)defdataProvider_test1(self):yield1,1yield2,2yield3,3deftest1(self,in_,out):self.assertEqual(in_,out)# regular testdeftest2(self):self.assertEqual(1,1)if__name__=='__main__':testly.main(verbosity=2)
运行所有测试:
> python test.py test1-0 (__main__.TestTest) ... TestSet test1 starts ... ok test1-1 (__main__.TestTest) ... ok test1-2 (__main__.TestTest) ... TestSet test1 ends ... ok test2 (__main__.TestTest) ... Test test2 starts ...Test test2 ends ... ok ---------------------------------------------------------------------- Ran 4 tests in 0.000s OK
运行特定测试(setUp
,tearDown
测试集也可以工作):
> python test.py TestTest.test1-2 test1-2 (__main__.TestTest) ... TestSet test1 starts ... TestSet test1 ends ... ok ---------------------------------------------------------------------- Ran 1test in 0.000s OK
> python test.py TestTest.test2 test2 (__main__.TestTest) ... Test test2 starts ...Test test2 ends ... ok ---------------------------------------------------------------------- Ran 1test in 0.000s OK
运行特定的测试集:
> python test.py TestTest.test1 test1-0 (__main__.TestTest) ... TestSet test1 starts ... ok test1-1 (__main__.TestTest) ... ok test1-2 (__main__.TestTest) ... TestSet test1 ends ... ok ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK