测试动态 / 质量专栏 /Selenium 中的混合框架
Selenium 中的混合框架
2023-09-22 浏览次数:560

  软件测试领域已经发生了巨大的发展,导致了提高效率和可维护性的创新框架的出现。其中一个值得注意的方法是Selenium中的混合框架,这是一种结合了数据驱动和关键字驱动的优点的测试方法。本博客深入探讨了混合框架的复杂性,揭示了其优势、关键组件和实施策略。从设计可维护的框架到优化测试执行,我们将浏览最佳实践并涵盖见解,使测试人员和开发人员能够创建适应性强、强大且有效的自动化解决方案。无论您是经验丰富的专业人士还是好奇的学习者,此博客都提供了利用 Selenium 中混合框架的强大功能的全面指南。

  一、什么是 Selenium 中的混合框架?

  Selenium中的混合框架是一个全面的软件测试框架,主要结合了两种测试方法:数据驱动和关键字驱动。这种融合旨在利用每种方法的优势,同时解决其局限性。目标是创建一个灵活高效的测试框架,可以处理各种场景,从而增强测试的可重用性、抽象技术复杂性并促进利益相关者协作。

  二、Selenium 混合框架的优点

  使用混合框架的一些优点包括:

  1、灵活组合方法

  混合框架使测试人员能够无缝组合数据驱动和关键字驱动框架,以最好地满足项目的特定要求。

  2、组件的可重用性

  使用数据驱动框架的概念,即通过将测试数据与测试脚本分离,测试人员可以创建可用于多种测试场景的可重用测试脚本。这种可重用性减少了创建新测试所需的工作量,并确保不同模块之间的测试一致,从而提高测试覆盖率并减少重复工作。

  3、更简单的测试

  测试人员可以专注于编写清晰简洁的测试脚本,而框架则处理测试执行和报告的复杂性,最终提高测试工作的效率。测试人员创建高级关键字来抽象应用程序内的复杂操作或交互。

  4、模块化检查

  这种模块化方法增强了可维护性,因为一个模块中的更改不太可能影响其他模块,从而有助于更快地进行故障排除和更新。关键字驱动的测试带来了这个功能。

  5、更好的团队沟通和协作

  标准化程序和共享测试策略可实现凝聚力的团队合作。关键字驱动的测试提高了混合框架中非技术利益相关者的测试用例清晰度。它简化了测试设计语言,使非技术团队成员可以对其进行审查和贡献。此外,UI 或行为更改需要最少的关键字调整,而不是重写整个脚本。

  6、更广泛的场景覆盖

  这确保了应用程序的各个方面(例如功能、用户体验和性能)经过彻底测试,从而产生更加强大和可靠的软件产品。

  7、维护更方便

  当需要更新或更改时,测试人员可以专注于特定模块,最大限度地减少对测试套件其他部分的影响并减少总体维护工作量。这个概念取自数据驱动框架。它们更容易维护,因为可以快速更改测试数据而无需修改测试脚本。

  三、Selenium 混合框架的关键组件

  Selenium 混合框架是各种测试方法的有效组合,旨在最大限度地提高测试自动化的灵活性、可维护性和可重用性。为了更好地理解这个框架,让我们深入研究它的五个关键组件:函数库、关键词管理、对象存储库、测试用例模板设计、驱动脚本

  通过有效地集成这五个组件,Selenium 混合框架使测试人员能够创建健壮、可维护和可扩展的测试套件。它抽象了技术细节,可以轻松创建测试用例,并集中元素管理,最终提高 Web 应用程序测试的效率和可靠性。

  让我们详细了解混合框架的所有五个组件。

  四、Selenium 中混合框架的实现

  让我们看看混合框架的每个组件是如何实现的。

  1、函数库

  “函数库”是指封装特定行为、操作和功能的可重用方法或函数的存储库。这些功能可以跨混合框架的各个层或组件使用,包括手动测试、自动化测试和其他与测试相关的活动。

  1)可重用函数的重要性

  可重用函数是软件测试中的重要组成部分,原因如下:

  效率:它们通过允许重复使用现有代码来执行常见任务来节省时间,从而提高生产力。

  一致性:可重用的函数确保整个应用程序的行为一致,防止出现差异。

  减少重复:它们消除了冗余代码,最大限度地减少了错误并简化了维护。

  模块化:功能可以独立开发和测试,促进系统结构良好。

  抽象:它们隐藏了复杂的实现细节,允许开发人员在更高的级别上工作。

  可扩展性:可以利用现有功能来适应新功能,支持增长。

  跨团队协作:共享职能创建共同基础,促进团队合作。

  测试效率:功能测试一次即可重复使用,提高测试覆盖率和可靠性。

  代码可重用性:功能可以在不同的项目中重新利用,从而节省精力和时间。

  适应性:它们的设计具有灵活性,使应用程序更能适应变化。

  2)创建和管理函数库

  所描述的方法用于用户执行的每个操作。每个方法都带有一个关键字。用户不需要编写方法来重复执行相同的活动。

  在这里,我们开发了一个库来验证 LambdaTest 网站徽标和有效登录。每次需要验证有效登录时,我们可以简单地使用适当的输入调用该函数(此处称为“关键字”)。

  输出:

  如果登录过程成功,代码将运行,并且 LambdaTest 网站将打开。

  如果没有的话,就会出现下面的错误。


  导入库后,我们声明了 LambdaTest 类,它封装了测试自动化方法。

  __init__(self, driver):使用 WebDriver 对象初始化实例的构造函数。

  open_url(self, url):使用 WebDriver 实例打开提供的 URL。

  verify_lambdaTest_logo(self):验证 LambdaTest 徽标元素是否显示在页面上。

  valid_sign_in(self、email、password):通过单击登录链接、输入电子邮件和密码,然后单击登录按钮来执行有效登录。

  time.sleep():在自动化中添加延迟。

  如果页面标题包含“Welcome – LambdaTest”,则valid_sign_in方法返回 True,表明已成功登录。


  main() 函数是脚本的起点。它使用 webdriver.Chrome()创建一个 Chrome WebDriver实例。它使用 WebDriver 实例实例化 LambdaTest 类。

  然后它打开 LambdaTest 网站并执行测试用例:

  验证是否显示 LambdaTest 徽标。

  使用提供的电子邮件和密码执行有效登录。

  执行测试用例后,它使用driver.quit()关闭 WebDriver 。

  2、关键词管理

  现在,我们已经根据需要为实例声明了关键字。我们需要管理它们。我们一般将它们存储在Excel表格中。

  1)在 Excel 工作表中存储关键字

  以下是如何使用 Excel 工作表存储关键字:

  关键字定义:

  在 Excel 工作表中为我们想要自动化的每个操作或测试步骤定义一行。该行将包含关键字的各种属性的列,例如:

  关键字名称操作(例如,单击、键入、验证)、元素标识符(例如 ID、XPath)、元素定位器(例如,定位元素的实际值)、参数(例如输入值)、预期结果(例如,预期结果)、评论或注释

  关键字执行逻辑:

  在测试脚本中,阅读 Excel 工作表并将行解释为关键字。对于每个关键字,提取相关信息并使用适当的 Selenium 函数或其他测试库执行相应的操作。

  参数化和可重用性:

  Excel 工作表允许轻松参数化关键字。我们可以使用占位符或单元格存储在测试用例或场景中变化的动态值。

  关注点分离:

  通过在 Excel 工作表中存储关键字,将测试逻辑与测试数据分开。测试人员可以专注于定义关键字,而测试数据可以在Excel工作表或其他数据源中单独管理。

  维护和更新:

  当关键字或动作发生变化时,我们只需要更新Excel表,而不需要修改多个测试脚本。它有助于更轻松地维护并减少更改对测试套件的影响。

  为上面定义的测试用例构建 Excel 工作表:

  上表是在 Excel 工作表中组织测试用例的基本结构。这个结构化的 Excel 工作表可帮助测试人员系统地记录和组织测试用例,从而使测试过程的执行、跟踪和报告变得更加容易。每行代表一个独特的测试场景,列帮助定义测试步骤、输入数据和预期结果,以实现高效的测试用例管理。

  如果需要,我们可以扩展上面的格式以包含其他列,例如用于捕获测试结果的“实际结果”列、用于将测试标记为通过/失败的“状态”列等。

  3、测试用例模板设计

  有组织且一致的测试用例模板对于创建有组织且一致的测试文档是必需的。精心设计的模板可以提高测试用例的清晰度、彻底性和可理解性。

  构建测试用例

  让我们以 TC3(valid_sign_in) 为例,看看如何在混合框架中构建测试用例:

  测试用例模板:

  测试用例 ID: TC-003、测试用例名称:有效登录、测试区域:身份验证、测试优先级:高、测试类型:功能

  前提条件:用户具有有效的互联网连接。用户位于 LambdaTest 登录页面。

  测试步骤:单击“登录”链接。输入有效的电子邮件地址:“abc@gmail.com”。输入有效密码:“xxx”。单击“登录”按钮。

  预期成绩:– 用户应成功登录,结果页面的标题应为“欢迎 – LambdaTest”。

  测试数据:– 电子邮件:“abc@gmail.com”、– 密码:“xxx”

  实际结果:– 用户已成功登录,结果页面的标题为“欢迎 – LambdaTest”。

  通过/失败标准:– 通过:用户登录成功,标题与预期标题相符。– 失败:用户未登录,或者标题与预期标题不匹配。

  笔记:– 此测试用例验证用户是否可以使用有效凭据登录。

  5、对象存储库

  对象存储库是测试自动化脚本中使用的所有 UI 元素和定位器的结构化存储机制。我们没有将定位器直接硬编码到测试脚本中,而是将它们存储在对象存储库中,这样我们就可以在定位器发生变化时轻松管理和更新定位器,而无需修改测试脚本本身。

  管理 UI 元素和定位器

  在 Selenium 中,UI 元素是使用ID、XPath、CSS 选择器等定位器来标识的。让我们看看如何创建一个对象存储库来存储这些定位器: 我们将继续上面的示例。

  1)首先创建一个对象存储库文件:

  我们可以选择自己喜欢的格式,包括 JSON、XML 或电子表格。

  在这里,我们使用了 JSON 格式。

  2)代码中对象存储库的使用:

  我们可以修改 LambdaTest 类以使用对象存储库动态获取定位器。就是这样:

  在上述方法中,UI 元素的定位器和相应的值存储在 JSON 对象存储库中。

  在 LambdaTest 类中,

  load_object_repository方法将 JSON 文件加载到内存中。

  find_element_by_locator方法将元素名称作为参数,从对象存储库中查找其定位器和值,并返回相应的 Selenium WebElement 。

  通过使用对象存储库,我们将测试脚本与实际定位器分离。如果定位器发生变化,我们只需要更新对象存储库(此处为obj_repo)JSON 文件,我们的测试脚本仍然可以工作。

  请记住使用上面示例 JSON 中的内容创建obj_repos.json文件。

  加强测试维护

  测试维护涉及随着应用程序的发展使我们的自动化测试保持最新且高效。由于 UI 更新、新功能或错误修复等应用程序经常发生变化,因此我们必须确保我们的测试脚本能够适应这些变化,而无需进行大量的手动修改。以下是我们如何在混合框架中增强测试维护:

  集中对象存储库

  通过将 UI 元素定位器存储在集中式对象存储库中,我们可以在定位器发生变化时轻松更新它们。我们不需要在多个测试脚本中搜索和修改定位器,而只需在一处更新它们。这降低了由于定位器更改而导致测试中断的风险。

  参数化

  使用参数化使测试更具适应性。例如,使用变量或参数,而不是将测试数据直接硬编码到测试脚本中,使用变量或参数。这使我们能够在不修改脚本的情况下从外部更新测试数据。

  数据驱动测试

  利用数据驱动测试将测试数据与测试逻辑分开。将测试数据存储在电子表格、数据库或 JSON 文件等外部源中。这样,我们就可以在不接触脚本的情况下修改测试数据。

  可重用的功能

  维护一个用于常见操作的可重用函数库。如果应用程序发生变化,我们只需更新函数一次,确保使用它们的所有测试用例的一致性。

  驱动脚本

  在混合框架中,脚本使用函数库中定义的关键字执行测试用例,并遵循测试用例模板中的说明。它连接了高级测试用例和低级实现细节,例如与 UI 元素的交互、验证等。

  驱动程序脚本的作用

  驱动脚本的主要作用如下:

  解析测试用例:驱动程序脚本读取测试用例模板,其中概述了每个测试用例要执行的步骤。

  解释关键字:对于测试用例中的每个步骤,驱动程序脚本都会解释测试用例模板中相应的关键字及其关联参数。

  调用函数:驱动程序脚本根据解释的关键字从函数库中调用适当的函数。这些函数封装了需要执行的特定操作。

  管理测试数据:驱动程序脚本可以处理测试数据的检索和管理,这些数据可以外部存储在数据库、电子表格或其他源中。



  在此示例中,HybridDriver类充当驱动程序脚本。它使用对象存储库来获取 UI 元素定位器并根据提供的测试用例步骤执行关键字。main () 函数演示了如何使用每个测试用例的步骤列表来执行测试用例。

  五、混合框架的最佳实践

  让我们看看实施混合框架时的一些最佳实践。

  1、设计可维护的框架

  随着应用程序的增强,正确设计的框架可以使测试套件的更新和管理变得更加容易。

  保持代码整洁和模块化

  – 将框架分解为模块化组件,例如库、页面和测试脚本。

  – 应用 DRY(不要重复自己)等原则来消除冗余和复杂性。

  关注点分离

  – 隔离测试逻辑、测试数据和配置设置,以确保正确分离关注点。

  – 保持测试操作和测试验证功能之间的明确区别。

  2、有效的同步和等待

  我们必须实现同步机制来处理通常由异步行为引起的延迟。

  处理测试中的计时问题

  – 识别潜在的与时间相关的问题,例如加载缓慢的元素或 AJAX 请求。

  – 应用适当的等待策略以确保测试在不同环境中保持稳定。

  应用等待策略

  – 使用显式等待实现精确同步,使用隐式等待实现一般延迟,使用 FluentWait 实现自定义条件。

  – 将等待机制与预期条件相结合以实现最佳同步。

  3、错误处理和报告

  我们必须实现强大的错误处理机制来优雅地处理异常并继续测试执行。

  实施错误处理机制

  – 使用 try-catch 块适当地捕获和处理异常。

  – 使用异常类对不同类型的错误进行分类和管理。

  生成综合测试报告

  – 集成 Extent Reports 或 Allure 等报告库以生成详细的测试执行报告。

  – 报告包括有关测试状态、步骤、断言和屏幕截图的信息。

  4、日志记录和调试技术

  我们必须合并成需要仔细的规划和设计。

  持续改进:未能投资于持续改进可能会导致各个级别(信息、调试、错误)的日志记录,以捕获测试执行期间的重要信息。

  框架中的调试方法

  – 利用 IDE 调试器、断点和浏览器开发工具来遍历我们的代码。

  六、混合框架的局限性

  让我们看看考虑混合框架时的一些限制:

  1、复杂性:平衡数据驱动和关键字驱动方法的集停滞和效率下降。

  2、技能要求:使用混合框架的开发人员和测试人员需要对数据驱动和关键字驱动的测试概念以及编程语言和 Selenium WebDriver 有深入的了解。

  3、执行速度:框架的开销(例如从外部源读取数据)可能会影响整体执行时间。

  4、工具依赖性:许多混合框架依赖第三方工具、库或应用程序来实现某些功能,例如从 Excel 工作表读取数据或生成报告。

  5、初始设置开销:设置必要的基础设施(例如数据源、关键字映射和测试用例模板)需要前期工作,并且可能非常耗时。

  6、测试数据的维护:由于测试数据通常存储在外部(例如,Excel 表格中),因此跨不同测试用例管理和更新测试数据可能具有挑战性。

  结论

  Selenium 中的混合框架通过合并数据驱动和关键字驱动的测试方法提供了一种强大的方法。它提供了灵活性、可重用性和协作优势。函数库、关键字管理、模板、对象存储库和驱动程序脚本等核心组件协同工作以实现无缝测试执行。遵循最佳实践可确保稳健性。尽管存在复杂性和学习曲线等挑战,但该框架的优势还是显着的。它是满足现代测试需求的多功能解决方案,通过高效的自动化提高软件质量。

  七、常见问题 (FAQ)

  1、驱动程序脚本在混合框架中的作用是什么?

  驱动程序脚本解释测试用例模板,从函数库调用适当的函数,并使用关键字管理测试用例的执行。

  2、对象存储库如何改进测试维护?

  对象存储库将 UI 元素定位器与测试脚本分开存储,从而可以更轻松地更新定位器,而无需修改测试用例。

  3、什么是数据驱动测试以及它如何在混合框架中使用?

  数据驱动测试涉及将测试数据与测试逻辑分离。在混合框架中,测试数据通常存储在外部并动态获取以执行测试。

  4、混合框架也可以处理移动应用程序测试吗?

  是的,混合框架可以使用适当的工具和库(如 Appium)进行移动应用程序测试。

  5、是否可以将混合框架与持续集成/持续部署(CI/CD)管道集成?

  是的,混合框架可以与 CI/CD 管道集成,以便在代码发生更改时自动执行测试。

  6、从现有测试框架迁移到混合框架的推荐方法是什么?

  迁移涉及了解现有框架的组件并设计增量过渡计划。在迁移过程中重点关注维护现有的测试覆盖率。

        卓码软件测评是一家[ 具备CMA、CNAS双重资质 ]的专业做软件测试的第三方软件测试服务机构, 可根据您的需求提供各类软件测试服务,并出具合格有效的软件测试报告。点击→→可了解测试报价

        部分文字、图片来自网络,如涉及侵权,请及时与我们联系,我们会在第一时间删除或处理侵权内容。负责人:曾菲       电话:4006070568


文章标签: 测试框架 软件测试
专业测试,找专业团队,请联系我们!
咨询软件测试 400-607-0568