持续 UI 测试管道:带有 GitHub Actions 的 BrowserStack

Image description

您是否知道,即使网站提供优质的服务和内容,88% 的用户也不会再次访问体验不佳的网站?现在是时候认识到,无缝的用户界面 (UI) 和用户体验 (UX) 对产品或公司的成功至关重要,而不仅仅是奢侈品。

这就是**持续 UI 测试**发挥作用的地方。持续 UI 测试摒弃了传统的测试方法,将其融入到开发和部署的几乎每个步骤中。这不仅可以确保所有浏览器和设备的完美性,还可以实现精确性,而不会减慢您的开发流程。

在这篇博客中,我们将探讨**BrowserStack**和**GitHub Actions**的作用。前者(BrowserStack)允许您在真实的浏览器和设备上运行自动化测试,并确保无与伦比的准确性。另一方面,GitHub Actions 通过在每次推送代码时无缝触发测试工作流程来自动化此过程。让我们来探索如何。

为什么持续 UI 测试如此重要?

在当今的动态环境中,忽视定期的 UI 测试会导致以下问题:

  • 布局损坏:代码中的细小变化可能会无意中破坏设计、放错元素或导致界面无响应。
  • 跨浏览器兼容性问题:您的应用程序可能在某个浏览器中运行顺畅,但在另一个浏览器中却无法运行。这对用户来说尤其令人沮丧。
  • 用户体验差:界面故障只需几秒钟就能赶走用户。这会直接影响您的品牌声誉和收入。
  • 在任何给定的 CI/CD 工作流程中,风险都会随着代码的每次持续更改而倍增。定期进行 UI 一致性检查可以提前发现此类问题和风险。在构建阶段投资这些测试和检查实际上是可行的,无需担心昂贵的修复、最后一刻的更改、客户流失和延迟发布。

    一致性 UI 检查的一些高规模优势包括:

  • 提高开发速度:如果着眼于长远发展,您就不会随意调试,而是在构建阶段解决代码中的故障。自动化测试可提高速度和创新能力。
  • 可靠性更高:持续测试无疑会减少可能在生产过程中出现的 UI 错误。因此,您最终可以在所有环境中获得一致的性能!
  • 手动测试与持续 UI 测试:

    什么是 BrowserStack?

    BrowserStack 是领先的云端测试平台,它可以让开发人员在各种浏览器、操作系统和设备上测试他们的应用程序。它是任何内部设备实验室的完美替代品。BrowserStack 的其他优势包括:

  • 针对您的平台进行视觉测试:帮助您获得一致的用户体验,而无需担心平台碎片化。无缝检测视觉回归并实现像素完美设计。
  • 支持自动化测试:您可以轻松地在 BrowserStack 上运行 Cypress、Selenium 或任何其他测试框架,以进行干净、强大的 UI 验证。
  • 跨浏览器和设备测试:验证不同设备上不同浏览器和版本的无缝运行。
  • null

    什么是 GitHub Actions?

    它是一种与 GitHub 无缝集成的自动化工具。“Actions”可帮助开发人员启动、管理和触发工作流程,特别是基于代码推送、PR(拉取请求)或计划触发器。GitHub Actions 的一些主要功能包括:

  • 并行执行:它本质上有助于同时运行作业以节省时间并加快交付。
  • 可定制的管道:通过使用针对任何特定 CI/CD 需求定制的 YAML 文件,操作可以非常有效地定义项目工作流程。
  • 广泛集成:您可以无缝地与第三方工具(如 BrowserStack 或 AWS 等)结合,实现任何类型的综合自动化。
  • 事件驱动的工作流:可能是最好的部分,它允许基于存储库事件实现任务自动化,例如运行测试或部署存储库代码。
  • 先决条件:

    以下是使用 BrowserStack 和 GitHub Actions 执行接口测试设置所需的工具列表:

  • GitHub 存储库。
  • 访问 BrowserStack(自动化)。
  • Selenium/Cypress 测试脚本(或博客中提供的示例脚本)。
  • BrowserStack 如何与 GitHub Actions 集成?

    在最终了解选择 BrowserStack 和 GitHub Actions 的关键可交付成果后,我们可以得出结论,它们结合在一起可以证明是有效的稳健和自动化。继续阅读以了解它如何让您的 UI 测试在不同的设备和浏览器上运行得如此干净。欢迎来到集成过程的分步技术演练:

    让我们看看上述四个步骤的详细方法:

    步骤 1:事件触发器:激活您的工作流程

    我们所说的“事件驱动”本质上是指 GitHub Actions 中的工作流程由存储库事件触发。它就像门铃一样,除非被激活并触发预定义的响应,否则什么都不会发生。

    与此类似,GitHub Actions 有几个事件,可以通过这些事件以某种方式触发工作流程(取决于事件)。以下是一些示例:

  • 推送:代码被推送到特定分支(例如,主分支、开发分支等)。 * 拉取请求(PR):发起、同步或合并拉取请求。 * 删除:删除分支或标签时。
  • 您可以借助任何给定的“.yml”文件中的配置来理解这些示例事件:

    on:
      push:
        branches:
          - main
      pull_request:
        branches:
          - main
      delete:  # Trigger workflow when a branch or tag is deleted

    步骤 2:代码检查:准备测试环境

    现在,此流程中的下一步是使用 GitHub Actions 中的工作流来获取您的存储库代码库。我们可以使用 `actions/checkout` 操作来实现它,这将进一步确保您的存储库的所有测试脚本和配置文件均可成功执行。

    YAML 代码片段示例如下:

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

    💡

    默认情况下,“checkout”操作仅获取最新的提交以加快工作流程。如果需要,请使用“fetch-depth: 0”获取完整的存储库历史记录。

    步骤 3:在 BrowserStack 上执行测试:运行 UI 测试

    将 BrowserStack 与 GitHub Actions 集成的关键在于在 BrowserStack 强大的基础架构上无缝执行 UI 测试。这一关键设置允许开发人员非常高效地自动化任何类型的跨浏览器测试。因此,您可以在任何不同的环境中获得应用程序的一致性能。以下是 BrowserStack 中测试执行的详细配置:

  • 设置 BrowserStack 凭证:
  • * Authenticating test execution will require Access Keys.
    
    * We store these Access Keys securely as ‘GitHub Secrets’ (`BROWSERSTACK_USERNAME` and `BROWSERSTACK_ACCESS_KEY`):
    ```yaml
        steps:
          - name: Set BrowserStack Credentials
            env:
              BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
              BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
        ```
  • 安装依赖项:
  • * You must then install the project dependencies based on your project (e.g., Selenium, Cypress). This `.yml` file could be an example:
    ```yaml
        steps:
          - name: Install Dependencies
            run: |
              npm install
              npm run build
        ```
  • 通过 BrowserStack CLI 或 API 执行测试:
  • * Configure the test runner to execute on BrowserStack Automate:  
        Example for Selenium:
    ```yaml
        steps:
          - name: Run Selenium Tests on BrowserStack
            run: |
              npx selenium-standalone start &
              npm test
        ```
    * Example for Cypress (via BrowserStack Cypress CLI):
    ```yaml
        steps:
          - name: Run Cypress Tests on BrowserStack
            run: |
              browserstack-cypress run --sync
        ```

    步骤 4:结果收集和报告

    如上所述,BrowserStack 为您提供完美的报告和分析,可为您全面生成报告和分析。这些主要包括:

  • 执行日志:一组用于调试的逐步日志。
  • 屏幕截图:捕获关键测试步骤并提交给您。
  • 视频:实时完成的测试执行的完整记录。
  • 测试状态:突出显示您的应用程序通过、失败和跳过的测试。
  • 上述工件可以轻松链接到 GitHub Actions 工作流,以便于访问。以下是我们对 `.yml` 文件的示例执行的操作。

    steps:
      - name: Upload Artifacts
        uses: actions/upload-artifact@v3
        with:
          name: test-results
          path: ./path-to-results

    集成的高级功能

  • 并行测试执行:使用 BrowserStack Automate 的并行测试功能在不同的浏览器和设备上同时运行多个测试用例。这可以通过测试框架的设置(例如 Selenium 中的 maxInstances)进行配置。
  • 动态浏览器和设备矩阵:使用 JSON 配置动态定义测试矩阵,从而轻松更新被测浏览器和设备:{“browsers”:[{“browser”:“Chrome”,“os”:“Windows”,“os_version”:“10”},{“browser”:“Safari”,“os”:“OS X”,“os_version”:“Monterey”}]}
  • 错误通知:使用 Slack 或电子邮件等集成设置工作流程失败通知:步骤:- 名称:通知 Slack 用途:slackapi/slack-github-action@v1.23.0 使用:有效载荷:'{“text”:“GitHub Actions 上的 UI 测试失败!”}'
  • 技术图表

    下面是一个说明集成工作流程的图表

  • GitHub 事件:代码推送或拉取请求触发工作流程。
  • CI 管道:GitHub Actions 获取代码和依赖项。
  • BrowserStack 执行:测试在 BrowserStack Automate 上运行。
  • 测试结果:生成日志、屏幕截图和报告并链接回工作流程。
  • 通过利用 BrowserStack 和 GitHub Actions 的无缝集成,团队可以自动化他们的 UI 测试,确保跨设备和浏览器的全面覆盖,同时加速他们的 CI/CD 管道。

    null

    这种集成简化了 UI 测试,使团队能够尽早发现问题并更快地交付高质量的应用程序。

    提高 UI 测试效率的专业技巧

  • 利用并行测试:通过同时在多个浏览器和设备上运行测试来加快测试周期,减少运行时间并提高覆盖率。
  • 实施重试机制:实施重试以减少不稳定测试的影响,确保一致的结果。
  • 采用视觉回归测试:使用 Percy 等工具通过比较视觉快照来捕捉意外的 UI 变化,确保无缝的用户界面。
  • 常见问题及其解决方法

    在实施持续 UI 测试时,您可能会遇到几个常见的挑战。以下是一些解决这些问题的故障排除技巧:

  • 不稳定测试:
  • * **Issue**: Flaky tests often result from network latency or timing issues.
    
    * **Resolution**:
    
        * Implement **retry mechanisms** to handle intermittent failures.
    
        * Use **explicit waits** in your test scripts to ensure elements are loaded before interacting with them.
    
        * Regularly clean up test environments to avoid side effects from previous tests.
  • 配置错误:
  • * **Issue**: Misconfigured GitHub Actions workflows, such as incorrect paths or wrong credentials, can cause your tests to fail.
    
    * **Resolution**:
    
        * Double-check your YAML file for syntax errors and verify that all paths to your scripts or dependencies are correct.
    
        * Ensure that **BrowserStack credentials** are properly stored as **GitHub Secrets**.
    
        * Review logs for clear error messages and verify dependencies are correctly installed during the workflow setup.
  • 浏览器兼容性问题
  • * Issue: UI tests might pass in one browser but fail in others due to differences in rendering engines or CSS support.
    
    
    
    
    
    
    
    Resolution:
    
    
    
    
    
    
    Use cross-browser testing tools like BrowserStack to test across multiple browsers and versions simultaneously.
    
    
    Implement browser-specific test cases to account for differences in layout, behavior, and JavaScript support.
    
    
    Regularly update your browser configurations to include the latest versions.

    在这种情况下您可以采用的最佳做法:

  • 维护稳定的测试环境:设置专用的测试环境以确保一致的结果。
  • 监控测试性能:密切关注测试执行时间并避免运行不必要的测试。
  • 审查日志:测试失败时务必检查日志,以清楚了解出了什么问题。
  • 并行测试:为了提高效率和覆盖率,可同时在多个浏览器和设备上进行测试。
  • 通过解决这些常见问题并遵循最佳实践,您可以提高 UI 测试的可靠性并确保更流畅的测试体验。

    Keploy:简化测试自动化,注重速度和准确性

    Keploy 是一个开源、无代码测试平台,旨在简化现代应用程序的测试生成和执行。通过自动捕获 API 交互,它有助于生成可靠且全面的测试用例,而无需人工干预。

    为什么在持续 UI 测试中使用 Keploy?

  • 自动化测试创建:Keploy 通过在运行时记录 API 调用来自动生成测试用例,从而减少了手动编写脚本的需要。
  • 回归测试:通过检测和标记偏差来确保您的应用程序保持一致的性能。
  • 无缝 CI/CD 集成:Keploy 与 GitHub Actions 和 BrowserStack 等工具协同工作,提高 CI/CD 管道的效率。
  • 更快的迭代:它能够减少花在测试脚本上的时间,从而使团队能够专注于开发和创新。
  • 用例:

    将 Keploy 与 BrowserStack 配对可提供全面的测试解决方案,涵盖 API 和 UI 元素,以实现一致的跨平台性能。通过将 Keploy 纳入您的工作流程,您可以进一步提高测试效率并加快交付速度,同时保持一流的应用程序质量。

    结论

    在当今快节奏的开发环境中,持续的 UI 测试不再是一种奢侈,而是一种必需品。**BrowserStack** 和 **GitHub Actions** 等工具使团队能够通过自动化复杂的测试流程来提供无缝的跨平台用户体验。这些集成可缩短开发周期、提高可靠性并降低成本,确保您的应用程序符合最高质量标准。

    通过将这些工具与 **Keploy** 等创新平台相结合,您可以将测试策略提升到一个新的水平,在开发周期的早期捕获 UI 和 API 级别的问题。这不仅可以加速您的 CI/CD 管道,还可以增强应用程序的整体弹性和用户满意度。

    资源 -

  • BrowserStack 文档
  • GitHub Actions 文档
  • 使用 BrowserStack 进行跨浏览器测试