Python基础教程(第3版)中文版 第16章 测试基础(笔记)

简介: Python基础教程(第3版)中文版 第16章 测试基础(笔记)

                                         第16章 测试基础

1.先测试再编码

为程序的各个部分编写测试很重要(单元测试)。

“测试一点点,编写一点点”。

1.准确的需求说明

有爱阐述程序的目标,可编写需求说明。

2.做好应对变化的准备

3.测试四步曲

1.确定要实现的功能,记录下来,为之编写测试

2.编写实现功能的框架代码,让程序能够运行,但测试仍无法通过,确保代码不正确时,测试能够报错。

3.编写让测试能通过的代码,无需实现全部,只要能通过测试即可。

4.改进(重构)代码以全面而准确地实现所需的功能,同时确保测试能通过。

2.测试工具

有2个模块可帮助自动完成测试过程。

unittest:通用的测试框架
doctest:为检查文档设计的,也可用来单元测试

1.doctest

实例:

def square(x):

   '''

   计算平方并返回结果

   >>> square(2)

   4

   >>> square(3)

   9

   '''

   return x ** x


if __name__ == '__main__':

   import doctest, my_math

   doctest.testmod(my_math)

保存为my_math.py

然后在命令行运行 python my_math.py

什么都不会输出。

使用 python my_math.py -v

输出详细信息

2.unittest

实例:

#使用unittest测试 my_math

import unittest, my_math


class ProductTestCase(unittest.TestCase):


   def test_integers(self):

       for x in range(-10, 10):

           for y in range(-10, 10):

               p = my_math.product(x, y)

               self.assertEqual(p, x * y, 'Integer multiplication failed')


   def test_float(self):

       for x in range(-10, 10):

           for y in range(-10, 10):

               x = x / 10

               y = y / 10

               p = my_math.product(x, y)

               self.assertEqual(p, x * y, 'Float multiplication failed')


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


#被测试的my_math 模块

def product(x, y):

   #这句是故意出错来看看测试是不是有用

   if x == 7 and y == 9:

       return 'An insidious bug has surfaced!'

   return x * y  

3. 超越单元测试

1.使用PyChecker和PyLint检查源代码

PyChecker是检查python源代码的工具,

PyLint支持PyChecker的大部分功能,还有其他功能,如变量名是否规范。。。


由于PyChecker有很多年没有更新了,所以就使用PyLint

直接使用 pip install pylint 安装


使用PyLint 检查文件时,将模块(或包)名作为参数:

pylint module


实例:

#使用模块subprocess调用外部检查器

import unittest, my_math

from subprocess import Popen, PIPE


class ProductTestCase(unittest.TestCase):

   #测试.

   def test_integers(self):

       for x in range(-10, 10):

           for y in range(-10, 10):

               p = my_math.product(x, y)

               self.assertEqual(p, x * y, 'Integer multiplication failed')


   def test_float(self):

       for x in range(-10, 10):

           for y in range(-10, 10):

               x = x / 10

               y = y / 10

               p = my_math.product(x, y)

               self.assertEqual(p, x * y, 'Float multiplication failed')

 

   def test_with_PyLint(self):

       cmd = 'pylint', '-rn', 'my_math'

       pylint = Popen(cmd,stdout=PIPE, stderr=PIPE)

       self.assertEqual(pylint.stdout.read(), '')


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

#不知道为什么用不了这个方法,所以就直接在命令行用pylint module 了



2.性能分析

通常不需要过分追求速度。但是速度很慢时,就必须优化。性能分析帮助找到运行慢的地方。

标准库模块profile(C语言版本cProfile)

使用时只需调用其方法run并提供一个字符串参数。

>>> import cProfile

>>> from my_math import product

>>> cProfile.run('product(1, 2)')

将输出函数调用次数和花费时间

如果向run提供第二个参数('my_math.profile')将分析结果保存到这个文件中,然后就可以使用模块psats分析结果


相关文章
|
18天前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
98 1
|
2月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
172 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
1月前
|
测试技术 Python
Python测试报告生成:整合错误截图,重复用例执行策略,调整测试顺序及多断言机制。
如何组织这一切呢?你可以写一本名为“Python测试之道”的动作指南手册,或者创建一个包含测试策略、测试顺序、多断言机制的脚本库。只要你的测试剧本编写得足够独到,你的框架就会像一位执行任务的超级英雄,将任何潜伏于代码深处的错误无情地揪出来展现在光天化日之下。这些整理好的测试结果,不仅有利于团队协作,更像冒险故事中的精彩篇章,带给读者无尽的探索乐趣和深刻的思考。
56 10
|
2月前
|
人工智能 Ruby Python
python__init__方法笔记
本文总结了Python中`__init__`方法的使用要点,包括子类对父类构造方法的调用规则。当子类未重写`__init__`时,实例化会自动调用父类的构造方法;若重写,则需通过`super()`或直接调用父类名称来显式继承父类初始化逻辑。文中通过具体代码示例展示了不同场景下的行为及输出结果,帮助理解类属性与成员变量的关系,以及如何正确使用`super()`实现构造方法的继承。
103 9
|
1月前
|
测试技术 Python
Python接口自动化测试中Mock服务的实施。
总结一下,Mock服务在接口自动化测试中的应用,可以让我们拥有更高的灵活度。而Python的 `unittest.mock`库为我们提供强大的支持。只要我们正确使用Mock服务,那么在任何情况下,无论是接口是否可用,都可以进行准确有效的测试。这样,就大大提高了自动化测试的稳定性和可靠性。
54 0
|
3月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
118 14
|
9月前
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
658 13
|
9月前
|
监控 数据可视化 搜索推荐
【Python篇】matplotlib超详细教程-由入门到精通(下篇)2
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
102 9

推荐镜像

更多