如何构建一个可扩展的测试自动化框架?

图片

以下为作者观点:

假设你是测试自动化方面的新手,想参与构建一个框架。在这种情况下,重要的是要了解框架所需的组件,以及它们是如何组合的。思考项目的具体需求和目标,以及可能遇到的困难和挑战。

假如你是一个测试架构师,问自己这些问题:

1.我们要实现的是什么?

2.对我们来说,自动化对QA团队伤害最大的是什么?

3.我们如何把所有的活动部件串起来并使其发挥作用?

4.我们如何将自动化扩展到其他领域?

5.我的框架能解决多少返工问题?

6.它能自己生成测试报告吗?

7.有多少比例的工作是无人值守的?

8.我们能不能只买一个现成的工具,然后开始使用它?

9.我们是否有足够的资源在内部建立?

一个自动化框架不仅仅是工具,它是人和流程的结合,如何从头开始建立一个框架,让团队更快地交付更好的软件,以下是一些建议。

一、测试自动化框架类型

一些常见的自动化测试框架类型包括:

线性测试框架

这是最基本的自动化测试框架类型,测试用例以线性顺序执行,一个接着一个。

线性测试框架对于测试具有相对简单或直接架构的应用程序很有用。然而,它们对于测试更复杂或相互关联的应用程序可能不那么有效,因为它们可能没有考虑到应用程序不同部分之间的相互作用和依赖关系。

模块化测试框架

在这种类型的框架中,应用程序被划分为较小的模块,每个模块都被单独测试,然后再将它们整合起来测试完整的应用程序。

使用模块化测试框架的好处是,它允许测试人员专注于软件中更小、更具体的区域,这可以使测试过程更加高效和有效。它还具有更大的灵活性,因为模块可以以任何顺序进行测试,并在不同的情况下重复使用。

然而,模块化测试框架在识别不同模块集成时出现的问题方面可能不那么有效,因为这些问题可能在测试整个系统时才会显现出来。因此,它经常与其他测试框架一起使用,以提供一个更全面的测试方法。

数据驱动的测试框架

在这种类型的框架中,测试用例通过从外部来源读取测试数据来执行,如Excel表或数据库。

下面是一个数据驱动测试框架的简化例子:

● 测试脚本包含测试用例的步骤,如打开一个网页,输入登录凭证,点击一个按钮。

● 测试数据存储在一个单独的文件或数据库中,包含将被用作测试脚本输入的登录凭证。

● 测试运行器是执行测试脚本的组件,并将测试数据传递给它。

● 测试脚本使用测试数据作为输入,执行测试案例中的步骤。测试脚本的输出与预期结果进行比较,以确定测试是通过还是失败,测试结果通常存储在一个单独的文件或数据库中。

使用数据驱动的测试框架允许创建一个单一的测试脚本,可以用不同的数据集多次执行,提高测试过程的效率和灵活性。

然而,数据驱动的测试框架的设置和维护可能更加复杂,因为它们需要为测试案例创建和维护一个单独的数据文件。它们在识别与数据输入和输出无关的问题方面也可能不那么有效,如UI或性能问题。

关键词驱动的测试框架

这种类型的框架使用预定义的关键词表来表示测试案例中要执行的操作。

在这种方法中,关键词必须与它们所对应的对象或用户界面元素相连。这通常是通过创建一个共享的对象库来完成的,该库将对象映射到它们所需的动作。值得注意的是,这些关键词随后可以在多个测试脚本中重复使用。

随着测试套件的增长,关键词库可能会变得很大,难以维护。重要的是要有一个系统来跟踪关键词,并确保它们是最新的。

混合测试框架

顾名思义,这种类型的框架结合了多个自动化测试框架的元素。

混合测试自动化框架结合了多种类型测试框架的特点和优势,可以提高质量保证测试的效率和成本效益。通过解决各种测试框架的局限性并利用其优势,混合框架为满足日益增长的测试自动化需求提供了一个全面的解决方案。

所以,在实际应用中,应该根据项目的性质、项目的规模、被测应用程序的类型以及测试团队的技能和经验来选择合适的框架。

二、哪种自动化框架最好?

很多企业改用混合框架已经有很长一段时间了,因为它包含了所有其他类型框架的优点。最受欢迎的混合框架:

● TestNG

● 行为驱动开发(BDD)

TestNG

TestNG是一个基于Java的测试框架,涵盖更广泛的测试类别:单元、功能、端到端、集成等。它是一个开源工具,可以用来编写和执行测试用例,它对团队环境下的测试特别有用,因为它提供了对平行测试执行和测试报告生成的支持。

要使用TestNG,首先需要在Java项目中安装它。这通常可以通过Maven或Gradle等构建工具来完成。一旦TestNG安装完成,就可以使用TestNG注解和API编写测试用例。这些测试用例可以通过运行TestNG测试运行器来执行,它将根据TestNG XML文件中指定的配置或通过命令行发现并运行测试。

