【Python TDD和BDD】零基础也能轻松掌握的学习路线与参考资料

news/2024/12/4 10:54:29/

在这里插入图片描述

Python TDD和BDD的学习路线

TDD(测试驱动开发)和BDD(行为驱动开发)在软件开发中的作用越来越受到重视。TDD通过先写测试代码,再编写生产代码的方式,使得开发者可以在开发过程中确保代码质量和正确性,并在进行重构时减少错误。BDD则强调通过定义并实现应用程序的期望行为,来达到软件开发可理解性和可维护性的目标。此外,BDD还强调通过通用语言即可理解和使用,更利于协作开发和文档编写。因此,学习和熟练实践TDD和BDD技术对于Python工程师非常重要。

以下是Python TDD和BDD的学习路线。

TDD 学习路线

  1. 基本概念和原则

学习TDD最基本的概念和原则。主要包括:测试,代码编写和重构,单元测试,自动化测试,持续集成。这一步需要阅读如下推荐书目:

《测试驱动开发(TDD):通过python改善代码设计》(作者Kent Beck)
《python单元测试自动化实战》(作者Gary P. Pisano)
《Pytest实战指南》(作者Krishna Kumar)

  1. 编写测试代码

在学习TDD的过程中,首先要学习的是编写测试代码的技巧和规范。可以使用Python内置的unittest,也可以选择其他的测试框架,如pytest。该步骤的推荐资料如下:

《Python 测试之道》(作者Brian Okken)
《Pytest源码详解》(作者Micheal Tom-Wing)
《unittest与pytest实例详解》(作者Aliaxey Krupin)

  1. 编写生产代码

学习如何编写符合TDD原则和规范的生产代码。该步骤的推荐资料如下:

《Fluent Python》(作者Luciano Ramalho)
《Effective Python》(作者Brett Slatkin)
《Learning Python design patterns》(作者Gennadiy Zlobin)

  1. 重构

TDD强调经常性的代码重构,保持代码清晰、简洁和可维护性。在一定程度上,重构也是一项技能。可以参考下面的推荐资料:

《重构:改善既有代码的设计》(作者Martin Fowler)
《Refactoring for Software Design Smells》(作者Emitza Guzman)

  1. 自动化测试

编写自动化测试用例是TDD的关键环节,也是保证测试覆盖率和正确性的重要手段。可以学习Pytest等框架相关的自动化测试技能,该步骤的推荐资料如下:

《Python函数编程及测试技巧经验》(作者Mandar Mukund)
《Python测试实例精讲》(作者Jason Diamond)

  1. 持续集成

持续集成是一项重要的技术,可以自动构建、测试和部署应用程序,从而帮助确保代码质量和正确性。可以学习如何使用各种工具实现持续集成,如Gitlab、Jenkins和Travis CI等。该步骤的推荐资料如下:

《Continuous Delivery and DevOps: A Quickstart guide》(作者Paul Swartout)
《Jenkins Beginner’s Guide》(作者Alok Rawat)

BDD 学习路线

  1. 基本概念和原则

学习BDD最基本的概念和原则。主要包括:自然语言测试,应用程序行为和需求,场景和用户故事。阅读推荐书目:

《BDD实战-使用自然语言编写更好的软件》(作者John Ferguson Smart)
《Python TDD——mock库实例实战教程》(作者黄锐妮)

  1. 编写行为测试用例

BDD的核心是编写应用程序的行为测试用例,对应程序的功能测试。可以学习如何编写行为测试用例,并且通过使用Python的BDD框架,如behave和lettuce来实现。该步骤的推荐资料如下:

《Behave与Letture自动化测试实战》(作者Hamed S. B.)
《Python BDD实例讲解》(作者Christopher Brown)

  1. 应用程序行为和需求

在学习BDD的过程中,需要注意的是应用程序的需求和行为。因此,在学习完测试框架和测试用例的编写之后,需要深入理解业务需求和应用程序的行为。该步骤的推荐资料如下:

《User Story Mapping: Discover the Whole Story, Build the Right Product》(作者Jeff Patton)
《Impact Mapping: Making a Big Impact with Software Products and Projects》(作者Gojko Adzic)

  1. 场景和用户故事

场景和用户故事是BDD过程中的核心,帮助编写更加贴合用户需求的测试用例。可以从下面的推荐资料获取更多信息:

《ATDD By Example》(作者Markus Gärtner)
《Specification by Example: How Successful Teams Deliver the Right Software》(作者Gojko Adzic)

  1. 自动化测试和持续集成

可以通过使用自动化测试和持续集成工具来改进BDD过程。可以详细了解如何在BDD中使用这些工具,并从下面的推荐资料中获取更多信息:

《The Cucumber for Java Book:Behaviour-Driven Development for Testers and Developers》(作者Seb Rose、Matt Wynne、Aslak Hellesoy)
《BDD in Action: Behavior-driven development for the whole software lifecycle》(作者John Ferguson Smart)

