一、单元测试框架:
unittest(python自带的),pytest(第三方库)
编写测试用例—收集测试用例—执行用例—生成测试结果
二、编写测试用例
1、创建测试类:类名称建议以Test开头,必须继承unittest.TestCase
class TestLogin(unittest.TestCase):
2、测试用例:
2.1、必须写在测试类里面
2.2、函数名称必须是test开头
2.3、执行顺序,按照ASCII码顺序执行
2.4、执行器配置:File—setting—tools—Python Integrated Tools–Defalut test runner—选择unittest
3、执行
3.1、不需要初始化
3.2、需要配置执行器
4.测试用例包含:
4.1、前置条件:执行这个场景的前提条件(非必要)
函数级别:每个用例执行之前执行一次
类级别:每个测试类执行之前执行一次
4.2、业务逻辑:接口需要处理的
根据业务情况封装处理
4.3、断言:将期望结果,与实际结果进行对比
==:比对值
is:比对内存地址
self.assertEqual(1, 1) 比对是否相等
如果不成立,就会抛出异常,unittest框架就会根据这个异常去将对应的测试用例标记为失败
4.4、后置清理:清理测试数据
函数级别:每个用例执行结束之后执行一次
类级别:每个测试类执行结束之后执行一次
4.5测试报告
测试类&测试用例
import unittest
class TestLogin(unittest.TestCase):
# def setUp(self) -> None:
# print('每个函数执行之前--执行我')
#
# def tearDown(self) -> None:
# print('每个函数执行结束后--执行我')
#
# @classmethod
# def setUpClass(cls) -> None:
# print('测试类执行之前--执行我,只执行一次')
#
# @classmethod
# def tearDownClass(cls) -> None:
# print('测试类执行结束之后--执行我,只执行一次')
def test_login_01(self):
#业务逻辑
print('test02_login_01')
self.assertEqual(1,1) #first;期望结果,second:实际结果
def test_login_02(self):
print('test02_login_02')
self.assertEqual(1, 2)
def test_login_03(self):
print('test02_login_03')
self.assertEqual(1, 1)
测试用例执行步骤
1、实例化测试套件(unittest.TestSuite)
2、将测试用例添加到测试套件
3、创建用例运行器
4、将测试套件放到运行器执行
5、测试报告
Tunittest.estLoader:加载用例
unittest.TestSuite:测试套件类,收集测试用例
unittest.TextTestRunner():运行测试用例
三、收集测试用例
1、添加单个测试用例【了解】
suite = unittest.TestSuite()
suite.addTest(类(‘测试用例名称/函数名称test’))
2、添加多个测试用例【了解】
类(‘测试用例名称/函数名称test’)
test_case_list =[TestLogin(‘test_login_01’),TestLogin(‘test_login_02’),TestLogin(‘test_login_03’)]
suite.addTests(test_case_list)
3、添加整个测试类【了解】(跑整个类)
suite.addTest(unittest.makeSuite(TestLogin))
4、TestLoader(用例收集)
dir_path = os.path.dirname(file)
print(dir_path)
suite = unittest.defaultTestLoader.discover(start_dir=dir_path,pattern=‘unittest_*.py’)
四、测试报告
1、TextTestRunner 自带的,不友好,不要用
2、HTMLTestRunner 无人维护了,无法安装
3、BeautifulReport 第三方库,需要另外安装
suite = unittest.defaultTestLoader.discover(start_dir=dir_path)
reports = BeautifulReport(suites=suite)
reports.report(description=‘测试报告’,filename=‘html_report.html’)
4.unittestreport
filename=“report.html”,
report_dir=".",
title=‘测试报告’,
tester=‘测试员’,
desc=“XX项目测试生成的报告”,
templates=1 # 测试报告模板,1,2,3
import os
import unittest
from BeautifulReport import BeautifulReport
from unittestreport import TestRunner
# 目录/项目1、项目2
from test01 import TestLogin
# 创建测试套件
suite = unittest.TestSuite()
# 添加测试用例到测试套件
suite.addTest(TestLogin('test_login_01'))
# 添加多个测试用例
test_case_list =[TestLogin('test_login_01'),TestLogin('test_login_02'),TestLogin('test_login_03')]
suite.addTests(test_case_list)
# 添加测试类
suite.addTest(unittest.makeSuite(TestLogin))
# 创建运行器
# run = unittest.TextTestRunner()
# run.run(suite)
# ,pattern='unittest_*.py'
# dir_path = os.path.dirname(__file__)
# print(dir_path)
suite = unittest.defaultTestLoader.discover(start_dir=dir_path)
# start_dir:测试用例目录
# pattern='test*.py':需要执行的测试用例文件名称,默认是test开头,可以自定义
# top_level_dir=None
#测试报告:BeautifulReport
dir_path = os.path.dirname(__file__)
print(dir_path)
suite = unittest.defaultTestLoader.discover(start_dir=dir_path)
reports = BeautifulReport(suites=suite)
reports.report(description='py39期测试报告',filename='html_report.html')
#测试报告:unittestreport
dir_path = os.path.dirname(__file__)
print(dir_path)
suite = unittest.defaultTestLoader.discover(start_dir=dir_path)
runner = TestRunner(suite=suite,
filename='test03_report_py39',
tester='海励',
desc='py39期测试报告',
templates=3)
runner.run()