Unittest自动化测试框架教程(五)——Python中的测试套件TestSuite
“ 本文介绍了unittest中测试套件的相关概念,并通过实例帮助理解测试套件存在的意义,自由享用即可。”
PS:“ 老规矩,老手or实战应用型用户文末看总结,学习型用户顺序阅读 ”
- 博主每篇文章的注释都是干货!每个代码段都有详细注释,一定要认真看注释!!!
- 重要的事情说三遍:一定要看注释!!!一定要看注释!!!一定要看注释!!!
前情提要
- 本文建议在熟悉测试用例以及测试流程的基础下食用,能更好帮助理解套件存在的意义及使用
引言
-
测试套件:执行已编写的测试用例,特点:可用于执行不同类测试用例之间指定测试用例组合测试,也可指定某类、某些类测试用例单独测试
-
例如:
-
登陆类测试用例:1.登录成功 2.登录失败
-
账户类测试用例:1.用户A 2.用户B
-
测试套件的功能:可单独执行登录类测试用例、执行用户A+登录成功的用例
- 一定要认真看注释!!!
# 测试用例文件和测试套件文件要分开!!!# 这里笔者将此测试用例命名为Testcases# Testcase.py文件内容:# 文件说明:Testcase.py中有两类测试用例(login和data类),每一类测试用例下有两个测试用例import unittestclass Testcase1_login(unittest.TestCase): def test1(self): print('执行Testcase1_login的test1') def test2(self): print('执行Testcase1_login的test2')class Testcase2_data(unittest.TestCase): def test1(self): print('执行Testcase2_data的test1') def test2(self): print('执行Testcase2_data的test2')
基本框架
- 核心:导入测试用例模块(自己编写的),类的实例化
- 一定要认真看注释!!!
# 测试套件文件内容!!!# 一定要记得和测试用例文件互相独立import unittestimport Testcases # 导入测试用例,这里模块名是自己建立的测试用例文件名suite = unittest.TestSuite() # 类的实例化!!!要加括号才是实例化# 一次添加单个测试用例suite.addTest(Testcases.Testcase1_login('test1')) # 添加第1类测试用例中的第1个测试用例suite.addTest(Testcases.Testcase2_data('test1')) # 添加第2类测试用例中的第1次测试用例r = unittest.TextTestRunner() # 类的实例化!!!要加括号才是实例化r.run(suite) # 运行测试套件# 执行结果见下图# 实现了指定测试用例的执行
应用
- 一次添加多个测试用例,列表存储
- 一定要认真看注释!!!
import unittestimport Testcasessuite = unittest.TestSuite() # 一次添加单个测试用例# suite.addTest(Testcases.Testcase1_login('test1')) # 添加第1类测试用例中的第1个测试用例# suite.addTest(Testcases.Testcase2_data('test1')) # 添加第2类测试用例中的第1次测试用例# 一次添加多个测试用例,改为addTests,以列表形式存储,和上述方法等价,但简化了代码# 注意调用的是addTests不是addTest# Testcases.Testcase1_login('test1')表示文件Testcases类中子类Testcase_login的方法test1suite.addTests([Testcases.Testcase1_login('test1'), Testcases.Testcase2_data('test1')])r = unittest.TextTestRunner() # 类的实例化!!!要加括号才是实例化,否则是一个类r.run(suite) # 运行套件
- 以变量形式指定测试内容(推荐方法)
- 一次添加多个测试用例,并增加程序可读性
- 一定要认真看注释!!!
# 使程序更加可读,变量存储指定测试内容suite = unittest.TestSuite() # 以变量形式存储指定测试内容,便于修改且增加程序可读性tests = [ Testcases.Testcase1_login('test1'), Testcases.Testcase2_data('test1')]suite.addTests(tests)r = unittest.TextTestRunner() r.run(suite)
装载器的使用
-
装载器类型
-
loadTestsFromTestCase('测试用例的类名')
-
loadTestsFromModule('测试用例文件名/模块名')
-
loadTestsFromName('测试用例文件名/测试用例类名通用')
-
使用类装载器,示例:
- 一定要认真看注释!!!
# Testcase1_login()类下有两个用例test1、test2# class Testcase1_login(unittest.TestCase):# def test1(self):# print('执行Testcase1_login的test1')# def test2(self):# print('执行Testcase1_login的test2')##################################################### 使用类装载器# 一次执行一类测试用例suite = unittest.TestSuite()L = unittest.TestLoader() # 装载器实例化,注意加()suite.addTests(L.loadTestsFromTestCase(Testcases.Testcase1_login)) # 设置加载方式为Testcase中login类测试用例,Case()待测试的类run = unittest.TextTestRunner()run.run(suite)# 测试结果见下图
-
使用模块装载器,示例:
- 一定要认真看注释!!!
# Testcases文件下有两类测试用例,每一类中有两个测试用例,总共四个测试用例class Testcase1_login(unittest.TestCase): def test1(self): print('执行Testcase1_login的test1') def test2(self): print('执行Testcase1_login的test2')class Testcase2_data(unittest.TestCase): def test1(self): print('执行Testcase2_data的test1') def test2(self): print('执行Testcase2_data的test2')# 一次执行一个模块的测试用例suite = unittest.TestSuite()L = unittest.TestLoader() # 装载器实例化,注意加()suite.addTests(L.loadTestsFromModule(Testcases)) # 从模块名载入run = unittest.TextTestRunner()run.run(suite)# 测试结果见下图,执行了模块下的4次测试
-
使用name装载器(推荐方法:类名/文件名通用),示例:
- 一定要认真看注释!!!
# Testcases文件下有两类测试用例,每一类中有两个测试用例,总共四个测试用例class Testcase1_login(unittest.TestCase): def test1(self): print('执行Testcase1_login的test1') def test2(self): print('执行Testcase1_login的test2')class Testcase2_data(unittest.TestCase): def test1(self): print('执行Testcase2_data的test1') def test2(self): print('执行Testcase2_data的test2')# 使用name装载器,类名/模块名通用# 推荐suite = unittest.TestSuite()L = unittest.TestLoader()suite.addTests(unittest.TestLoader().loadTestsFromName('Testcases')) # 装载Testcases模块名suite.addTests(unittest.TestLoader().loadTestsFromName('Testcases.Testcase1_login')) # 装载Testcase1_login类名run = unittest.TextTestRunner()run.run(suite)# 测试结果见下图,执行6次测试
总结
- 测试套件:可用于执行不同类测试用例之间指定测试用例组合
- 测试指定用例组合:以变量形式指定测试内容(推荐方法,程序可读性高)
- 测试指定类/指定模块用例组合:使用name装载器(推荐方法,类名/文件名通用)
💗 “ 任何时候都不要忘记爱自己,保持自己的人格魅力,学会爱自己,才是终身浪漫的开始。”
——Created By 是羽十八ya