python07-单元测试框架unittest1-3

        当测试用例数量增加,一个一个执行效率低下,需要将工程下的,case收集并按顺序执行将对应的代码放入run_tests.py

 

run_tests.py:运行程序目的

  • 收集所有的测试用例
  • 执行
  • 生成测试报告

运用测试用例的收集器或测试用例的加载器

7 TestSuite & TestLoader的使用

使用TestSuite类来组织多个测试用例

使用TestLoader类来动态加载测试用例

常用的方法如下:

  • 方法一:
    unittest.TestSuite()
    addTest()添加一个测试用例
  • 方法二:
    unittest.TestLoader()
     unittest.TestLoader.loadTestsFromModule(模块名)不需要加引号(注意要导入模块)
  • 方法三:unittest.TestLoader.loadTestsFromTestCase(测试类名)不需要加引号

7.1 使用unittest.TestSuite()测试组件--addTest()

        当测试用例的数量增加时,需要将这些测试用例分组并按顺序执行,可以通过unittest.TestSuite来创建测试套件,并将多个测试用例添加到测试套件中

例子如下:

import unittest

def add(a, b):
    return a + b

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('hello'.upper(), 'HELLO')

    def test_isupper(self):
        self.assertTrue('HELLO'.isupper())
        self.assertFalse('Hello'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])

        with self.assertRaises(TypeError):
            s.split(2)

class TestAdd(unittest.TestCase):

    def test_add(self):
        self.assertEqual(add(1, 2), 3)
        self.assertEqual(add(0, 0), 0)

    def test_add_negative(self):
        self.assertEqual(add(-1, -2), -3)
        self.assertEqual(add(-1, 1), 0)

if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(TestStringMethods))
    suite.addTest(TestAdd('test_add'))
    unittest.TextTestRunner(verbosity=2).run(suite)

 

        在 例子中,定义了测试程序TestStringMethods和TestAdd。在main函数中,创建了一个测试套件suite,并使用addTest将TestStringMethods和TestAdd这两个测试程序添加到测试套件中,使用unittest.TextTestRunner类别来执行测试套件,并设置verbosity=2参数以显示更详细的报告

        使用测试套件可以将多个测试用例按顺序执行,从而更好的管理和执行测试

7.2  使用unittest.TestLoader()测试组件--loadTestsFromModule()

loader = unittest.TestLoader()

#只加载注册和登录的用例
suite_login = loader.loadTestsFromModule(test_login)#从某个模块中加载
suite_register = loader.loadTestsFromModule(test_register)

#有2个suite,需要再次合并初始化一个suite
suite_total = unittest.TestSuite()
suite_total.addTests([suite_login,suite_register]) #放入总的测试集

8 执行用例

8.1 TextTestRunner的用法

测试用例集合完毕,如何来执行测试用例?

需要用到TextTestrRunner执行测试集,用run 方法

#创建runner对象
runner = unittest.TextTestrRunner()
#这是传入测试集合执行
runner.run(suite)
import unittest
import os

#初始哈一个加载器,test_loader
loader = unittest.TestLoader()

#获取测试用例目录的路径
dir_path = os.path.dirname(os.path.abspath(__file__))
case_path = os.path.join(dir_path, 'tests')

#收集使用loader 收集所有的测试用例
#test_suit: unittest.TestSuite = loader.discover(case_path)
#discover自动识别收集测试用例,
test_suit = loader.discover(case_path)
print(test_suit)

#执行测试用例
#TextTestRunner:生成文本格式的测试报告

runner = unittest.TextTestRunner()
runner.run(test_suit)

 loader.discover(case_path),动态加载路径下符合条件的test模块,按顺序进行执行

 

"""动态加载的case"""
<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_addcase.TestAdd testMethod=test_add>]>]>, <unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_example01case.TestStringMethods testMethod=test_isupper>, <test_example01case.TestStringMethods testMethod=test_split>, <test_example01case.TestStringMethods testMethod=test_upper>]>]>, <unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_fixture.TestAdd testMethod=test_add>, <test_fixture.TestAdd testMethod=test_add_negative>]>, <unittest.suite.TestSuite tests=[<test_fixture.TestAdd2 testMethod=test_add2>, <test_fixture.TestAdd2 testMethod=test_add2_negative>]>]>, <unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_login.TesrLogin testMethod=test_login_01_success>, <test_login.TesrLogin testMethod=test_login_02_error>]>]>, <unittest.suite.TestSuite tests=[]>, <unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_suitecase.TestAdd testMethod=test_add>, <test_suitecase.TestAdd testMethod=test_add_negative>]>, <unittest.suite.TestSuite tests=[<test_suitecase.TestStringMethods testMethod=test_isupper>, <test_suitecase.TestStringMethods testMethod=test_split>, <test_suitecase.TestStringMethods testMethod=test_upper>]>]>, <unittest.suite.TestSuite tests=[]>]>

9 生成测试报告

9.1 text类型的测试报告:

一般不使用这种报告,比较不规范

创建一个文件,以写的方式打开

#生成测试报告
with open("test_reports.txt", 'w', encoding= 'utf-8') as f:
    runner =unittest.TextTestRunner(f)
    runner.run(test_suit)

 

 补充点:

 .F:测试用例断言失败问题,可能是测试用例预期结果不对,可能测试用例执行出现bug

出现2种问题:

  • 发现bug
  • 代码预期结果不对

如图记录错误

.E:代码问题 ,需要改代码自己问题

9.2 html类型的测试报告:

 1)方法一:BeautifulReport模块生成

环境安装:pip install BeautifulReport

使用方式:

from BeautifulReport import BeautifulReport

br = BeautifulReport(suit)
br.report("测试报告", "test.html")
2) 方法二:HTMLTestRunnerNew模块生成
import unittest
import os
#初始化加载器
from HTMLTestRunnerNew import  HTMLTestRunner

from class20240714_unittest.tests import test_login,test_register

#初始哈一个加载器,test_loader
loader = unittest.TestLoader()

#获取测试用例目录的路径
dir_path = os.path.dirname(os.path.abspath(__file__))
case_path = os.path.join(dir_path, 'tests')

#收集使用loader 收集所有的测试用例
#test_suit: unittest.TestSuite = loader.discover(case_path)
#discover自动识别收集测试用例,
test_suit = loader.discover(case_path)
print(test_suit)

#HTML测试报告,不是内置的,是需要自己准备的
with open("test_reports.html", 'wb') as f:
    #自定义HTML内容
    runner = HTMLTestRunner(f, title = '测试报告',description= '测试报告的描述', tester= 'xiaoyi')
    runner.run(test_suit)

 运行结果:

报告:

unittest 图解:

 

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值