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


相关文章
|
1月前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
3天前
|
机器学习/深度学习 数据采集 数据可视化
Python/Anaconda双方案加持!Jupyter Notebook全平台下载教程来袭
Jupyter Notebook 是一款交互式编程与数据科学分析工具,支持40多种编程语言,广泛应用于机器学习、数据清洗和学术研究。其核心优势包括实时执行代码片段、支持Markdown文档与LaTeX公式混排,并可导出HTML/PDF/幻灯片等格式。本文详细介绍了Jupyter Notebook的软件定位、特性、安装方案(Anaconda集成环境与原生Python+PIP安装)、首次运行配置及常见问题解决方案,帮助用户快速上手并高效使用该工具。
|
9天前
|
SQL 关系型数据库 MySQL
milvus-use教程 python
本项目参考vanna项目,获取数据库元数据和问题SQL对,存入Milvus向量数据库,并进行相似性检索。采用m3e-large嵌入模型,通过DatabaseManager类实现数据库连接持久化,MilvusVectorStore类封装了Milvus操作方法,如创建集合、添加数据和查询。项目提供init_collections、delete_collections等文件用于初始化、删除和管理集合。所用Milvus版本较新,API与vanna项目不兼容。 [项目地址](https://gitee.com/alpbeta/milvus-use)
86 9
|
9天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
8天前
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
|
15天前
|
大数据 开发者 C++
Python语法糖详解教程
《Python语法糖详解教程》介绍了编程语言中的“语法糖”,即通过特殊语法形式简化代码,使代码更简洁、易读和高效。文章详细解析了列表推导式、字典推导式、元组解包、条件表达式、with语句和装饰器等核心语法糖,并提供了具体示例和最佳实践指南。通过这些技巧,开发者可以在保持底层功能不变的前提下,显著提升开发效率和代码质量。
37 8
|
16天前
|
存储 数据可视化 测试技术
一个测试工程师的实战笔记:我是如何在Postman和Apipost之间做出选择的?
优秀的API测试工具应该具备: 分层设计:既有可视化操作,也开放代码层深度定制 场景感知:自动识别加密需求推荐处理方案 协议包容:不强迫开发者为了不同协议切换工具 数据主权:允许自主选择数据存储位置
52 7
|
2月前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
410 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
17天前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
2月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。

热门文章

最新文章