51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2954|回复: 0
打印 上一主题 下一主题

[转贴] 测试小白简单聊聊关于UnitTest(二)

[复制链接]
  • TA的每日心情
    擦汗
    7 天前
  • 签到天数: 1027 天

    连续签到: 2 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-6-4 09:44:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    四、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是真的'):当条件为真时,跳过该用例不执行。






    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-10-7 05:19 , Processed in 0.070438 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表