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分析结果


相关文章
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
270 1
|
4月前
|
编解码 数据安全/隐私保护 Python
抖音批量发布视频工具,自动上传视频作品笔记,python发布软件
这个抖音批量发布工具包含三个主要模块:主上传程序、配置文件和视频预处理工具。主程序
|
3月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
199 18
|
3月前
|
安全 测试技术 API
Python 单元测试详解
单元测试是Python开发中不可或缺的环节,能确保代码按预期运行、发现Bug、提升代码质量并支持安全重构。本文从基础概念讲起,逐步介绍Python单元测试的实践方法,涵盖unittest框架、pytest框架、断言使用、Mock技巧及测试覆盖率分析,助你全面掌握单元测试技能。
203 0
|
4月前
|
IDE 测试技术 API
python调试与测试
python调试与测试
|
4月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
4月前
|
API 数据安全/隐私保护 Python
小红书批量发布协议, 抖音自动批量发布软件脚本,笔记作品视频自动发布工具【python】
这个工具框架包含了小红书和抖音的批量发布功能,支持图片和视频处理、定时发布等功能
|
4月前
|
Web App开发 数据安全/隐私保护 Python
抖音快手小红书哔哩哔哩,批量发布作品笔记视频工具,自动发布作品上传笔记视频【python】
这个工具实现了四大平台的视频批量上传功能,包含完整的异常处理和日志记录。使用时需要配置
|
4月前
|
存储 JSON API
小红书批量发布笔记工具,小红书批量上传软件,python框架分享
这个框架包含了配置文件、工具函数、API封装和主程序四个模块。使用时需要先配置账号信息,
|
5月前
|
测试技术 Python
Python测试报告生成:整合错误截图,重复用例执行策略,调整测试顺序及多断言机制。
如何组织这一切呢?你可以写一本名为“Python测试之道”的动作指南手册,或者创建一个包含测试策略、测试顺序、多断言机制的脚本库。只要你的测试剧本编写得足够独到,你的框架就会像一位执行任务的超级英雄,将任何潜伏于代码深处的错误无情地揪出来展现在光天化日之下。这些整理好的测试结果,不仅有利于团队协作,更像冒险故事中的精彩篇章,带给读者无尽的探索乐趣和深刻的思考。
141 10

推荐镜像

更多