unittest单元测试框架不只能够适用于单元测试,还能够适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,而且提供了丰富的断言方法,判断测试用例是否经过,最终生成测试结果。今天初步总结一下unittest的 用法。python
测试一段程序是否有错误,咱们既能够采用普通的测试方法,也能够采用unittest测试框架浏览器
class Count(): def __init__(self,a,b): self.a=a self.b=b def add(self): return self.a+self.b if __name__=="__main__": c=Count(2,3) print(c.add())
首先用普通方法进行测试框架
from count import Count class TestCount(): def test_add(self): try: c = Count(2, 3) sum = c.add() assert (sum == 6), 'The result is not correct' except AssertionError as e: print(e) # e 是一个变量,记录了异常的类,能够打印出错误信息 else: print("test pass") if __name__=="__main__": a = TestCount() a.test_add()
采用python内置的断言方法,而后与异常处理相结合单元测试
如今再使用unittest测试框架进行测试测试
import unittest from count import Count class TestCount(unittest.TestCase): def setUp(self): print("test case starts") def tearDown(self): print("test case ends") def test_add(self): c=Count(2,4) sum=c.add() self.assertEqual(sum,7) def test_add2(self): c = Count(2, 4) sum=c.add() self.assertEqual(sum,6) if __name__=="__main__": suite=unittest.TestSuite() suite.addTest(TestCount("test_add")) # TestCount 是测试类名 suite.addTest(TestCount("test_add2")) # test__add是测试类中测试用例名,有几个测试用例就添加几个 runner=unittest.TextTestRunner() runner.run(suite)
其中if __name__=="__main__":中的代码能够用下面代码代替ui
if __name__=="__main__": unittest.main()
unittest自带的main方法能够执行测试类中全部以test开头的用例spa
unittest执行测试用例,总会自动执行setUp和tearDown方法,setUp方法完成测试用例一些初始工做,如开启浏览器,teardown方法完成用例执行完的收尾工做,如关闭浏览器code
unittest测试类中用例名老是以test开头视频
unittest自身带有一系列的断言方法:blog
assertEqual(a,b,[msg='测试失败时打印的信息']) 断言a,b是否相等
assertNotEqual(a,b,[msg='测试失败时打印的信息']) 断言a,b不等
assertTrue(x,[msg='测试失败时打印的信息']):断言x是否True
assertFalse(x,[msg='测试失败时打印的信息']):断言x是否False
assertIn(a,b,[msg='测试失败时打印的信息']):断言a是否在b中
assertNotIn(a,b,[msg='测试失败时打印的信息']):断言a是否在b中
若是有大量的测试用例,存在于不一样的文件中,若是要同时执行这些文件,能够经过discover方法实现,这样右分为两种状况:1.文件都在同级目录下2.含有子级目录
1.文件都在同级目录下
import unittest if __name__=="__main__": testdir = r"F:\python视频\python_file\unit_test" # testdir是测试文件根目录 discover = unittest.defaultTestLoader.discover(testdir, pattern="test_un*.py", top_level_dir=None) runner=unittest.TextTestRunner() runner.run(discover)
2.含有子级目录
代码同上,只是在每一个子级目录中新建一个__init__.py文件
多个测试用例同时执行,unittest如何排序,肯定先执行哪个
unittest 经过比较用例名的ascll码,哪一个用例名的ascll码在前,先执行,不然后执行
import unittest from count import Count class TestCount(unittest.TestCase): def setUp(self): print("test case starts") def tearDown(self): print("test case ends") def test_add(self): print("test_add") c=Count(2,4) sum=c.add() self.assertEqual(sum,6) def test_bdd(self): print("test_bdd") c = Count(2, 4) sum=c.add() self.assertEqual(sum,6) if __name__=="__main__": unittest.main()
结果