下面是一个使用TestNG编写测试用例的简单例子:

导入 org.testng.annotations.Test.Action.Action.Action.Action。public class TestExample {@Test
public void testCase() {
// 测试代码在这里
}}

在这个例子中,@Test注解将方法标记为测试案例。当TestNG的测试运行器被执行时,它将发现并运行这些测试方法。

TestNG还提供了一些其他的注解,你可以用来控制你的测试用例的执行,比如@BeforeMethod和@AfterMethod,它们可以用来在每个测试方法运行之前和之后设置和拆解测试数据。

要运行TestNG测试,可以使用TestNG Eclipse插件,或者可以使用以下命令从命令行运行TestNG测试运行器。

java org.testng.TestNG testng.xml

testng.xml文件是一个XML配置文件,指定要运行的测试套件和任何其他配置选项。

BDD:

BDD(行为驱动开发)是一种软件开发方法,旨在通过鼓励整个开发过程中的协作和沟通,将开发人员、测试人员和非技术利益相关者聚集起来。

BDD框架是支持BDD过程的工具或工具集。这些框架通常提供编写和执行人类可读的验收测试的工具,这些工具从终端用户的角度定义被测系统的行为。

最流行的BDD框架之一是Cucumber,它是一种用Gherkin语言编写和执行验收测试的工具。Gherkin测试是用普通英语(或你选择的语言)编写的,使用简单的语法来描述测试场景的步骤。

下面是一个使用Cucumber编写的Gherkin测试的例子:

Feature: Login
As a user
I want to be able to log in to the application
So that I can access my accountScenario: Successful login
Given I am on the login page
When I enter my username and password
And I click the login button
Then I should be redirected to the home page

在这个例子中,"功能 "和 "场景 "两行定义了被测试的高层次行为,而随后的几行则用简单的英语描述了测试的各个步骤。

要使用Cucumber框架,需要在你的项目中安装它,并用Gherkin编写验收测试。还需要写代码来实现验收测试中定义的步骤,这可以用各种编程语言来完成。

一旦测试和步骤定义写好了,就可以通过运行Cucumber测试运行器来执行的验收测试。测试运行器将解析Gherkin测试,执行步骤定义,并报告结果。

三、建立团队内部测试自动化框架的步骤

定义目标

清楚地阐明你想用你的测试自动化框架实现什么。你想提高测试速度吗?增加测试的可靠性?还是提高团队的生产力?确定的目标能够帮你判断框架应该具有的特征和能力。

Tips:从了解应用程序的结构和环境开始,启动一个试点项目。选择几件你想自动化的事情,并在这个实验结束时设定目标。一旦实现了这些目标,就表明你的实验已经结束,你可以启动你的实际项目。记住,不要带着将所有东西都自动化的目标出发。

确定要使用的工具和技术

选择编程语言、测试运行器、测试管理工具,以及其他用来建立和维护测试自动化框架的工具。这些因素也要考虑,比如你的团队的技能和经验、要测试的软件的类型以及预算。

开发框架

为测试自动化框架创建一个高层次的设计,概述它的整体架构和各个组件之间的关系。这应该包括描述框架的不同层次(例如,用户界面、业务逻辑、数据访问),以及用于在这些层次之间沟通的接口。

创建可重复使用的元素,如辅助函数、实用类和常见的断言方法,可以在多个测试脚本中使用。

实施框架

为框架的组织制定一个详细的计划,包括其模块化设计、控制流程、设计模式和要实施的技术栈。使用你选择的工具和技术来建立测试自动化框架的各个组成部分。这可能涉及编写代码来实现框架的不同层,并创建测试脚本和测试数据。

记录和报告

在框架中实施一个日志系统,并记录信息,如测试执行的进度、测试结果和测试期间出现的任何错误信息。

在框架中集成一个报告系统,生成测试执行报告,概述测试结果,包括通过/失败的测试案例数量、测试执行时间和任何发生的错误等细节。

维护和更新框架

随着软件的发展和测试需求的变化,需要不断维护和更新测试自动化框架。

四、如何使测试自动化框架更有效

使用模块化方法

将测试分为较小的、独立的单元,可以组合成较大的测试,这将使测试更容易维护和更新。

评估每个服务的自动化测试的难易程度,分析每个服务的自动化的好处。在这个过程中要考虑诸如可维护性和自动化的限制等因素。

使用一种容易学习的编程语言

并且这种编程语言有大量的用户社区,如Python或Java。这会使你在需要时更容易找到帮助和资源,尽量使用开发人员也使用的语言。

使用专门为测试需求设计的框架

例如,如果你正在测试一个Web应用程序,你可能想使用像Selenium这样的测试自动化框架。

