unittest的运用

一、Case编写规范:

1、用例类需要继承unittest.TestCase;

2、用例方法需要以test开头;

  1. class FirstCase(unittest.TestCase):
  2. def testfirst01(self):
  3. pass

二、case执行前后的环境处理:

1、setup、teardown方法分别在case执行前后执行:

  1. def setUp(self) -> None:
  2. print('\n================这是case前置条件,用例执行开始================')
  3. def tearDown(self) -> None:
  4. print('================这是case后置条件,用例执行结束===============')

2、classmethod装饰器在所有case前后执行:

  1. @classmethod
  2. def setUpClass(cls) -> None:
  3. print('================================所有case执行开始================================')
  4. @classmethod
  5. def tearDownClass(cls) -> None:
  6. print('================================所有case执行结束================================')

二、装饰器的运用:

unitest.skip装饰器族跳过test method或者test class,这些装饰器(前三个):

  1. @unittest.skip(reason):无条件跳过测试,reason描述为什么跳过测试
  2. @unittest.skipif(conditition,reason):condititontrue时跳过测试: 这里完全可以应用条件去控制用例是否执行了,很灵活
  3. @unittest.skipunless(condition,reason):condition不是true时跳过测试
  4. @unittest.expectedFailure:若test失败了,不会计入失败的case数目

三、构建测试套件:

1、run()的应用:

  1. # main()方法执行所有case方法(unittest执行优先顺序:数字>大写字母>小写字母)
  2. unittest.main()

2、addTest()的应用:

  1. # unittest执行二:TestSuite()
  2. # TestSuite()用来组装要执行的case方法,suite.addTest(类名('需要执行的用例方法'))
  3. suite = unittest.TestSuite()
  4. suite.addTest(FirstCase('testfirst02'))
  5. suite.addTest(FirstCase('testfirst03'))
  6. suite.addTest(FirstCase('testfirst01'))
  7. runner = unittest.TextTestRunner()
  8. runner.run(suite)

3、addTests()的应用:

  1. suite = unittest.TestSuite()
  2. tests = [Testdemo("test01"), Testdemo("test02")]
  3. suite.addTests(tests)
  4. runner = unittest.TextTestRunner()
  5. runner.run(suite)

4、TestSuite的应用:

  1. from casetest.testdemo01 import Testdemo01
  2. from casetest.testdemo02 import Testdemo02
  3. from casetest.testdemo03 import Testdemo03
  4. case01 = unittest.TestLoader().loadTestsFromTestCase(Testdemo01)
  5. case02 = unittest.TestLoader().loadTestsFromTestCase(Testdemo02)
  6. case03 = unittest.TestLoader().loadTestsFromTestCase(Testdemo03)
  7. suote = unittest.TestSuite([case01, case02, case03])
  8. unittest.TextTestRunner().run(suote)

5、discover()应用:

  1. # 拼接项目case路径
  2. case_path = os.path.join(os.getcwd(), r'case')
  3. # 传入case目录、匹配要执行的py文件,然后run
  4. suite = unittest.defaultTestLoader.discover(case_path, 'unittest_*.py')
  5. unittest.TextTestRunner().run(suite)