> 文档中心 > Unittest自动化测试框架教程(五)——Python中的测试套件TestSuite

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