利用测试运行器或管理工具来执行测试

像PyTest、JUnit或TestNG这样的工具可以帮助更有效地运行测试,并对结果生成报告。

用版本控制系统来跟踪测试代码的变化

使用像Git这样的版本控制系统来跟踪测试代码的变化,这将更容易与他人合作,并在必要时回滚变化。

实施持续集成(CI)

在每次修改代码时自动运行测试,每晚为每个构建和回归设置烟雾测试。这将帮助你在问题变成更大的问题之前,及早发现和修复问题。

流行的CI工具包括:GitLab, CircleCI, Azure pipelines, TravisCI…

使用测试数据管理工具

使用测试数据管理工具来存储和管理测试数据,这将帮助你保持测试有条不紊,并确保使用的是最新的数据。

使用测试报告工具

对测试结果生成清晰、易懂的报告,比如:

● 查看异常堆栈痕迹

● 快速使用失败的断言和相关的输入/日志

● 对通过/失败/跳过的指标有良好的概述

● 应该有历史结果的比较

一些可用的报告框架包括Gradle报告、Cucumber报告、报告门户、Allure。

五、可扩展自动化框架的基础

什么应该是可扩展的测试自动化框架的基础:

定义范围

你要自动化网络应用程序或移动或API或数据库吗?确保自动化框架能够处理所有这些被测试的应用程序。

实现关键测试场景的自动化,它将是冗长的还是小的?

应用程序类型

它将是数据密集型的吗?是否需要执行多组数据的测试案例?

在这些参数上测验自己,确定你的测试范围和框架。

代码的灵活性

你的代码有多大的灵活性,使你可以添加/更新任何新的代码,以及我可以多容易地维护现有的代码。

持续集成

在今天的敏捷世界中,我们得到了(n)数量的构建和,自动化脚本要在每天的基础上运行。所以,看看你的框架与CI/CD管道的集成有多容易。

跨平台测试

为了通过自动化网络和移动应用程序来进行响应式测试,支持浏览器/操作系统/设备的组合,你的自动化框架应该能够与基于云的平台如Sauce Labs、Browser Stack集成。

测试管理

测试管理工具如JIRA和Test rail对于跟踪测试活动、分析结果等非常重要。因此,你的框架应该允许你自动更新测试结果,而无需人工支持/干预。

平行执行

一个自动化框架应该支持测试套件的并行执行,这样才能快速得到测试结果,快速的测试结果意味着快速发现缺陷。

本地化支持

今天,大多数应用程序都是通过本地化来为全球的用户提供无缝的体验,我们需要确保该框架能够处理不同的语言。

测试报告

自动化框架应该有从不同的测试报告工具提供测试报告的规定,以便为测试管理团队提供。

最后的想法

很多时候,当团队重组或有新成员加入时,就会有重写代码库和从头建立框架的冲动。

而很多时候,常见的操作就是从以前的公司复制粘贴代码库,而不了解当前团队或公司的情况。如果你发现自己在这样做,请暂停一下。

处理这个问题的最好方法是:背景驱动。这听起来很简单,你应该和你团队中的人交谈,让他们走过所有的流程、工具、版本、CRM和所有这些。

请大家记住:做最适合你的团队和项目的事情,同时牢记自动化和框架的基本原则。如果测试是达到了解软件质量的目的的手段,那么自动化只是一种手段。

 

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8802.html

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

相关文章

C++builder中的人工智能(11):双曲正切激活函数(ANN函数)?

在这篇文章中,我们将探讨双曲正切函数(tanh)是什么,以及如何在C中使用这个函数。让我们来回答这些问题。 在AI中激活函数意味着什么? 激活函数(phi()),也称为转移函数或阈值函数&a…

基于SSM+VUE宠物医院后台管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

二、SSM框架制作CRM系统案例

一、搭建框架 1、首先创建下面的目录结构 2、添加相关依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-inst…

【GPTs】Email Responder Pro:高效生成专业回复邮件

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Email Responder Pro主要功能适用场景优点缺点 &#x1f4af;小结 &#x1f4af;GPTs指令 Email Craft is a specialized assistant for cra…

知识课堂之域名系统中实现动态代理

怎么在域名系统中解析动态ip&#xff0c;这一直是一个需要解决的问题&#xff0c;人们对与网络的稳定连接与灵活运用已经成为生活和工作中不可或缺的一部分&#xff0c;因此这样的问题的解决迫在眉睫。 大家对于动态ip是什么&#xff0c;应该都有所了解了&#xff0c;所谓的动…

【Go语言】| 第1课:Golang安装+环境配置+Goland下载

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

程序猿要失业了,一行代码没写,1小时嘴搓了一个图片分割插件(好看又好用)

