51Testing软件测试论坛

标题: 测试小白简单聊聊关于UnitTest(二) [打印本页]

作者: lsekfe    时间: 2021-6-4 09:44
标题: 测试小白简单聊聊关于UnitTest(二)
四、TestSuite-测试套件
  首先新建一个UnitTest类,编写[url=]测试[/url]用例,文件名为unit_for_testA.py,代码如下:
  1. # 导包
  2. import unittest

  3. class UnitForTestA(unittest.TestCase):
  4.     # 前置条件
  5.     def setUp(self) -> None:
  6.         print('this is AsetUp')

  7.     # 后置条件
  8.     def tearDown(self) -> None:
  9.         print('this is AtearDown')

  10.     #定义测试用例
  11.     def test_1(self):
  12.         print('this is Atest1!!!')

  13.     def test_2(self):
  14.         print('this is Aest2!!!')

  15.     def test_3(self):
  16.         print('this is Atest3!!!')# 导包
  17. import unittest

  18. class UnitForTestA(unittest.TestCase):
  19.     # 前置条件
  20.     def setUp(self) -> None:
  21.         print('this is AsetUp')

  22.     # 后置条件
  23.     def tearDown(self) -> None:
  24.         print('this is AtearDown')

  25.     # 定义测试用例
  26.     def test_1(self):
  27.         print('this is Atest1!!!')

  28.     def test_2(self):
  29.         print('this is Aest2!!!')

  30.     def test_3(self):
  31.         print('this is Atest3!!!')
复制代码
再新建一个类存放套件,文件名为TestSuite_demo.py,直接在UnitTest类中运行无法生效。
  下面创建一个测试套件(unittest.TestSuite()),并分别用五种不同的方法给该测试套件添加测试用例。
  (1)添加测试用例的第一种方法--单个添加(addTest)
  1. # 导入unittest的包
  2. import unittest
  3. # 导入存放测试用例的类
  4. from unittest_demo.unit_for_testA import UnitForTestA

  5. # 创建一个测试套件
  6. suite = unittest.TestSuite()
  7. # 添加测试用例的第一种方法
  8. suite.addTest(UnitForTestA('test_1'))
  9. suite.addTest(UnitForTestA('test_2'))
  10. suite.addTest(UnitForTestA('test_3'))

  11. # 基于Ruunner来运行测试套件
  12. runner = unittest.TextTestRunner()
  13. runner.run(suite)
复制代码
(2)添加测试用例的第二种方法--批量添加(addTests)
  1. # 导入unittest的包
  2. import unittest
  3. # 导入存放测试用例的类
  4. from unittest_demo.unit_for_testA import UnitForTestA

  5. # 创建一个测试套件
  6. suite = unittest.TestSuite()

  7. # 添加测试用例的第二种方法
  8. cases = [UnitForTestA('test_1'), UnitForTestA('test_2'), UnitForTestA('test_3')]
  9. suite.addTests(cases)

  10. # 基于Ruunner来运行测试套件
  11. runner = unittest.TextTestRunner()
  12. runner.run(suite)
复制代码
(3)添加测试用例的第三种方法--根据路径下的文件名匹配(defaultTestLoader.discover)
  该添加测试用例的方法也为批量执行,代码中指定的目录下,如果文件名称满足筛选条件,则所有满足条件的文件中的所有测试用例都会被执行,为了看清效果,我们再建一个UnitTest类,编写测试用例,文件名为unit_for_testB.py,代码如下:
  1. # 导包
  2. import unittest

  3. class UnitForTestB(unittest.TestCase):
  4.     # 前置条件
  5.     def setUp(self) -> None:
  6.         print('this is BsetUp')

  7.     # 后置条件
  8.     def tearDown(self) -> None:
  9.         print('this is BtearDown')

  10.     # 定义测试用例
  11.     def test_1(self):
  12.         print('this is Btest1!!!')

  13.     def test_2(self):
  14.         print('this is Best2!!!')

  15.     def test_3(self):
  16.         print('this is Btest3!!!')
复制代码
目录结构如图:


  此时在测试套件类(TestSuite_demo.py)中,根据路径下的文件名添加测试用例的代码为:
  1. # 导入unittest的包
  2. import unittest

  3. # 创建一个测试套件
  4. suite = unittest.TestSuite()

  5. # 添加测试用例的第三种方法
  6. test_dir = './'  # 指定的路径下所有与文件名相匹配的文件下的测试用例(批量执行)
  7. discover = unittest.defaultTestLoader.discover(start_dir=test_dir, pattern='unit_for_test*.py')

  8. # 基于Ruunner来运行测试套件
  9. runner = unittest.TextTestRunner()
  10. runner.run(discover)
复制代码
 运行结果如下图,由图可见,在当前目录下的两个文件中的用例都执行了。
  start_dir:需要执行的文件路径;
  pattern:需要匹配的文件名称,其中unit_for_test*.py匹配所有以unit_for_test开头的python文件。


  (4)添加测试用例的第四种方法--根据类名去读取(单个类)(TestLoader().loadTestsFromTestCase())
  1. # 导入unittest的包
  2. import unittest

  3. # 导入存放测试用例的类
  4. from unittest_demo.unit_for_testA import UnitForTestA

  5. # 创建一个测试套件
  6. suite = unittest.TestSuite()

  7. # 添加测试用例的第四种方法
  8. suite.addTests(unittest.TestLoader().loadTestsFromTestCase(UnitForTestA))

  9. # 基于Ruunner来运行测试套件
  10. runner = unittest.TextTestRunner()
  11. runner.run(suite)
复制代码
(5)添加测试用例的第五种方法--根据名称去添加(TestLoader().loadTestsFromName())
  1. # 导入unittest的包
  2. import unittest

  3. # 创建一个测试套件
  4. suite = unittest.TestSuite()

  5. # 添加测试用例的第五种方法
  6. suite.addTests(unittest.TestLoader().loadTestsFromName('unit_for_testA.UnitForTestA'))

  7. # 基于Ruunner来运行测试套件
  8. runner = unittest.TextTestRunner()
  9. runner.run(suite)
复制代码
五、跳过用例
  在执行用例的时候,不是每个用例都必须跑一次,unittest提供了跳过一些跳过用例不执行的方法,在用例前加装饰器,具体有:
  (1)@unittest.skip:直接跳过本条用例不执行;
  (2)@unittest.skipUnless(1 > 2, '1>2是假的'):当条件为假时,跳过该用例不执行;
  (3)@unittest.skipIf(1 < 2, '1<2是真的'):当条件为真时,跳过该用例不执行。











欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2