unittest的运用
一、Case编写规范:
1、用例类需要继承unittest.TestCase;
2、用例方法需要以test开头;
class FirstCase(unittest.TestCase):
def testfirst01(self):
pass
二、case执行前后的环境处理:
1、setup、teardown方法分别在case执行前后执行:
def setUp(self) -> None:
print('\n================这是case前置条件,用例执行开始================')
def tearDown(self) -> None:
print('================这是case后置条件,用例执行结束===============')
2、classmethod装饰器在所有case前后执行:
@classmethod
def setUpClass(cls) -> None:
print('================================所有case执行开始================================')
@classmethod
def tearDownClass(cls) -> None:
print('================================所有case执行结束================================')
二、装饰器的运用:
unitest.skip装饰器族跳过test method或者test class,这些装饰器(前三个):
@unittest.skip(reason):无条件跳过测试,reason描述为什么跳过测试
@unittest.skipif(conditition,reason):condititon为true时跳过测试: 这里完全可以应用条件去控制用例是否执行了,很灵活
@unittest.skipunless(condition,reason):condition不是true时跳过测试
@unittest.expectedFailure:若test失败了,不会计入失败的case数目
三、构建测试套件:
1、run()的应用:
# main()方法执行所有case方法(unittest执行优先顺序:数字>大写字母>小写字母)
unittest.main()
2、addTest()的应用:
# unittest执行二:TestSuite()
# TestSuite()用来组装要执行的case方法,suite.addTest(类名('需要执行的用例方法'))
suite = unittest.TestSuite()
suite.addTest(FirstCase('testfirst02'))
suite.addTest(FirstCase('testfirst03'))
suite.addTest(FirstCase('testfirst01'))
runner = unittest.TextTestRunner()
runner.run(suite)
3、addTests()的应用:
suite = unittest.TestSuite()
tests = [Testdemo("test01"), Testdemo("test02")]
suite.addTests(tests)
runner = unittest.TextTestRunner()
runner.run(suite)
4、TestSuite的应用:
from casetest.testdemo01 import Testdemo01
from casetest.testdemo02 import Testdemo02
from casetest.testdemo03 import Testdemo03
case01 = unittest.TestLoader().loadTestsFromTestCase(Testdemo01)
case02 = unittest.TestLoader().loadTestsFromTestCase(Testdemo02)
case03 = unittest.TestLoader().loadTestsFromTestCase(Testdemo03)
suote = unittest.TestSuite([case01, case02, case03])
unittest.TextTestRunner().run(suote)
5、discover()应用:
# 拼接项目case路径
case_path = os.path.join(os.getcwd(), r'case')
# 传入case目录、匹配要执行的py文件,然后run
suite = unittest.defaultTestLoader.discover(case_path, 'unittest_*.py')
unittest.TextTestRunner().run(suite)