如题&#xff0c;一行代码没写&#xff0c;使用 AI 编程工具实现了一个浏览器图片分割插件的开发&#xff0c;先看效果吧&#xff08; Chrome商店上架审核中~ &#xff09; 支持点击&#xff0c;拖拽&#xff0c;直接粘贴&#xff0c;还支持预览&#xff0c;次数统计&#xff0…

基于SpringBoot+Vue实现新零售商城系统

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

【湖南】《湖南省省直单位政府投资信息化项目预算编制与财政评审工作指南(试行)》湘财办〔2024〕10号-省市费用标准解读系列06

2024年4月12日&#xff0c;湖南省财政厅发布实施《湖南省省直单位政府投资信息化项目预算编制与财政评审工作指南&#xff08;试行&#xff09;》湘财办〔2024〕10号&#xff08;以下简称“10号文”&#xff09;&#xff0c;该文件旨在指导提高湖南省直单位政府投资信息化项目预…

攻防靶场(28):通过SNMP进行信息收集 JOY

目录 1.侦查 1.1 获取目标网络信息&#xff1a;IP地址 1.2 主动扫描&#xff1a;扫描IP地址块 1.3 收集受害者主机信息&#xff1a;软件 2. 数据窃取 2.1 通过备用协议窃取&#xff1a;通过未加密的非C2协议窃取 2.2 通过备用协议窃取&#xff1a;通过未加密的非C2协议窃取 3. …

DCDC-LLC谐振电路Q值与系统增益变化相反的原因

1.谐振电路的Q值定义 LLC电路的Q值定义: 它表述的是整个电路的能量存储与耗散的关系。损耗越小&#xff0c;Q值越大&#xff0c;损耗越大&#xff0c;Q值越小。 Q的另一种写法是&#xff1a; 这个公式来由&#xff0c;因为谐振频率&#xff1a; 所以&#xff1a; 所以&#…

【JAVA毕业设计】基于Vue和SpringBoot的图书馆管理系统

本文项目编号 T 044 &#xff0c;文末自助获取源码 \color{red}{T044&#xff0c;文末自助获取源码} T044&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

VirtualBox7.0的“网络地址转换(NAT)“ 笔记2400727

VirtualBox7.0的"网络地址转换(NAT)" 每台虚拟机的默认ip都是 10.0.2.15 虚拟机之间不能互通虚拟机能通过主机各ip访问主机(延时高,不稳定), 主机不能直接访问虚拟机, 可以通过端口转发(端口映射)虚拟机能访问宿主机的局域网的其它机器,虚拟机能访问网络, 但不能反过…

PyQt5 详细安装与配置教程及使用

文章目录 Part1&#xff1a;安装 PyQt5Part2&#xff1a;配置 PyQt5 的依赖工具 QtDesigner 和 PyUICPart3&#xff1a;使用QtDesigner设计界面Part4&#xff1a;使用PyUIC将设计好的界面转换为.py文件Part5&#xff1a;通过代码显示ui界面 Part1&#xff1a;安装 PyQt5 需要安…

10.31.2024刷华为OD C题型

文章目录 HJ26HJ27语法知识记录 10.24.2024刷华为OD C题型&#xff08;四) - HJ26 HJ27 def get_dict(str1: str):dic_0 {}for ch in str1:if ch not in dic_0:dic_0[ch] 1else:dic_0[ch] 1return dic_0temp input().split() n int(temp[0]) list [] for i in range(n):l…

基于springboot+mybatis美术馆预约管理系统设计和实现以及文档报告

基于springbootmybatis美术馆预约管理系统设计和实现以及文档报告 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各…

气象监测软件的程序设计

老师留了个作业&#xff0c;感觉挺有意思&#xff0c;记录一下 文章目录 气象监测软件的程序设计项目指导书&#xff08;一&#xff09;基本信息&#xff08;二&#xff09;项目目标&#xff08;三&#xff09;任务描述&#xff08;四&#xff09;指导内容任务 1&#xff1a;根…

漫谈MCU优化:从硬件设计优化到可靠性挑战

1.关于MCU 微控制器&#xff08;Microcontroller Unit, MCU&#xff09;&#xff0c;是以微处理器为基础&#xff0c;加上存储器以及计数器、I2C、UART等外设模块与接口电路整合的单芯片微型计算机。 ▲MCU实物图 MCU拥有性能好、可编程、灵活度高、功耗低等优点&#xff0c;…

“动态波动”,背离信号与主力动向的完美结合 源码

使用技巧 精准捕捉买卖信号 这款公式它不仅能够精准捕捉买入信号&#xff0c;还能敏锐识别卖出时机。尤其在市场波动不定的震荡行情中&#xff0c;动态波动展现出了其非凡的价值。 多维信号分析 如图所示&#xff0c;动态波动公式全面覆盖了“买”、“卖”、“洗盘”、“阻…