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


相关文章
|
3月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
121 61
|
3月前
|
安全 测试技术 网络安全
如何在Python Web开发中进行安全测试?
如何在Python Web开发中进行安全测试?
|
2月前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
325 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
3月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
118 61
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
188 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
2月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
3月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
172 3
|
3月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
97 1
|
3月前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!

热门文章

最新文章