有几种测试可以在任何软件上进行。主要有验收测试(或功能测试)和单元测试,这
些是大多数人在讨论软件测试话题时会想到的测试。但是有一些其他类型的测试,你可以
在你的项目中使用。我们将在本节稍后的部分简单地讨论其中的一些。
验收测试
验收测试(acceptance tests)专注于一个功能,并像黑盒一样处理软件。它只是确保软
件真的做了它应该做的,使用与用户相同的媒体并控制输出。这些测试通常是在开发周期
中写出来的,以验证应用程序是否满足需求。它们通常作为软件的检查清单运行。通常,
这些测试不是通过 TDD 完成的,而是由项目经理、QA 工作人员甚至客户构建的。在这种
情况下,他们通常被称为用户验收测试。
不过,它们使用 TDD 原则。可以在开发功能之前提供测试。开发人员得到一堆验收测
试,通常由功能规范制定,他们的工作是确保代码通过所有的测试。
用于编写这些测试的工具取决于软件提供的用户界面。Python 开发人员使用的一些流行工具有:
应用程序类型
工具
Web 应用
Selenium(用于使用 JavaScirpt 的 WEB UI)
Web 应用
zope.testbrowser(不测试 JS)
WSGI 应用
paste.test.fixture(不测试 JS)
Gnome 桌面应用
dogtail
Win32 桌面应用
pywinauto
单元测试
单元测试(unit tests)是完全适合测试驱动开发的底层测试。顾名思义,它们专注于测试
软件单元。软件单元可以被理解为应用程序代码的最小可测试部分。根据应用程序,软件单元
的大小可能从整个模块到单个方法或函数而不同,但通常单元测试是针对可能的最小代码片段
而编写。单元测试通常将被测单元(模块、类、功能等)与应用程序的其余部分和其他单元隔
离开来。当需要外部依赖时,例如 Web API 或数据库,它们通常被仿真对象或模拟对象所替换。
功能测试
功能测试(functional tests)专注于整个特性和功能,而不是小代码单元。它们的目的
类似于验收测试。主要区别是功能测试不一定需要使用与用户相同的接口。例如,当测试
Web 应用程序时,一些用户交互(或其后果)可以通过合成 HTTP 请求或直接访问数据库
来模拟,而不是模拟真实的页面加载和鼠标单击。
相比使用用户验收测试中使用的工具进行测试,这种方法通常更容易且更快。有限功
能测试的缺点是,它们往往不能充分覆盖应用程序,这些应用程序通常有着不同的抽象层
以及不同的组件。关注这些会合点的测试通常称为集成测试。
集成测试
集成测试(integration tests)比单元测试代表更高的测试级别。它们测试代码的绝大部分,并专注于许多应用程序层或者组件相互交互的情况。集成测试的形式和范围因项目的
架构和复杂性而异。例如,在小型并且整体式的项目中,这可以像运行更复杂的功能测试
一样简单,并允许它们与真正的后台服务(数据库、缓存等)交互,而不是模拟或仿真它
们。对于从多个服务构建的复杂场景或产品,真正的集成测试可能非常广泛,甚至需要在
反映生产的大型分布式环境中运行整个项目。
集成测试通常与功能测试非常相似,它们之间的边界非常模糊。很常见的是,集成测
试也在逻辑上测试单独的功能和特性。
负载和性能测试
负载测试和性能测试(Load and performance testing)提供了关于代码效率而不是其正
确性的客观信息。负载测试和性能测试的术语可以互换使用,但实际上第一个是指性能的
有限方面。负载测试的重点是测量代码在某些人为需求(负载)下的行为。这是一种非常
流行的测试 Web 应用程序的方式,其中负载被理解为来自真实用户或程序化客户端的 Web
流量。重要的是要注意,负载测试往往覆盖整个应用程序的请求,因此非常类似于集成和
功能测试。确保被测试的应用程序的组件完全通过验证,可以正常工作是很重要的。性能
测试通常是指测量代码性能的所有测试,甚至可以针对很小的代码单元。因此,负载测试
只是性能测试的一个特定子类型。
它们是特殊类型的测试,因为它们不提供二进制结果(失败/成功),而只提供一些性
能质量测量。这意味着,需要对单个结果进行解释,且/或与不同测试运行的结果进行比较。
在某些情况下,项目需求可能会对代码设置一些困难的时间或资源限制,但这并不会改变
这些类型的测试方法中始终存在某些任意解释的事实。
负载性能测试是开发需要满足一些服务级别协议的任何软件的一个很好的工具,因为
它有助于降低危及关键代码路径性能的风险。无论如何,它不应该被过度使用。
代码质量测试
代码质量没有一个明确说明代码的好坏的衡量标准。不幸的是,代码质量的抽象概念
不能用数字的形式来衡量和表示。但是,我们可以测量已知的与代码质量高度相关的软件
的各种指标。举几个例子,如下所示。
● 代码风格违例的数量。
● 文档数量。
● 复杂性指标,例如 McCabe 的圈复杂度。
● 静态代码分析警告的数量。
许多项目在其持续集成的工作流程中使用代码质量测试。好的并且流行的方法是至少测试基本指标(静态代码分析和代码风格违例),不允许将任何拉低指标的代码合并到主干。
Python 高手编程系列三千三百八十:什么样的测试
张小明
前端开发工程师
2022年CSP-X复赛真题及题解(T2:移动棋子)
2022年CSP-X复赛真题及题解(T2:移动棋子) 题目描述 一维的棋盘上有无限多个格子,每个格子都有一个编号,最中间的格子编号为 000,000 号格子向右依次编号为 1,2,3,⋯1,2,3,\cdots1,2,3,⋯,向左…
第一篇:SpringAI 入门 01|框架诞生背景、设计理念,Java 为什么需要 SpringAI
导读:Python 依靠 LangChain、LlamaIndex 快速落地大模型应用,Java Spring 生态长期缺少统一规范的 AI 开发框架,Spring AI 应运而生,本篇从官方 Overview 拆解框架定位与设计思想,建立全局认知。一、Spring AI 项目由…
基于PLC控制的可穿戴式花椒采摘设备设计23(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
基于PLC控制的可穿戴式花椒采摘设备设计PLC程序三维模型说明书 基于PLC控制的可穿戴式花椒采摘设备设计23(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
手把手教你学Simulink——高升压比 SEPIC 变换器在光伏系统中的建模与仿真
目录 手把手教你学Simulink——高升压比 SEPIC 变换器在光伏系统中的建模与仿真 一、为什么光伏要用 SEPIC(Single‑Ended Primary Inductor Converter) 二、SEPIC 原理(简版) 2.1 拓扑 三、关键参数 四、Simulink 建模(手把手) 4.1 Step 1️⃣ —— PV 源(简化)…
用C++搞定GESP四级图像压缩题:从读不懂题到AC的保姆级思路拆解
用C搞定GESP四级图像压缩题:从读不懂题到AC的保姆级思路拆解当你第一次看到GESP四级考试中的"图像压缩"题目时,是否感到一头雾水?那些十六进制字符串、灰阶转换规则和复杂的输出要求,确实容易让人望而生畏。但别担心&am…
MAA明日方舟助手:解放双手的全自动游戏管家
MAA明日方舟助手:解放双手的全自动游戏管家 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcode.com/G…