练习和优秀实践

学习TDD和BDD最好的方式是通过实践。这里提供一些优秀的实践:

  1. BDD场景实践

使用Python的lettuce框架,编写下面这个场景的测试用例如下:

场景:Markdown转换器
假如你需要将一个Markdown文件转换成HTML
当你打开这个Markdown文件,将其转换成HTML
那么你会看到一些基本的HTML标签

# -*- coding: utf-8 -*-
from lettuce import step, world
from markdown import markdown@step('假如我有一个markdown文件"(.*?)"')
def have_a_markdown(step, filename):world.filename = filename@step('当我将markdown文件转换成HTML')
def convert_markdown_to_html(step):with open(world.filename, 'r') as f:world.html = markdown(f.read())@step('那么我应该能够看到我们期望的HTML内容"(.*?)"')
def see_expected_html(step, expected_html):assert world.html == expected_html

通过这个示例,我们可以看到使用BDD的测试方式比较直观和易于理解。

  1. TDD使用Pytest实践

使用Pytest框架,编写下面的测试用例如下:

import pytest
from my_module import my_functiondef test_my_function():input_data = 'test input'expected_output = 'test output'result = my_function(input_data)assert result == expected_output

该测试用例包括输入数据、期望输出和函数调用。由于Pytest具有很高的扩展性和灵活性,因此可以使用fixture和参数化方式来编写更加复杂的测试用例。

  1. TDD模拟实践

TDD也依赖于模拟和测试双方的独立性。下面是一个使用mock模块的测试用例示例:

import pytest
from mock import Mock
from my_module import my_functiondef test_my_function(mock_object):mock_object.return_value = '1'result = my_function()assert result == '1'

该示例测试了my_function函数调用时的所有参数。在这个实践中,我们可以模拟一些组件作为要测试的组件的依赖项。

参考资料

《Python测试方法论以及应用》(作者 许见龙、张亚勇、张亚)
《Python单元测试之路》(作者 陈浩丞)
《Python测试与调试:详解实用技巧》(作者 阮小丑)

总结

Python TDD和BDD是软件开发过程中的重要技术和方法,本文介绍了学习这些技术的路线和方法。在学习过程中,建议通过以上推荐教材和实践来掌握这些技术和方法。学习这些技术和方法不能只停留在理论层面,应当在实践中运用它们,这样才能更好的理解和掌握这些技术。


http://www.ppmy.cn/news/247262.html

相关文章

14.Linux压缩解压文件

在 Linux 中,压缩和解压文件是常见的任务之一。下面介绍几个主要的压缩和解压命令: 压缩文件 tar 命令 tar 命令是在 Linux 中最常用的压缩工具之一,它可以将多个文件或目录打包成一个大文件,并进行压缩处理。 将一个目录打包成 …

AGP内存

AGP 是 accelerate graphical Port 的缩写 是一种点对点的总线 来解决pci总线传输瓶颈的问题的 它把 内存和显卡连起来 加快数据传输速度(不走pci了) 还可以把内存划成显存 这样显卡访问 就很快了 估计这块内存就叫AGP内存 转载于:https://www.cnblogs…

AGP是什么接口

AGP 即为加速图形端口,是用于高速视频输出的点对点通道。此端口用于将显卡连接到计算机主板。AGP 的主要目的是加速高清视频的 3D 图形输出。与 PCI 相比,AGP 提供更快的连接和吞吐量。AGP 主要用于 3D 图形,高清游戏和工程/建筑图形。 早些时…

微型计算机agp是什么意思,AGP是什么意思

AGP (Accelerated Graphic Ports 或者 Advanced Graphic Ports) 是当前已经被淘汰的图形系统接口。这项技术始于十四年以前,当时的3D图形加速技术开始流行并且迅速普及,为了使系统和图形加速卡之间的数据传输获得比PCI总线更高的带宽,AGP便应…

如何处理计算机显卡故障,电脑显卡常见故障及解决方案

显卡说白了就是用来处理显示画面,其选择的显卡越好,画面就越流畅,画面质量也就越佳。电脑技术员在遇到显卡种种问题而不知道如何解决,今天华海电脑网介绍下显卡常见故障及解决方案。更多了解显卡可以点击阅读:显卡的作…

linux 设置显卡命令,Linux命令行下如何配置nVIDIA显卡

在图形芯片领域,nVidia是一个后来者,它的历史仅相当于ATi的一半。1993年初,NVIDIA 由 Jen-Hsun Huang,,Chris Malachowsky和 Curtis Priem 三人共同创办,但是,nVidia又一度是图形处理芯片领域的最强者&…

java编程题

1.点类 【问题描述】 MyPoint类表示二维坐标中的一个点,具有两个double类型属性: 横坐标纵坐标并具有一个构造方法(与类同名的方法)和两个普通方法: 1 构造方法:接收两个double型数据作为参数,分别设定为横坐标和纵…