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

news2024/11/24 17:53:03

在这里插入图片描述

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_function

def 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_function

def 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.coloradmin.cn/o/616800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑客学习-xss漏洞总结

1、什么是xss 先来看案例 在一个输入框中,输入js代码,存放alter()其弹窗,结果可以看到,代码成功执行。这个就是xss漏洞 XSS攻击全称跨站脚本攻击,是一种在Web应用中常见的安全漏洞,它允许用户将恶意代码植入到Web页面…

分布式事务 2PC

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 文章目录 一、简介二、2PC 的运行流程三、2PC 一定能保证数据的一致性吗?四、2PC 的…

软件测试——未来软件测试的5个主要趋势

全球各地的企业每天都在发展变化着,以应对市场挑战,满足日益成熟的客户需求。即使是正在进行的技术进步也会使软件测试专家在实践的过程中更加专注和精确。 2021年给软件测试领域带来了新的技术解决方案,以及质量保证和软件测试的实现。与此同…

Springcloud--异步通信RabbitMq快速入门

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…

YOLOv5改进系列(8)——添加SOCA注意力机制

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

动态查找表

动态查找表 1.二叉排序树1.1. 定义1.2. 查找过程1.3. 插入过程1.4. 创建二叉排序树1.5. 删除操作(1)被移除的结点是叶子结点(2)被移除的结点只有左子树或者只有右子树;(3)被移除的结点既有左子树…

两张图理解MR与XR

我们知道,AR是在现实世界上叠加虚拟信息和图像,VR是完全模拟的虚拟世界,那么对于MR和XR的概念会稍显复杂,本文试图通过2张图来理解它们,如有不对,祈请纠正。 MR 关于MR,先来看看下面第一张图。 …

vue 3 第三十四章:nextTick

nextTick是Vue3中的一个非常有用的函数&#xff0c;它可以在下一次DOM更新循环结束后执行回调函数。这个函数可以用来解决一些异步更新视图的问题&#xff0c;例如在修改数据后立即获取更新后的DOM节点。以下是一个简单的示例&#xff1a; <template><div><p&g…

华硕无畏灵耀破晓原装Windows10/11系统

第一步&#xff1a;下载原装系统文件 第二步&#xff1a;灵耀/无畏/破晓需要自备16g空u盘安装 第三步&#xff1a;创建u盘分区&#xff0c;第一个分区格式为FAT32(存放TLK引导文件)&#xff0c;第二个分区大小为NTFS&#xff08;存放底包&#xff1a;HDI.OFS.SWP.EDN.KIT&…

Unity Package Manager 使用

项目组开发的工具可以托管到远程仓库里&#xff0c;别的项目 也可以使用。 在Unity工程Assets 下 创建自己的插件目录 运行时 代码 和 编辑器代码 &#xff0c;创建 对应的 程序集&#xff0c;以及package.json 文件 package.json内容&#xff1a;可参考官方的&#xff0c;n…

测试人何去何从?2023年测试工程师突破自我,卷出测试圈...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 2023年测试行业现…

被上司问“测得怎么样了?”我心里慌到不行

目录 前言 你测的怎么样了&#xff1f; 这样回答 初入测试职场 结尾&#xff1a; 前言 说实话&#xff0c;我真想从上面去掉"似乎"两个字&#xff0c;软件测试人&#xff0c;就是苦逼&#xff01;有的人曾抱怨过开发很糟糕&#xff0c;但我们没办法要求开发在会写代…

360浏览器如何屏蔽某搜索网站的热搜

1.安装油猴&#xff08;Tampermonkey插件&#xff09; 下载油猴&#xff1a;官网油猴tampermonkey官网_油猴脚本手机版油猴插件下载 安装&#xff1a;360浏览器安装可以参考这边文章。 地址&#xff1a;http://www.xz7.com/article/86938.html 其实就是下载crx文件后&#xff…

linuxOPS基础_linux沾滞位T(sticky bit)

命令&#xff1a;chmod 语法&#xff1a;# chmod [选项] 文件夹 作用&#xff1a;只允许文件的创建者和root用户删除文件 常用选项&#xff1a;ot 添加粘滞位 ​ o-t 去掉粘滞位 ​ 用法&#xff1a;chmod ot 目录名 示例代码&#xff1a; #chmod ot 含义&#xff1a;给…

复习之linux系统中的文件传输

一、实验环境设定 本节实验需要两台虚拟机&#xff0c;ip与主机在同一网段&#xff0c;可实现ssh连接&#xff01; 1.创建虚拟机westosb 因为之前实验已存在一台虚拟机westosa,因此还需创建一台虚拟机westosb! 使用# westos-vmctl create westosb 创建虚拟机出错&#…

一个软件测试工程师的岗位职责

其实软件测试入门并不难 我们自己生活中就有接触过很多跟软件测试相关的操作。而要是从事软件测试的工作&#xff0c;就是需要对软件进行更加系统的测试&#xff0c;并把你所测试的东西进行归纳总结&#xff0c;对软件整个使用和运行情况做一个系统、规范的报告。 软件测试的学…

初识哈希表

哈希表 1.引入2.哈希思想3.哈希技术的三个关键问题3.1 哈希表容量的设计3.2 哈希技术关键之二&#xff1a;哈希函数哈希函数构造方法哈希函数示例&#xff1a;线性函数哈希函数示例&#xff1a;除留余数法 3.3 哈希技术关键之三:解决冲突策略开放定址法开放定址法——线性探测法…

路径规划算法:基于动物迁徙优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于动物迁徙优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于动物迁徙优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

C#实例:多功能Windows窗体应用程序Helloworld_WinForm

有了创建一个Windows窗体应用程序的经验&#xff0c;就可以开始尝试运用更多的控件实现更多丰富的功能界面。以下分享我基于项目Helloworld_WinForm使用常用C#Windows窗体控件实现一些小功能。 每一节标题为所用到的控件&#xff0c;全文以实际制作过程为序编制。 目录 WinFor…

Explorer.exe系统错误,电脑重启后刚开始一段时间正常,过一会桌面任务栏就卡死,可以打开任务管理器

环境: 联想E14 Win10专业版 问题描述: 1.重启系统后刚开始一段时间点击任务栏正常,过一会桌面任务栏就卡死,可以打开任务管理器,任务管理器查看shell infrastructure占用cpu比较多,网上说是微软图片查看软件导致,重置改了默认照片查看器,恢复这个应该不是主要原因 …