unittest讲解

unittest核心要素

  • TestCase
  • TestSuite
  • TextTestRunner
  • defaultTestLoader
  • Fixture

TestCase

说明:(翻译:测试用例)一个TestCase就是一条测试用例;

使用:
1. 导包:import unittest --> 导入unitest框架
2. 继承:unittest.TestCase --> 新建测试类继承unittest.TestCase
提示:
1). 测试用例:在自动化测试中,一条用例就是一个完整的测试流程;
2). 测试方法名称命名必须以test开头;
(原因:unittest.TestCase类批量运行的方法是搜索执行test开头的方法)

TestSuite

说明:(翻译:测试套件)多条测试用例集合在一起,就是一个TestSuite
返回的suite套件原理:suite = unittest.TestSuite(map(UserCase,['testAddUser','testDelUser']))

使用:
1. 实例化: suite=unittest.TestSuite()
(suite:为TestSuite实例化的名称)
2. 添加用例:suite.addTest(ClassName('MethodName')) # 参数可以是tcase.TestCase实例 或者 TestSuite实例
(ClassName:为类名;MethodName:为方法名)
suite.addTests([ClassName('MethodName1'),ClassName('MethodName1')])
3. 添加扩展:suite.addTest(unittest.makeSuite(ClassName)) # 其本质还是TestLoader
(搜索指定ClassName内test开头的方法并添加到测试套件中)

TextTestRunner

说明:(翻译:测试执行)是用来执行测试用例套件(执行上面的测试套件)

使用:
1. 实例化: runner=unittest.TextTestRunner()
(runner:TextTestRunner实例化名称)
2. 执行: runner.run(suite) 返回unittest.TestResult 对象,可以查看成功次数,失败次数等
(suite:为测试套件名称)```
unittest.TextTestRunner(stream=open("./tex.text",'w'),descriptions=True, verbosity=1)
stream : 写入的文件对象
descriptions : 描述信息
verbosity: 写入文件的详细程度(01,2

HTMLTestRunner(生成测试报告)

生成html测试报告

from HTMLTestRunner import HTMLTestRunner
with open(r'test_report.html', 'b') as f: # => 必须以w的方式打开
runner = HTMLTestRunner(
stream=f, # => 可写的文件对象
title='add函数测试报告', # => 测试报告标题
description='win 10, python 3.8', # => 对本次测试的描述
)
runner.run(tests) # => tests是通过discover查找并构建的测试套件

运行报告如下:

Beautiful Report

生成测试报告

from BeautifulReport import BeautifulReport
runner = BeautifulReport(tests) # => tests是通过discover查找并构建的测试套件
runner.report(
description='add函数测试报告', # => 报告描述
filename='bf.html', # => 生成的报告文件名
log_path='.' # => 报告路径
)


实例验证
## test_bb.py
import unittest
class TestCase(unittest.TestCase):
def test_01(self):
print(f'运行用例{self.id()}')
def test_02(self):
print(f'运行用例{self.id()}')
def test_03(self):
print(f'运行用例{self.id()}')
if __name__ == '__main__':
print(dir(TestCase))
## test_login.py
import unittest
class TestLogin(unittest.TestCase):
def test_login1(self):
print(f'运行用例{self.id()}')
pass
def test_login2(self):
print(f'运行用例{self.id()}')
pass
def test_login3(self):
print(f'运行用例{self.id()}')
pass
def test_login4(self):
print(f'运行用例{self.id()}')
pass
## mian.py
from test_bb import TestCase
from test_login import TestLogin
suite = unittest.TestSuite()
suite.addTest(TestCase('test_01'))
suite.addTests([TestCase('test_02'),TestCase('test_03')])
suite.addTest(unittest.makeSuite(TestLogin))
runner = unittest.TextTestRunner()
runner.run(suite)

defaultTestLoader

说明: 本质就是利用TestLoader类的相关方法找到testcase或者suite,并将查找到的测试用例组装到测试套件

  • discover方法
用法:
test_dir = './'
disconver = unittest.defaultTestLoader.discover(test_dir, pattern='iweb_*.py')
(test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式 )
运行:
runner=unittest.()
runner.run(disconver)
  • loadTestsFromTestCase(testCaseClass)
用法:
testCaseClass必须是TestCase的子类(或孙类也行)
运行:
suite = unittest.defaultTestLoader.loadTestsFromTestCase(testCaseClass)
runner=unittest.TextTestRunner()
runner.run(suite)
  • loadTestsFromModule(module, pattern=None)
用法:
name是一个stringstring需要是是这种格式的“module.class.method”
运行:
suite = unittest.defaultTestLoader.loadTestsFromModule(module, pattern=None)
runner=unittest.TextTestRunner()
runner.run(suite)
  • loadTestsFromNames(name, module=None)
用法:
names是一个list,用法与上同
运行:
suite = unittest.defaultTestLoader.loadTestsFromNames(module, pattern=None)
runner=unittest.TextTestRunner()
runner.run(suite)
  • loadTestsFromModule(self, module, *args, pattern=None, **kws)
用法:
module是一个module对象不是字符串
运行:
suite = unittest.defaultTestLoader.loadTestsFromNames(module, pattern=None)
runner=unittest.TextTestRunner()
runner.run(suite)
posted @   我是小菜鸡丫丫  阅读(714)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示