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

图片

以下为作者观点:

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

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

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.mzph.cn/pingmian/59693.shtml

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

相关文章

实战:索引的命中机制

在 SQL Server 中,查询是否能命中索引(即是否能使用 Index Seek)取决于多个因素,包括索引的结构、查询条件的排列、和数据库优化器的策略。以下是一些常见的命中索引和不能命中索引的情况,及其详细解释: 一、命中索引的情况 1. 前导列匹配(典型的命中索引场景) 索引结…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术,对进程进行封装隔离,一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行,镜像是容器的只读模板,容器是模板的一个实例。镜像是分层结…

C++【string类,模拟实现string类】

🌟个人主页:落叶 🌟当前专栏: C专栏 目录 为什么学习string类 C语言中的字符串 标准库中的string类 auto和范围for auto关键字 迭代器 范围for string类的常用接口说明和使用 1. string类对象的常见构造 2.string类对象的容量操作 3…

A019基于SpringBoot的校园闲置物品交易系统

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

【赵渝强老师】Redis的RDB数据持久化

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出会造成服务器中的数据库状态也会消失。所以 Redis 提供了数据持久化功能。Redis支持两种方式的持久化,一种是RDB方式;另一种是AOF(ap…

Excel:vba实现批量插入图片批注

实现的效果:实现的代码如下: Sub InsertImageNamesAndPictures()Dim PicPath As StringDim PicName As StringDim PicFullPath As StringDim RowNum As IntegerDim Name As StringDim Comment As CommentDim folder As FileDialog 定义文件选择对话框 清…

tomcat启动失败和缓存清理办法

tomcat只在学校接触过并且是在window xp和win7的电脑上配置过(中途升级过电脑系统),只记得在windows系统上可以将其设置成服务管理。但我已毕业10多年了,学的知识早就不知道丢哪里了。这次为了修改一个07,08年的项目&a…

ReactPress:深入解析技术方案设计与源码

ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议,欢迎一起共建,感谢Star。 ReactPress是一个基于React框架开发的开源发布平台,它不仅仅是一个简单的博客系统,更是一个功能全…

A20红色革命文物征集管理系统

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

先锋精科委身芯片“圈子” 引致交易不公允和信披不透明

不要违背圈子的规则,但也不要盲从圈子的规则。 ——语出马云。 引 言 “圈子”是钥匙,也是一把锁。 走进“圈子”,将获得包括资金、订单、货源、技术等企业发展所需的资源,能够助推一家企业乃至整个行业的跨越式发展&#…

MinerU容器构建教程

一、介绍 MinerU作为一款智能数据提取工具,其核心功能之一是处理PDF文档和网页内容,将其中的文本、图像、表格、公式等信息提取出来,并转换为易于阅读和编辑的格式(如Markdown)。在这个过程中,MinerU需要利…

【论文复现】基于深度学习的手势识别算法

本文所涉及所有资源均在这里可获取。 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐、摄影的一位博主。 📗本文收录于论文复现系列,大家有兴趣的可以看一看…

使用QtWebEngine的Mac应用如何发布App Store

前言 因为QtWebEngine时第三方包,苹果并不直接支持进行App Store上签名和发布,所以构建和发布一个基于使用QtWebEngine的应用程序并不容易,这里我们对Qt 5.8稍微做一些修改,以便让我们的基于QtWeb引擎的应用程序并让签名能够得到苹果的许可。 QtWebEngine提供了C++和Qml的…

智能新纪元:人工智能技术的社会影响与伦理挑战-亿发

在数字化时代,人工智能(AI)正以其不可阻挡之势,深刻改变着我们的生产、生活和学习方式。它不仅是一项技术革命,更是推动社会进步的重要力量。本文将探讨人工智能如何重塑未来,以及它所带来的深远影响。 AI…

云平台虚拟机运维笔记整理,使用libvirt创建和管理虚拟机,以及开启虚拟机嵌套,虚拟磁盘扩容,物理磁盘扩容等等

云平台虚拟机运维笔记整理,使用libvirt创建和管理虚拟机,以及开启虚拟机嵌套,虚拟磁盘扩容,物理磁盘扩容等等。 掌握和使用qemu和libvirt,分别使用它们创建一个cirros虚拟机,并配置好网络。 宿主机node0的系统为ubuntu16,IP为192.168.56.200。 qemu和libvirt简介 QEMU…

mac crontab 不能使用问题简记

需要 crontab 有权限,如下截图设置 在访达上方【前往】-》【前往文件夹】输入/ 然后按 Command Shift . 显示隐藏文件,然后将 usr 放到左边栏 然后如下操作 系统设置中找到 隐私安全->完全访问磁盘 点击小锁头 点击号,将/usr/bin/c…

超简单安装油猴(tampermonkey)最新教程(保姆级)

文章目录 ‌‌Tampermonkey的简单介绍一、下载二、安装方法1.Chrome浏览器安装方法2.Microsoft Edge浏览器安装方法3.Opera浏览器安装方法 ‌‌Tampermonkey的简单介绍 ‌‌Tampermonkey是一个浏览器扩展程序,允许用户安装和管理各种用户脚本,这些脚本可…

python 如何将dataframe数据批量插入到clickhouse

1. 背景-问题描述 最近做一个资产数据清洗工作,结束后需要将数据批量插入到clickhouse;查找并尝试了好几种批量插入的方式均已失败告终;现就查到的dataframe类型数据批量插入到clickhouse记录和汇总于此。 2. 配置信息 python 3.12 clickh…

DevOps业务价值流:架构设计最佳实践

系统设计阶段作为需求与研发之间的桥梁,在需求设计阶段的原型设计评审环节,尽管项目组人员可能未完全到齐,但关键角色必须到位,包括技术组长和测试组长。这一安排旨在同步推进两项核心任务:一是完成系统的架构设计&…

强化学习之课程学习法

作者名片 🤵‍♂️ 个人主页:抱抱宝 😄微信公众号:宝宝数模AI ✍🏻作者简介:阿里云专家博主 | 持续分享机器学习、数学建模、数据分析、AI人工智能领域相关知识,和大家一起进步! &am…