IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Unittest框架介绍及常用组件 -> 正文阅读

[开发测试]Unittest框架介绍及常用组件

1、unittest框架介绍

????????unittest是Python自带单元测试框架,提供丰富的用例管理、执行和断言操作。

2、unittest框架常用组件

? ? ? ? (1)TestCase,测试用例,继承于TestCase的类或者TestCase的实例就是一个测试例。在unittest中表示测试用例的方法都必须以test开头才能被执行,各个方法之间的执行顺序按照ASCII值排序。

import unittest
class TestDemo(unittest.TestCase):
    def test_case(self):
        print('测试用例方法......')
       
    def non_test(self):
        # 非test开头的测试用例在测试执行时不会被执行
        print('非测试用例方法')

if __name__ == '__main__':
    # 执行测试用例
    unittest.main()

? ? ? ? (2)TextFixture, 测试夹具。用于测试用例执行前前置条件的准备与执行完毕后的处理。提供以下常用方法:

???????? ·setUp(),表示每个测试用例执行前进行的操作

????????·tearDown(),表示每个测试用例执行完毕之后的操作

????????·setUpClass(),类方法,表示所有测试用例执行之前的操作,只执行一次

????????·tearDownClass(),类方法,表示所有测试用例执行完毕之后的操作,只执行一次

import unittest

class TestDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        print('running setUpClass...')

    def setUp(self) -> None:
        print('running setUp...')

    def tearDown(self) -> None:
        print('running tearDown...')

    @classmethod
    def tearDownClass(cls) -> None:
        print('running tearDownClass...')

    def test_case(self):
        print('测试用例方法......')

if __name__ == '__main__':
    unittest.main()

? ? ? ? (3)TestSuite,测试套件,把需要执行的测试用例放在一起。有两种常用方式来创建测试套件。

????????·使用TestSuite类直接构建

???????? suit = unittest.TestSuite(tests=()) 直接传入要执行的测试用例tests, tests必须是一个包含单独测试用例的可迭代对象或者其他测试套件 如:

suit = unittest.TestSuite((TestDemo.test_case,))

????????·使用TestSuite类实例对象的addTest()与addTests()方法构建

????????addTest() ,一次只能添加一条测试用例

suit = unittest.TestSuite() 
suit.addTest(TestLogin('test_1'))  # 添加TestLogin类的test_

?????????addTests() ?一次可以添加多条测试用例

suit = unittest.TestSuite() 
# 添加TestLogin类的test_1 test_2
suit.addTests([TestLogin('test_1'), TestLogin('test_2')]) ?

? ? ? ? (4)TestRunner,测试执行器 执行测试用例,并返回测试用例的执行结果,还能将结果以HTML或者Text形式展示出来。即HTMLTestRunner与TextTestRunner

????????·HTMLTestRunner

# 以HTML形式显示测试报告
# 1、创建执行器 
runner = HTMLTestRunner( 
        stream=xxx , ?# 指定输出方式 
        tester=xxx , ? # 测试人员?? ? 
        description=xxx , ?# 测试报告描述信息 
        title=xxx , ?# 测试报告标题 
        verbosity=num , ?# 测试报告详细程度, 有3个值(0 1 2默认2(最详细)) ) 

# 2、启动执行器运行测试用例, suit即上文装载了测试用例的TestSuite
runner.run(suit)

????????·TextTestRunner

# 以Text形式显示测试报告
# 1、创建执行器 
runer = TextTestRunner( 
    stream=xxx, # 指定输出方式(默认为None, 输出到控制台) 
                ?# 输出到文件 with open('file',''wb) as file_name, stream=file_name ?                
    verbosity=num , ?# 测试报告详细程度, 有3个值(0 1 2默认2(最详细)) 
    description=xxx , ?# 测试报告描述信息 
) 

# 2、启动执行器运行测试用例 
runner.run(suit)

????????(5)TestLoader,测试装载器,用来将TestCase添加到TestSuite中,有以下几种常用方式 ????????·loadTestsFromTestCase()? 通过类名将测试用例添加到测试套件中

suit = unittest.TestLoader().loadTestsFromTestCase(TestCaseClass)

?????????·loadTestsFromModule()??通过模块名将测试模块添加到测试套件中

suit = unittest.TestLoader().loadTestsFromModule(TestCaseModuleName)

?????????·loadTestsFromName()? 通过名字将测试用例添加到测试套件中,可以是模块,测试用例类或者测试用例类中测试方法

suit = unittest.TestLoader().loadTestsFromName(class.method)
suit = unittest.TestLoader().loadTestsFromName(module.class)
...

?????????·loadTestsFromNames()? 将序列中的测试用例添加到测试套件中

suit = unittest.TestLoader().loadTestsFromNames(['test_1', 'tesst_2' [,...]])

???????? ·discover() 将指定路径下指定开头的文件添加到测试套件中(也可以使用unittest中的defaultTestLoader的discover方法)

suit = unittest.TestLoader().discover( 
    start_dir=xxx , ? # 测试用例所在路径 
    pattern=xxx , ? # 匹配规则,符合条件的加入到TestSuite中 
    top_level_dir=xxx , ?# 顶层目录名称,默认None
)

# 执行测试用例
runner = unittest.TextTestRunner()
runner.run(suit)

3、断言

????????断言在测试中用来判断实际结果与预期结果是否相等,在unittest框架中,可以使用Python自带的断言,也可以使用unittest框架中的断言。

????????·Python中断言?直接使用?assert 表达式即可

????????·unittest中断言

assertEqual(a, b,msg=None) 
assertNotEqual(a, b,msg=None) 
assertIn(a, b) ...

?4、其他

? ? ? ? (1) skip装饰器

????????skip装饰器可以跳过某些测试用例,skip主要有四种用法:

????????·@unittest.skip(reason) 无条件跳过,reason描述跳过的原因

????????·@unittest.skipIf(condition, reason) 有条件跳过,当条件满足时跳过该测试用例

????????·@unittest.skipUnless(condition, reason) 有条件跳过,当condition条件不满足时跳过该测试用例

????????·@unittest.exceptedFailure 用于标记期望执行失败的测试方法,如果该测试方法执行失败则被认为成功,如果执行成功则被认为是失败。

5、一个例子

import unittest

class TestLogin(unittest.TestCase):
    def setUp(self) -> None:
        # 创建套件,每次执行用例前都会执行一次
        print("测试用例执行前准备条件...")

    def test_name(self):
        # 创建第一个测试方法
        assert 'Tom' == 'Bob'

    def test_id(self):
        # 创建第二个测试方法
        self.assertEqual('2983', '2983')

    @unittest.skipIf('test' in 'python test', reason='满足条件跳过该用例')
    def test_time(self):
        self.assertNotEqual('B','C')

if __name__ == '__main__':
    # 创建测试套件,并装载测试用例
    suit = unittest.TestLoader().loadTestsFromTestCase(TestLogin)
    
    # 创建执行器
    runner = unittest.TextTestRunner(
        stream=None,  # 输出到终端
        descriptions='unittest 测试框架',
        verbosity=2
    )
    # 执行测试用例
    runner.run(suit)

?

?

?

?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:30:26  更:2022-10-31 12:31:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 12:06:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码