以下为作者观点:
假设你是测试自动化方面的新手,想参与构建一个框架。在这种情况下,重要的是要了解框架所需的组件,以及它们是如何组合的。思考项目的具体需求和目标,以及可能遇到的困难和挑战。
假如你是一个测试架构师,问自己这些问题:
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 account
Scenario: 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和所有这些。
请大家记住:做最适合你的团队和项目的事情,同时牢记自动化和框架的基本原则。如果测试是达到了解软件质量的目的的手段,那么自动化只是一种手段。
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取