前言:
1、方式一:通过addTest()方法对测试类内部的测试案例进行逐一添加
import unittest
class LoginTest(unittest.TestCase):
def test_logindemo01(self):
print('exec test_logindemo01')
self.assertIsInstance('hello',str)
def test_logindemo02(self):
print('exec test_logindemo02')
self.assertIsInstance(123,int)
def test_logindemo03(self):
print('exec test_logindemo03')
self.assertIsInstance([1,2,3],list)
if __name__=='__main__':
#方式一
# login_suite=unittest.TestSuite()
# login_suite.addTest(LoginTest('logindemo01'))#addTest类名(方法名)
# login_suite.addTest(LoginTest('logindemo03'))
runTest=unittest.main(defaultTest='login_suite')# 字符串格式 ’测试套件对象‘
2、方式二:通过makeSuite()方法,一次性将整个测试类文件下所有测试用例到suite中进行执行
import unittest
class LoginTest(unittest.TestCase):
def test_logindemo01(self):
print('exec test_logindemo01')
self.assertIsInstance('hello',str)
def test_logindemo02(self):
print('exec test_logindemo02')
self.assertIsInstance(123,int)
def test_logindemo03(self):
print('exec test_logindemo03')
self.assertIsInstance([1,2,3],list)
if __name__=='__main__':
#方式二
#注意:使用makeSuite()方法是,测试用例函数名一定是”test“开头
login_suite = unittest.TestSuite( unittest.makeSuite(LoginTest) )
3、方式三:通过TestLoader类用于自动创建一个测试集并把单个测试放入到测试集中进行执行
import unittest
import unittest_demo_04_TestSuite
import unittest_demo_05_TestLoader
class TestDemo_01(unittest.TestCase):
def test_logindemo01(self):
print('exec test_logindemo01')
self.assertIsInstance(123,int)
def test_logindemo02(self):
print('exec test_logindemo02')
self.assertIsInstance('hello',str)
def test_logindemo03(self):
print('exec test_logindemo03')
self.assertIsInstance({"name":"张三"},dict)
class TestDemo_02(unittest.TestCase):
def test_demo0201(self):
print('exec test_demo0201')
self.assertTrue([1,2,3])
def test_demo0202(self):
print('exec test_demo0202')
self.assertEqual(1+1,2)
if __name__=='__main__':
#TestLoader类使用时,必须导入需执行的模块。即使是当前本身所在的模块unittest_demo_05_TestLoader
#loadTestsFromTestCase()方方法可用于执行一个模块中某一个类中的用例,用于执行类下的用例
suite01=unittest.TestLoader().loadTestsFromTestCase(TestDemo_01)
#loadTestsFromModule()方法是执行一个模块下的所有以test开头的方法(用例),用于执行模块下的用例
'''suite02=unittest.TestLoader().loadTestsFromModule(unittest_demo_04_TestSuite)'''
#loadTestsFromName()方法可用于执行一个模块中某一个类下的某一个以test开头的方法(用例),用于执行单个用例
'''suite03=unittest.TestLoader().loadTestsFromName('unittest_demo_05_TestLoader.TestDemo_02.test_demo0202')'''
# loadTestsFromName()方法可用于执行一个模块中某一个类中的用例,用于执行类下的用例
'''suite04=unittest.TestLoader().loadTestsFromName('unittest_demo_05_TestLoader.TestDemo_02')'''
unittest.main(defaultTest='suite01')
4、方式四:通过addTests()方法可以把多个子测试集合进行整合到一个大的测试集合中进行执行
import unittest
import unittest_demo_04_TestSuite#导入测试用例所在的模块
import unittest_demo_05_TestLoader#导入测试用例所在的模块
#执行unittest_demo_04_TestSuite模块中LoginTest类下的test_logindemo02方法用例。执行单个用例
'''方式一:TestLoader类中loadTestsFromName()方法'''
# suite01=unittest.TestLoader().loadTestsFromName('unittest_demo_04_TestSuite.LoginTest.test_logindemo02')
'''方式二:TestSuite类中addTest()方法'''
suite01=unittest.TestSuite()
suite01.addTest(unittest_demo_04_TestSuite.LoginTest('test_logindemo02'))
#执行unittest_demo_05_TestLoader模块中TestDemo_01类下所有的用例。执行类下的用例
'''方式一:TestLoader类中loadTestsFromName()方法'''
# suite02=unittest.TestLoader().loadTestsFromName('unittest_demo_05_TestLoader.TestDemo_01')
'''方式二:TestSuite类中makeSuite()方法'''
suite02=unittest.TestSuite(unittest.makeSuite(unittest_demo_05_TestLoader.TestDemo_01))
#执行unittest_demo_05_TestLoader模块下所有的用例。执行模块下的用例
suite03=unittest.TestLoader().loadTestsFromName('unittest_demo_05_TestLoader')
main_suite=unittest.TestSuite()
#addTests()方法可以把多个子测试集合进行整合到一个大的测试集合中。执行子suite(套件)下的用例
main_suite.addTests(suite01)
main_suite.addTests(suite02)
main_suite.addTests(suite03)
unittest.main(defaultTest='main_suite')
5、方式五:通过discover()方法不需要像addTests()方法需要不断的去导入和添加测试用例模块。
import os
import unittest
file_path=os.path.dirname(__file__)
test_one_path=os.path.join(file_path,'test_one')
'''
discover(start_dir,pattern="test*.py",top_level_dir=None)
start_dir:要测试的模块名或测试用例目录;
pattern="test*.py":表示用例文件名的匹配原则,例子中匹配文件名为以“test”开头的“.py”文件,
星号“*”表示任意多个字符;
top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None。
该方法通过从指定的开始目录递归到子目录中查找所有测试模块,并返回包含它们的TestSuite对象,
只有与模块匹配测试文件和可导入的模块名称才会被加载。
如果一个测试文件的名字符合pattern,将检查该文件是否包含load_tests()函数,如果load_tests()函数
存在,则由函数负责加载文本中的测试用例。如果不存在,就会执行loardTestsFromModule(),查找该文件中派生
自TestCase的类包含的test开头的方法。
'''
discover=unittest.defaultTestLoader.discover(start_dir=test_one_path,
pattern='test_*.py',
top_level_dir=test_one_path)
main_suite=unittest.TestSuite()
main_suite.addTest(discover)
unittest.main(defaultTest='main_suite')