zoukankan      html  css  js  c++  java
  • TestLoader类中提供的discover()方法

    calculator.py
    class Count:
    def __init__(self,a,b):
    self.a = int(a)
    self.b = int(b)

    #计算加法
    def add(self):
    return self.a + self.b

    #计算减法
    def sub(self):
    return self.a - self.b

    runtest.py

    import unittest
    # 加载测试文件
    import testadd
    import testsub

    # 构造测试集
    suite = unittest.TestSuite()
    suite.addTest(testadd.TestAdd("test_add"))
    suite.addTest(testadd.TestAdd("test_add2"))
    suite.addTest(testsub.TestSub("test_sub"))
    suite.addTest(testsub.TestSub("test_sub2"))
    if __name__ == '__main__':
    # 执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)

    """
    这样的拆分带来了好处,可以根据不同的功能创建不同的测试文件,甚至是不同的测试目录,
    测试文件中还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,整体结构更加清晰。
    这样的设计看上去很完美,但依然没有解决添加用例的问题,当用例达到成百上千条时,
    在runtest.py文件中通过addTest()添加/删除测试用例就变得非常麻烦,
    那么有没有方法让unitest单元测试框架自动识别测试用例呢?答案是肯定的,
    TestLoader类中提供的discover()方法可以解决这个问题。
    """

    testadd.py

    from calculator import Count
    import unittest
    class TestAdd(unittest.TestCase):
    def setUp(self):
    print("test case start")

    def tearDown(self):
    print("test case end")

    def test_add(self):
    j = Count(2,3)
    self.assertEqual(j.add(),5)

    def test_add2(self):
    j = Count(41, 76)
    self.assertEqual(j.add(), 117)

    if __name__ == '__main__':
    unittest.main()

    TestLoader类中提供的discover()方法.py

    """
    discover(start_dir,pattern=test*py',top level dir=None)
    找到指定目录下所有测试模块,并可递归查到子目录下的测试模块,只有匹配到文件名才能被加载。
    如果启动的不是顶层目录,那么顶层目录必须单独指定。
    ·start_dir:要测试的模块名或测试用例目录。
    ·patern=-test*.py:表示用例文件名的匹配原则。此处匹配文件名以“test”开头的“.py”类型的文件,
    星号“*”表示任意多个字符。
    ·top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None。
    现在通过discover()方法重新实现runtest.py文件的功能。
    """

    import unittest
    #定义测试用例的目录为当前目录:
    test_dir = "./"
    discover = unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")
    if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(discover)

    """
    discover()方法会自动根据测试目录(test_dir)匹配查找测试用例文件(test*.py),
    并将查找到的测试用例组装到测试套件中,因此,可以直接通过run()方法执行discover,
    大大简化了测试用例的查找与执行。
    """

    testsub.py

    from calculator import Count
    import unittest
    class TestSub(unittest.TestCase):
    def setUp(self):
    print("test case start")

    def tearDown(self):
    print("test case end")

    def test_sub(self):
    j = Count(2, 3)
    self.assertEqual(j.sub(),-1)

    def test_sub2(self):
    j = Count(71, 46)
    self.assertEqual(j.sub(),25)

    if __name__ == '__main__':
    unittest.main()

     

     

     

     

     
  • 相关阅读:
    Redis单点登录
    MySQL有哪些存储引擎,各自的优缺点,应用场景
    MySQL慢查询优化、索引优化、以及表等优化总结
    Redis缓存和MySQL数据一致性方案详解
    Jenkies+github实现代码自动构建
    Python基础-day14-单元测试注册小例子
    Python基础-day13-unitest框架(Suite、runner)及生成报告,附带最新的HTMLTestRunnerNew.py文件
    Python基础-day11-继承和动态设置属性
    Python基础-day10-类的创建和调用
    Python基础-day03 字符串
  • 原文地址:https://www.cnblogs.com/zhang-da/p/12210601.html
Copyright © 2011-2022 走看看