TestLoader类中提供的discover()方法

Posted zhang-da

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

 

 

 

 

 

以上是关于TestLoader类中提供的discover()方法的主要内容,如果未能解决你的问题,请参考以下文章

unittest 11 批量执行测试用例文件(通过模式匹配选择多个测试用例文件 TestLoader discover)

python unittest单元测试框架-2discover

unittest测试框架_3_discover

摆脱京城贵妇unittest的骚套路discover,自定义用例执行顺序。

多个测试用例文件执行

unittest批量执行测试用例