“ 本文介绍了unittest中测试套件的相关概念,并通过实例帮助理解测试套件存在的意义,自由享用即可。”
PS:“ 老规矩,老手or实战应用型用户文末看总结,学习型用户顺序阅读 ”
- 博主每篇文章的注释都是干货!每个代码段都有详细注释,一定要认真看注释!!!
- 重要的事情说三遍:一定要看注释!!!一定要看注释!!!一定要看注释!!!
前情提要
- 本文建议在熟悉测试用例以及测试流程的基础下食用,能更好帮助理解套件存在的意义及使用
引言
-
测试套件:执行已编写的测试用例,特点:可用于执行不同类测试用例之间指定测试用例组合测试,也可指定某类、某些类测试用例单独测试
-
例如:
-
登陆类测试用例:1.登录成功 2.登录失败
-
账户类测试用例:1.用户A 2.用户B
-
测试套件的功能:可单独执行登录类测试用例、执行用户A+登录成功的用例
- 一定要认真看注释!!!
# 测试用例文件和测试套件文件要分开!!!
# 这里笔者将此测试用例命名为Testcases
# Testcase.py文件内容:
# 文件说明:Testcase.py中有两类测试用例(login和data类),每一类测试用例下有两个测试用例
import unittest
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')
基本框架
- 核心:导入测试用例模块(自己编写的),类的实例化
- 一定要认真看注释!!!
# 测试套件文件内容!!!
# 一定要记得和测试用例文件互相独立
import unittest
import 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 unittest
import Testcases
suite = 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的方法test1
suite.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次测试
- 模块过滤装载器,大型测试用例使用
- unittext.defaultTestLoader.discover()
- 一定要认真看注释!!!
# 测试用例TestCases文件内容
# import unittest
# 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')
# 过滤装载器:defaultTestLoader.discover
all_tests = unittest.defaultTestLoader.discover(start_dir='./', pattern='Testcase*.py')
# start_dir筛选路径, pattern筛选文件名
# 默认装载器,可以执行指定路径,指定名字的测试模块,'./'表示当前文件夹,TestCase*.py表示前缀是Testcase的文件都会被执行
# 过滤为当前文件夹下以TestCase为前缀的用例,我们用例为TestCases且在当前文件夹,因此会执行
runner = unittest.TextTestRunner()
runner.run(all_tests)
# 测试结果见下图
总结
- 测试套件:可用于执行不同类测试用例之间指定测试用例组合
- 测试指定用例组合:以变量形式指定测试内容(推荐方法,程序可读性高)
- 测试指定类/指定模块用例组合:使用name装载器(推荐方法,类名/文件名通用)
💗 “ 任何时候都不要忘记爱自己,保持自己的人格魅力,学会爱自己,才是终身浪漫的开始。”
——Created By 是羽十八ya
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)