通过unittest加载测试用例的不同方法

发布时间 2023-10-12 10:15:29作者: Python-Django项目

使用python+unitest做自动化测试执行时, 执行用例时就涉及测试用例的加载。

即如何把测试cases加载到测试suite,然后进行运行。

一般把用例加载方法分为两大类:通过unittest.main(),或者通过testsuit。

第一种方式使用比较简单,第二种比较灵活多样。

 

一、测试文件中有测试类,及main方法。

测试代码如下:

import unittest
class MyTestCase(unittest.TestCase):
# setUp、tearDown此处省略
# 测试用例1
def test_001(self):
#具体的测试脚本
......
# 测试用例2
def test_002(self):
#具体的测试脚本
......
if __name__ == "__main__":
unittest.main()


 这种方法更适合命令行执行。

二、测试文件和执行文件不在同一个文件中

1. 通过testsuite从指定类添加指定用例:

if __name__ == '__main__':
# 创建测试套suite对象
suite = unittest.TestSuite()
# 往suite中添加用例
suite.addTest(MyTestCase1("test_login_success")) # 添加参数:类名(方法名称)
suite.addTest(MyTestCase1("test__login_fail"))
# 创建runner对象
runner = unittest.TextTestRunner(verbosity=2)
# 调用runner的run方法执行suite中的用例
runner.run(suite)

 

2. 通过loader从指定类中加载测试用例到suite

 

if __name__ == "__main__":
# 从指定类加载测试方法到suite
suite1 = unittest.TestLoader().loadTestsFromTestCase(MyTestCase1) # 参数:类名
suite2 = unittest.TestLoader().loadTestsFromTestCase(MyTestCase2)
# 创建新suite,参数为前边的suite1和suite2
suite = unittest.TestSuite([suite1, suite2]) # suite嵌套
# 执行suite中的用例
unittest.TextTestRunner(verbosity=2).run(suite)

3. 通过loader从指定文件中加载测试用例到suite

 
if __name__ == "__main__":
# 从指定类加载测试方法到suite
suite1 = unittest.TestLoader().loadTestsFromModule(cases.ec_login) # 参数:模块名称
suite2 = unittest.TestLoader().loadTestsFromModule(cases.ec_register)
# 创建新suite,参数为前边的suite1和suite2
suite = unittest.TestSuite([suite1, suite2]) # suite嵌套
# 执行suite中的用例
unittest.TextTestRunner(verbosity=2).run(suite)

4. 通过loader从指定字符串加载测试用例到suite

if __name__ == "__main__":
# 从指定类加载测试方法到suite
suite1 = unittest.TestLoader().loadTestsFromName("MyTestCase1",cases.ec_login)
suite2 = unittest.TestLoader().loadTestsFromName(
"MyTestCase1.test_login_fail",cases.ec_login) # 参数:类名/方法名,模块名
# 创建新suite,参数为前边的suite1和suite2
suite = unittest.TestSuite([suite1, suite2]) # suite嵌套
# 执行suite中的用例
unittest.TextTestRunner(verbosity=2).run(suite)

5. 通过loader从指定目录加载测试用例到suite

if __name__ == "__main__":
# 从指定类加载测试方法到suite
suite1 = unittest.TestLoader().discover("case1", "ec*.py") # 参数:目录,匹配模式
suite2 = unittest.TestLoader().discover("case2", "test*.py")
# 创建新suite,参数为前边的suite1和suite2
suite = unittest.TestSuite([suite1, suite2]) # suite嵌套
# 执行suite中的用例
unittest.TextTestRunner(verbosity=2).run(suite)

总结:

以上加载用例的方式很多,可以灵活根据需要选取。若是批量执行,使用discover方法比较方便。

若要生成美观点的结果报告,可以结合htmlreport使用:

# 创建loader对象
loader = unittest.defaultTestLoader
# 加载方法到suite中
suite1 = loader.discover("case1", "ecshop*.py")
suite2 = loader.discover("case2", "selenium*.py")
# 创建suite对象
suite = unittest.TestSuite()
# 添加suite到suite
suite.addTests(suite1)
suite.addTests(suite2)
# 创建runner对象
HTMLReport.TestRunner().run(suite) # 生成html格式报告

 

 

 
 
 
 
这种方法更适合命令行执行。