unittest单元测试
unittest是什么
unittest 是一个单元测试框架,支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立
安装
unittest是python内置的单元测试框架,无需额外安装
使用
1、测试类(测试用例)
建议以Test开头(非强制)方便TestLoader默认加载,必须继承unittest.TestCase,类中测试方法都需要test开头,因为测试用例只会执行以test开头的测试方法。
import unittest
class TestLogin(unittest.TestCase):
def test_login(self):
try:
self.assertEqual(1, 3 - 3)
except AssertionError as e:
# 这里可以进行断言出错的处理
print('结果不一致', e)
raise AssertionError
# 以python脚本的形式运行测试用例
if __name__ == '__main__':
unittest.main()
测试类中方法执行顺序:哪找方法名的ascii码排序执行
2、断言(self.assert())
断言结果
- . 表示通过 或者 pass
- F False,表示断言没有通过
- E Error,表示程序内部发生了错误
断言类型(常用)
- assertEqual
断言是否相等
import unittest
class TestLogin(unittest.TestCase):
def test_login_success(self):
expected = 1 # 预期结果
actual = 2 # 实际结果
self.assertEqual(expected, actual)
运行结果:
assertEqual 显示信息详细,会将预期结果和实际结果打印出来
2. assertTrue
断言表达式是否成立
import unittest;
class TestLogin(unittest.TestCase):
def test_login_success(self):
expected = 1 # 预期结果
actual = 2 # 实际结果
self.assertTrue(expected == actual)
运行结果:
SetUp(前置条件方法)
每一个测试用例方法执行之前都会运行的方法
tearDown(后置条件方法)
每一个测试用例方法执行完成后都会运行的方法
TestLoader(加载器)
用于加载多个测试用例,返回一个TestSuite
import os
import unittest
# 1、初始化testLoader
from test_cases import test_one, test_two
from test_cases.test_one import TestOne
from test_cases.test_two import TestTwo
testLoader = unittest.TestLoader()
# 2、查找测试用例进行加载
dir_path = os.path.dirname(os.path.abspath(__file__))
case_path = os.path.join(dir_path, 'test_cases')
# case_path 测试模块所在文件夹路径
# pattern 加载特定规则的测试用例 默认以test开头的
# discover 在指定文件夹中加载符合指定规则的测试用例
suite = testLoader.discover(case_path, pattern='test*.py')
# loadTestsFromModule 加载指定的模块
suite_module_1 = testLoader.loadTestsFromModule(test_one)
suite_module_2 = testLoader.loadTestsFromModule(test_two)
suite_module_total = unittest.TestSuite()
# 将多个测试套件加入到一个总的测试套件中
suite_module_total.addTests(suite_module_1)
suite_module_total.addTests(suite_module_2)
# loadTestsFromTestCase 加载指定的测试类
suite_case_1 = testLoader.loadTestsFromTestCase(TestOne)
suite_case_2 = testLoader.loadTestsFromTestCase(TestTwo)
suite_case_total = unittest.TestSuite()
# 将多个测试套件加入到一个总的测试套件中
suite_case_total.addTests(suite_case_1)
suite_case_total.addTests(suite_case_2)
with open('report.txt', 'w', encoding='utf-8') as f:
# 创建TextTestRunner
# verbosity 指定测试报告的详细程度 可选值 0 1 2 ,2最为详细
runner = unittest.TextTestRunner(f, verbosity=2)
# 执行TextTestRunner
runner.run(suite)
TestSuite(测试集合,测试套件)
经TestLoader加载多个实例后生成的测试集合
TextTestRunner(运行器)
- 执行测试集合
- 生成txt格式测试报告
import os
import unittest
# 1、初始化testLoader
testLoader = unittest.TestLoader()
# 2、查找测试用例进行加载
dir_path = os.path.dirname(os.path.abspath(__file__))
case_path = os.path.join(dir_path, 'test_cases')
# case_path 测试模块所在文件夹路径
# pattern 加载特定规则的测试用例 默认以test开头的
suite = testLoader.discover(case_path, pattern='test*.py')
with open('report.txt', 'w', encoding='utf-8') as f:
# 创建TextTestRunner
# verbosity 指定测试报告的详细程度 可选值 0 1 2 ,2最为详细
runner = unittest.TextTestRunner(f, verbosity=2)
# 执行TextTestRunner
runner.run(suite)
HtmlTestRunner(运行器)
- 执行测试集合
- 生成html格式测试报告
HtmlTestRunner非第三方库,需要下载对应py文件进行引入使用
下载链接:https://github.com/Gelomen/HTMLTestReportCN-ScreenShot
import os
import unittest
# 1、初始化testLoader
from HTMLTestRunner import HTMLTestRunner
from test_cases import test_one, test_two
from test_cases.test_one import TestOne
from test_cases.test_two import TestTwo
testLoader = unittest.TestLoader()
# 2、查找测试用例进行加载
dir_path = os.path.dirname(os.path.abspath(__file__))
case_path = os.path.join(dir_path, 'test_cases')
# case_path 测试模块所在文件夹路径
# pattern 加载特定规则的测试用例 默认以test开头的
# discover 在指定文件夹中加载符合指定规则的测试用例
suite = testLoader.discover(case_path, pattern='test*.py')
with open('report.html', 'wb') as f:
# 创建TextTestRunner
# verbosity 指定测试报告的详细程度 可选值 0 1 2 ,2最为详细
runner = HTMLTestRunner(f, verbosity=2)
# 执行HtmlTestRunner
runner.run(suite)