全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 20 道配套习题

测试与调试专题

专题说明

测试与调试是保障代码质量的关键环节。本专题从unittest单元测试框架出发,深入讲解断言方法、mock技术、pytest框架的使用、代码覆盖率分析、日志配置以及Python内置调试工具,帮助学习者建立完整的测试和调试能力体系。

学习目标

  1. 掌握unittest单元测试框架的使用方法
  2. 熟练使用各种断言方法验证代码正确性
  3. 理解mock的原理和使用场景
  4. 掌握pytest框架的核心特性和fixture
  5. 了解代码覆盖率分析和调试工具的使用

学习内容

本专题涵盖以下核心知识点:

单元测试基础

  • unittest框架结构
  • TestCase编写规范
  • setUp和tearDown
  • 测试发现与执行

断言方法

  • 基本断言:assertEqual、assertTrue等
  • 集合断言:assertListEqual、assertDictEqual
  • 异常断言:assertRaises
  • 浮点数断言:assertAlmostEqual

Mock技术

  • unittest.mock模块
  • patch装饰器和上下文管理器
  • Mock对象的属性和方法
  • 模拟返回值和副作用

pytest框架

  • pytest安装和基本用法
  • fixture固定装置
  • parametrize参数化测试
  • conftest.py配置

代码覆盖率

  • coverage.py工具
  • 覆盖率报告生成
  • 分支覆盖率
  • 覆盖率阈值配置

调试技术

  • print调试法
  • logging日志模块
  • pdb调试器
  • IDE调试功能

学习建议

  1. 先掌握unittest基础,再学习pytest
  2. 理解mock的使用场景,避免过度mock
  3. 重视测试覆盖率,但不是越高越好
  4. 调试时善用pdb和日志,提高排错效率

📝 配套习题(20 题)

💡 参考答案在文末
判断题
1

unittest是Python内置的单元测试框架,测试类继承unittest.TestCase,测试方法以test开头,使用assertEqual等断言方法验证结果。

A

B

2

coverage是Python的代码覆盖率分析工具,可以统计测试过程中执行的代码行数比例,帮助发现未被测试覆盖的代码路径。

A

B

3

Python的assert语句用于调试时检查条件,如果条件为False则抛出AssertionError异常,可用于测试代码验证预期结果。

A

B

4

生产环境日志最佳实践包括:使用合适的日志级别、结构化日志格式、避免记录敏感信息、配置日志轮转防止文件过大、集中存储便于分析。

A

B

5

pytest是Python流行的第三方测试框架,语法简洁,测试函数无需继承类,直接使用普通assert语句即可,支持参数化测试和丰富的插件生态。

A

B

6

Python的logging模块提供了灵活的日志记录功能,支持多种日志级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)和多种输出方式(文件、控制台、网络等)。

A

B

7

cProfile模块用于分析Python程序的性能,统计各函数的调用次数和执行时间;timeit模块用于精确测量小段代码的执行时间。

A

B

单选题
8

unittest测试类中,以下哪个方法会被自动执行为测试?

A

def add_test(self):

B

def test_add(self):

C

def TestAdd(self):

D

def testing_add(self):

9

cProfile分析结果中的"cumtime"表示:

A

函数本身的执行时间

B

函数及其调用的所有函数的总时间

C

函数被调用的次数

D

函数单次调用的平均时间

10

RotatingFileHandler的作用是:

A

按天分割日志文件

B

按大小轮转日志文件,超过限制创建新文件

C

同时输出到多个文件

D

发送日志到远程服务器

11

pytest相比unittest的主要优势是:

A

pytest是内置模块,unittest需要安装

B

pytest直接使用assert语句,语法更简洁

C

pytest只能测试函数,不能测试类

D

unittest性能更好

12

执行assert 5 > 10会发生什么?

A

返回False

B

返回None

C

抛出AssertionError异常

D

正常执行,无输出

13

设置日志级别为INFO后,以下哪个日志消息不会被输出?

A

logging.debug('message')

B

logging.info('message')

C

logging.warning('message')

D

logging.error('message')

14

使用coverage分析pytest测试覆盖率,正确的命令顺序是:

A

coverage report && coverage run -m pytest

B

coverage run -m pytest && coverage report

C

pytest && coverage html

D

coverage pytest && coverage report

填空题
15

cProfile.run('____________()')分析函数性能。ncalls表示____________,tottime表示函数____________执行时间,cumtime表示累计时间(含子调用)。timeit.timeit('code', number=n)测量代码n次的执行总时间。

16

RotatingFileHandler按____________轮转日志,参数____________设置最大大小,____________设置保留备份数。TimedRotatingFileHandler按时间轮转,when='midnight'每天午夜轮转。避免记录敏感信息。使用结构化格式便于分析。

17

unittest测试类继承____________,测试方法以____________开头。self.____________(a, b)断言相等,self.assertTrue(x)断言为真,self.assertIn(a, b)断言包含,self.assertRaises(exc)断言抛出异常。运行测试用unittest.main()。

18

pytest测试函数以____________开头,直接使用____________语句断言。运行测试用____________命令。参数化测试用parametrize装饰器。fixture用@pytest.fixture定义。pytest需要pip安装,语法比unittest更简洁。

19

logging有5个级别:____________(调试)、____________(一般)、____________(警告)、ERROR(错误)、CRITICAL(严重)。basicConfig设置level参数指定最低输出级别,filename参数指定输出文件,format参数指定日志格式。

20

assert语句检查条件,条件为____________时抛出____________异常。pytest直接使用____________断言。unittest使用self.assertEqual()断言相等,self.assertTrue()断言为真,self.assertRaises()断言抛出异常。python -O选项可禁用assert。

参考答案
1.正确 2.正确 3.正确 4.正确 5.正确 6.正确 7.正确 8.B 9.B 10.B 11.B 12.C 13.A 14.B 15.func;调用次数;本身 16.大小;maxBytes;backupCount 17.TestCase;test;assertEqual 18.test;assert;pytest 19.DEBUG;INFO;WARNING 20.False;AssertionError;assert
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 流程控制专题
下一个专题 → 生态与工具链专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码