编辑推荐: |
本文主要介绍了AI驱动自动化测试探索相关内容,希望对您的学习有所帮助。
本文来自于微信公众号黑夜路人技术,由火龙果软件Alice编辑、推荐。 |
|
介绍
现代软件开发需要快速、可靠的测试,以跟上持续交付的步伐。**完全自主测试**的传统方式,到利用AI处理整个测试生命周期——从解读产品需求到执行测试和报告结果——**无需人工干预**
的新模式。
在全自动系统中,AI驱动的工具完全控制测试设计、执行、调整和分析。这有望缩短发布周期、扩大测试覆盖范围并实现始终如一的质量,无需人工干预。然而,实现这种端到端自动化需要一种严谨的工程方法,该方法结合了自然语言处理(用于理解产品需求文档)、智能测试生成、强大的自动化框架和无缝的
CI/CD 集成。
探索一种可能得解决方案架构,该架构满足 Web、移动和 API 测试的需求,并使用 Jenkins
作为编排器。从AI模块到测试执行和报告的所有组件都设计为可扩展和生产级。
架构图:端到端 AI 驱动的测试自动化架构
基本流程:
AI系统读取项目需求文档 (PRD) -> 生成测试用例和脚本 -> 跨 Web、移动和
API 接口执行测试 -> 并通过 Jenkins 报告结果。
该解决方案由几个按顺序工作的关键组件组成,以实现完全自动化的测试:
PRD 提取和 AI 解析: AI 模块以给定格式(例如 Word、Markdown、飞书文档)读取产品需求文档
(PRD),并使用自然语言处理解释需求。
AI 测试用例生成:系统使用大型语言模型 (LLM),根据 PRD 的内容生成详细的测试用例(场景、步骤和预期结果)。这既包括功能路径(来自用户故事或用例),也包括根据需求推断出的边缘案例。
自动测试脚本创建:生成的测试用例将自动转换为针对每个目标平台(移动应用测试和 API 测试)的可执行测试脚本。这可能涉及
AI 代码生成器或基于模板的脚本生成,以生成代码(例如,Selenium/Playwright 脚本、Browser
Use程序、Appium 脚本、API 请求验证),而无需人工编码。
测试执行层:一套测试运行器负责协调各个平台上的执行。Web UI 测试通过浏览器自动化工具运行,移动测试在真实或虚拟设备上运行,API
测试则针对服务端点运行。这些测试可以并行运行,以加快反馈速度。
自我修复与自适应: AI 驱动的机制会观察被测应用程序,以处理执行过程中的动态变化(例如更新的元素定位器或更改的工作流)。这确保测试能够自适应,而非随着被测应用程序
(AUT) 的演进而变化。
结果汇总与报告:测试结果将被收集并汇总成报告。系统会区分实际应用程序故障与测试脚本问题,并生成通过/失败结果、日志和屏幕截图(如适用)的摘要。
CI/CD 集成: Jenkins 作为流水线编排器,触发 AI 测试流程(例如,在新的 PRD 可用或新构建部署时),然后将结果集成回流水线。测试报告发布到
Jenkins,可以通过标准插件(例如 JUnit)查看,流水线可以根据结果做出通过/失败的决策。
该架构是端到端自动化的——Jenkins 触发流程,AI 理解需求并创建测试,测试执行,结果反馈回Jenkins——无需人工
QA 干预。下文将详细介绍每个组件以及实现这些组件所需的技术和策略。
一、AI驱动的PRD解析和测试用例生成
第一阶段是使用AI阅读和理解产品需求文档。系统应支持各种 PRD 格式(Markdown 文本、Word
文档、飞书文档页面等),因此包含一个预处理步骤:
文档预处理:从源头(文件系统、飞书文档 API、Git 仓库等)获取 PRD,并将其转换为结构化格式。例如,Word
文档可能会被转换为 Markdown,保留通常指示需求或验收的标题和项目符号,然后将这些内容输入到
AI 中。
# 读取飞书文档内容 import json import lark_oapi as lark from lark_oapi.api.docs.v1 import GetContentRequest
# 常量 DEFAULT_DOC_TOKEN = "B4EPdAYx8oi8HRxgPQQbM15UcBf" APP_ID = "YOUR_APP_ID" # 飞书应用ID常量 APP_SECRET = "YOUR_APP_SECRET" # 飞书应用密钥常量
def main(): client = lark.Client.builder().app_id(APP_ID).app_secret(APP_SECRET).build() if not (response := client.docs.v1.content.get( GetContentRequest.builder().build( doc_token=DEFAULT_DOC_TOKEN, doc_type="docx", content_type="markdown", lang="zh" ) )).success(): print(f"Error: {response.code}, {response.msg}") return print(json.dumps(response.data, indent=2))
if __name__ == "__main__": main()
|
自然语言理解: NLP模块或 LLM(大型语言模型)负责处理 PRD 的各项功能、用户故事和验收标准。可以使用现代
LLM,例如Claude-3.7、GPT-4o、Deepseek或开源模型(例如经过微调的Deepseek和llama)。该模型将充当"测试工程师",提取与测试相关的信息。它将解析诸如"用户应能够通过电子邮件链接重置密码"之类的语句,并推断需要测试哪些场景和边缘情况(例如,重置成功、电子邮件无效、链接过期)。
你是一位资深测试工程师,现在针对产品经理发布的PRD文档,你需要提取整理与测试相关的信息,它将解析诸如"用户应能够通过电子邮件链接重置密码"之类的语句,并推断需要测试哪些场景和边缘情况(例如,重置成功、电子邮件无效、链接过期)等,请输出整理后的内容。
|
比如如下的大模型交互Prompt:
可能会得到这样的内容:
使用LLM 生成测试用例:系统使用生成式 AI,生成一套涵盖所有需求的测试用例。每个测试用例将包含:描述、测试步骤(自然语言或伪代码)和预期结果。LLM
可以通过提示工程引导,以结构化格式输出测试用例(例如,包含步骤和预期结果的 JSON/YAML/Toml,或类似
Gherkin 的场景)。利用大型训练模型,可以从海量测试知识中学习:生成模型可以从现有的测试场景和规范中学习模式,从而推荐全面的测试用例。
按照以上梳理的测试需求文档,生成一套涵盖所有需求的测试用例。每个测试用例将包含:描述、测试步骤(自然语言或伪代码)和预期结果。以结构化格式输出测试用例,例如,包含步骤和预期结果的 JSON/YAML/Toml,或类似 Gherkin 的场景。
|
1) 用户点击"忘记密码",
2) 输入注册邮箱,
3) 收到重置链接,
4) 成功重置密码。
例如,AI 可能会生成"测试用例:
使用有效邮箱重置密码 - 步骤:
预期结果:使用新密码登录成功"。它还会生成边缘案例(未注册邮箱、格式错误的邮箱、重复使用旧链接等),旨在实现全面覆盖。
我们假设这个与大模型交互Prompt:
我们会得到这种类似输出:
UI/API 行为学习:除了文本分析之外,AI 模块还可以整合典型 UI 或 API 行为的知识。这些知识可以来自两个来源:
例如,AI 可以利用无头浏览器爬取 Web 应用程序或检查 API 架构以发现端点。这有助于 AI
将其生成的测试用例与实际应用程序行为进行匹配。一些高级测试工具已经实现了这一点;
例如,Appvance基于观察真实用户行为生成测试用例,模仿用户在生产环境中的行为。同样,Functionize使用机器学习从用户交互中学习,并生成能够复制这些操作的测试。我们的系统可以融入这些理念:通过学习典型的工作流程,AI
可以确保测试用例符合实际,并涵盖既定需求和隐含的使用模式。(Appvance和Functionize是两个测试自动化工具)
(a) 先前数据(例如历史用户旅程分析或测试结果),用于了解常见的使用路径;
(b)对应用程序本身的探索性分析。
生成用例的验证:用例生成后,验证步骤会检查测试用例是否与需求相符(以避免出现幻觉或不相关的测试)。这可以是一个辅助AI模型或基于规则的检查,以确保PRD中的每个需求至少包含一个测试用例,并且预期结果符合需求标准。此阶段的结果是生成一个测试用例库,其中包含可执行测试用例。这些测试用例可以存储在测试管理系统中(以便于追溯),甚至可以作为工件进行版本控制(例如,存储在JSON/YAML/Toml文件或数据库中)。它们作为待测试内容的真实来源。
二、自动测试脚本生成
测试用例完成后,下一个挑战是如何在无人参与的情况下创建可执行的测试脚本。这需要将高级场景转换为能够驱动被测应用程序
(AUT) 的代码。我们提出了两种互补的方法来实现这一点:
基于模板的代码生成:开发一个自动化关键字库或脚本模板库,该库与常见的用户操作和验证相对应。例如,可以使用类似这样的关键字
CLICK("忘记密码链接") 或类似这样的方法 click_forgot_password()。AI
测试用例(已在上一步构建)被输入到生成器中,该生成器将每个步骤映射到一段代码。如果使用行为驱动开发
(BDD) 风格,可以将 Gherkin 步骤映射到步骤定义。由于环境中尚不存在测试框架,我们可以选择一个健壮的框架——例如,用于
Web UI 操作的Selenium WebDriver/Playwright/Browser Use、用于移动操作的Appium以及用于
API 调用的直接 HTTP 客户端。模板方法意味着我们已经预先定义了如何执行诸如"在字段
X 中输入文本"或"验证响应代码是否为200"之类的操作,因此将测试用例转换为代码的过程是系统化的。这减少了出现语法错误的可能性,并生成了可维护的代码。
AI 代码合成:或者,使用 LLM(可能是同一个 LLM,也可能是像 Deepseek/OpenAI
这样的专用代码模型)根据测试用例描述生成所选语言/框架的代码。例如,用测试用例场景提示模型,并要求其输出实现这些步骤的
Python pytest 函数或 Java JUnit 测试方法。AI 编码辅助技术的最新进展使这成为可能——借助适当的提示指令,模型可以生成样板测试代码,包括对
Selenium/Playwright 或 API 库的调用。
生成的代码可能如下所示:
def test_reset_password_valid_email(browser): # 步骤 1: 用户点击"忘记密码" browser.find_element(By.LINK_TEXT, "忘记密码").click() # 步骤 2: 输入已注册的电子邮件 browser.find_element(By.ID, "email").send_keys("user@example.com") browser.find_element(By.ID, "submit").click() # 步骤 3: (假设邮件已发送,模拟打开链接) ... # 预期结果的断言 ...
|
AI 需要上下文信息,例如元素定位器。如果 PRD 或设计文档提供了元素标识符或标签(例如,"名为'忘记密码'的链接"),AI
可以在代码中使用它们。如果没有,AI 可能会依赖 UI 探索步骤来猜测标识符(例如,找到带有"提交"文本的按钮)。基于应用程序
UI 约定进行微调的模型,或使用 DOM 结构知识库(通过检索增强生成方法)可以提高准确性。
在实践中,混合使用这些方法效果很好:使用AI生成初始脚本,然后进行快速验证步骤,以空运行模式执行脚本。任何错误(例如,元素未找到或语法问题)都可以被捕获并反馈给生成器进行纠正(自动反馈循环)。随着时间的推移,AI模型可以从这些调整中学习,从而提高可靠性。然后,每个生成的测试脚本都会保存到版本控制的存储库中(或作为构建工作区的一部分),并传递到执行阶段。
对于测试框架和语言,我们推荐针对每个领域经过验证且得到广泛支持的工具:
Web UI 测试:使用 Selenium WebDriver、Playwright 或 Browser
Use 等现代替代方案。这些工具允许以编程方式控制浏览器(Chrome、Firefox 等),以模拟用户在
Web 应用程序上的操作。许多语言(Golang、Java、Python、JavaScript 等)都已绑定;您可以使用
Python pytest 或 Java 结合JUnit/TestNG 作为测试框架。Selenium/Playwright
凭借其灵活性和强大的社区支持,非常适合我们的需求。
from browser_use import Browser
# 启动浏览器并测试登录功能 browser = Browser() browser.open("https://example.com/login") browser.fill("input[name='username']", "test_user") browser.fill("input[name='password']", "test_pass") browser.click("button[type='submit']") assert "dashboard" in browser.current_url # 验证跳转 browser.close()
|
比如使用Broswer use进行测试(底层可以集成 Playwright)
移动应用测试:使用Appium进行跨平台移动自动化。Appium 可以使用类似的 WebDriver
协议自动化 Android 和 iOS 应用,因此 AI 生成的脚本(使用与 Web 测试相同的语言)可以与移动
UI 元素交互。如果被测应用是原生移动应用,则 AI 必须集成特定于移动端的操作(例如点击、滑动、处理移动
UI ID)。Appium 的定位器策略和设备农场集成将非常有用。
API 测试:使用简单的 HTTP 客户端或类似REST Assured(适用于 Java)或Postman/Newman等框架来测试
API 端点。API 的测试脚本将调用 PRD 中指定的端点(例如,URL 路径、请求负载),并根据预期结果(状态码、响应正文)验证响应。这些测试脚本可以用代码编写,也可以在Postman
等工具中配置并通过 CLI 运行。由于 AI 可以解析 API 文档,它还可以为每个端点自动创建 API
测试(例如,使用有效和无效数据来测试每个 GET/POST 请求)。
通过自动化生成脚本,我们确保了从需求到代码的一致性和可追溯性。每个测试脚本都可以引用其验证的需求(例如,在代码注释或元数据中),这有助于报告和维护。目前,我们已经拥有一套可供执行的自动化测试,所有测试均源自原始需求,无需手动编写脚本。
三、自我修复和动态适应
生产级测试自动化的关键挑战之一是在应用程序发生变化时维护测试。在零人工干预的情况下,我们的系统必须能够自主适应
UI 或 API 的变化。这正是AI 驱动的自我修复功能发挥作用的地方。
测试脚本运行时,可能会遇到由于 UI 更改(例如,按钮 ID 更改或字段移动到页面其他位置)导致元素找不到或操作失败的情况。AI
组件不会简单地将测试标记为失败,而是会监控此类故障并实时尝试智能补救措施:
动态定位器策略:自动化框架不会依赖于每个元素的单一硬编码选择器。相反,它会为每个 UI 元素维护一组可能的标识符(例如
XPath、CSS 选择器、文本标签、可访问性 ID),这些标识符可能是在 UI 学习阶段生成的。
如果主定位器失败,系统会尝试其他策略。AI 算法可以分析当前 DOM,以查找与描述匹配的元素(例如,具有相似文本或角色的按钮)。
这种动态搜索由启发式算法或训练有素的模型引导,该模型知道如何通过语义相似性识别元素。例如,如果 PRD
显示"立即购买按钮",但应用程序将其更改为"购买",AI 可以检测到同义词并仍然找到该按钮。这个概念类似于一些
AI 驱动的框架的工作方式——它们使用多个属性和灵活的匹配方式,而不是单个静态定位器。这种自我修复的定位器方法使测试能够适应微小的
UI 变化。
机器学习故障诊断:每当测试失败时,系统应该确定其原因在于应用程序错误(例如,验证逻辑错误)还是测试脚本问题(例如,元素更改)。AI可以通过分析错误消息、堆栈跟踪甚至屏幕截图来帮助对故障进行分类。例如,断言不匹配(预期与实际业务数据不匹配)可能表明应用程序存在真正的缺陷,而"NoSuchElementException"则表明定位器存在问题。因此,AI模型或规则可以对故障进行分类,并在脚本问题的情况下触发自我修复程序。随着时间的推移,机器学习模型还可以预测应用程序的哪些部分容易发生变化,并在测试运行之前主动调整定位器(使用更改历史记录)。
自适应等待和减少不稳定因素: AI 可以根据过去的运行情况调整等待元素或响应的方式。如果某个页面加载缓慢,它可以动态延长等待时间或添加检查以确保稳定性。这可以减少不稳定的测试。它还可以识别不稳定的模式(例如,间歇性失败的测试),并进行相应的标记,或者安排自动重新运行该测试,以验证其是否为持续失败。
跨平台调整:对于在多个平台(Web 和移动)上运行的测试,AI 可以根据需要调整步骤。例如,如果移动应用的导航流程有所不同(例如汉堡菜单而非顶部导航栏),测试生成阶段可以创建特定于平台的变体。执行引擎将根据上下文选择正确的路径。系统本质上能够理解不同平台上的等效操作(点击
Web 链接和点击移动按钮),并可以在运行时进行替换。
通过采用这些自我修复和自适应技术,自动化测试能够应对变化,从而最大限度地减少维护工作。这对于生产级系统至关重要——否则,完全自主的流水线可能会经常中断,需要人工修复。借助AI自我修复技术,各组织报告称测试维护工作量显著减少(例如,根据调查,最多可减少
40%)。在我们的设计中,这意味着测试一旦生成,就可以随着应用程序的演进,只需极少的手动更新。
四、可扩展的测试执行策略
为了适合在生产环境中持续使用(例如,在每次代码提交或夜间构建时运行),测试系统必须具备可扩展性和高效性。AI
可能会生成数百个测试用例,并且它们需要在各种浏览器、设备和环境中运行。我们通过并行化和基础设施选择来解决可扩展性问题:
并行测试执行:该解决方案将以并行批量方式执行测试,而非按顺序运行测试。这可以大幅缩短总执行时间,并更快地为开发人员提供反馈。
例如,Web UI 测试可以按测试用例或浏览器类型拆分并并发运行。现代测试框架(TestNG、Pytest、JUnit
等)支持并行线程,Jenkins 可以生成多个执行器。我们可以配置 Jenkins 流水线以并行启动多个作业——例如,一个作业运行
"Web 测试" 套件,另一个作业运行 "移动测试",还有一个作业运行
"API 测试"。即使在 Web 测试中,我们也可以通过在不同线程上启动多个浏览器实例或使用
Selenium Grid/Playwright Grid 来实现并行化。Web、移动和 API 测试运行器在并行测试执行集群中同时运行。例如,通过一次运行
10 个测试,一个原本按顺序运行需要 100 分钟的套件可能在 10 分钟内完成。这种可扩展性对于快速获得
CI 反馈至关重要。
Selenium Grid / Device Farm:为了满足跨浏览器和跨设备的需求,建议使用 Selenium
Grid/Playwright Grid 或基于云的设备云端。
Selenium Grid/Playwright Grid 允许将 Web 测试分发到多台机器或容器,每台机器或容器运行一个浏览器(Chrome、Firefox、Safari、Edge
等)或不同版本。这确保了对各种环境的覆盖。
对于移动设备,像阿里云EMAS、BrowserStack、Sauce Labs或AWS Device
Farm这样的设备云端服务可以提供一系列真实设备和操作系统版本。我们的 Jenkins 集成可以使用它们的集成或
API 连接到这些服务。例如,BrowserStack 可以通过简单的配置在真实浏览器和设备上提供并行执行,因此管道可以同时在数十种设备/操作系统组合上启动测试。在生产场景中,我们可能还会维护一个内部设备实验室,但云服务可以轻松实现可扩展性。
资源管理:每个测试执行都可以容器化(例如,使用 Docker 镜像作为包含所有依赖项的测试运行器)。Jenkins
可以动态启动容器,或使用 Kubernetes 分配用于测试执行的 Pod。这确保了环境一致性,并隔离了各个测试(防止干扰)。使用容器还允许根据需要在云中扩展(例如,当测试负载增加时,通过
Kubernetes 集群自动扩展)。
处理不同的接口:测试执行阶段将根据接口类型进行定制:Web 测试启动浏览器(如果不需要可视化验证,可以使用无头模式来提高速度),移动测试连接到模拟器或设备,API
测试则以轻量级HTTP 调用运行。AI 生成的测试套件将被组织起来,以便每种类型的测试都能在适当的环境中执行。这可能意味着将它们分成不同的测试套件或进行标记,以便运行器知道如何执行。例如,使用@web
或 @mobile 标签标记测试,并让执行框架相应地路由它们。
持续测试和触发:在 CI/CD 中,这种自主测试可以在各种事件上触发:新的 PRD 更新、代码变更、夜间计划或发布部署之前。Jenkins
具有高度可配置性,可以安排这些事件或通过 Webhook触发。完全自动化的特性意味着它可以随时(包括非工作时间)无人值守运行,确保即使是大型测试套件也能定期运行。由于并行化和可扩展资源,对吞吐量的影响被最小化。
通过这些策略,测试解决方案可以满足生产流水线的需求。它可以扩展以并行测试多个项目或模块,处理多个测试环境,并将执行时间保持在可接受的范围内。
五、持续集成和结果报告
与Jenkins CI/CD集成是该解决方案的核心部分,它实现了从需求到结果的闭环。我们设计了如下Jenkins
流水线:
流水线触发器:流水线可以手动或自动触发。典型的触发器可能是新构建(用于回归测试)或计划运行的到来。此外,由于我们需要读取
PRD,如果 PRD 存储在版本控制或飞书文档中,PRD中的更改可能会触发测试生成运行以验证新的需求。Jenkins
可以配置 webhook 或轮询,以便在PRD 发生更改时或按计划(例如,每晚运行以提取任何更改)启动作业。
环境设置: Jenkins 会分配一个代理(或多个用于并行阶段的代理)。必要的环境(例如用于测试的
Docker 镜像或与设备农场的连接)已准备就绪。所有必要的凭证(用于 PRD 访问或用于测试环境)均可通过
Jenkins(使用凭证插件)安全地获取。
PRD 处理阶段: Jenkins 执行一个阶段(例如,运行 Python 脚本或 Java/Golang
程序),用于执行AI 解析和测试生成。此阶段可能会调用外部 AI 服务或本地 AI 模型。例如,它可能会调用对
AI 服务的API 调用(例如,带有 Claude-3.7 模型的阿里云/百度/AWS Bedrock
或 Deepseek/OpenAI API),以从 PRD 文本生成测试用例。输出(测试用例和/或测试脚本)将作为工件存储,以供下一阶段使用。如果测试脚本以代码文件的形式生成,则它们将保存在工作区中。此阶段还应归档原始
PRD 和生成的测试用例文档,以便进行追溯。
测试执行阶段: Jenkins 随后启动测试运行。可以配置为多个并行阶段,例如:
阶段:运行 Web 测试 - 执行 Selenium/Playwright 测试(可能通过或之类的命令
mvn test,具体取决于框架)。此阶段可以在内部生成多个线程以进行并行测试,或者使用 Selenium
Grid/Playwright Grid。
阶段:运行移动测试——执行 Appium 测试,可能在多台设备上并行执行。此处使用设备农场服务的凭证或密钥。
阶段:运行 API 测试- 执行 API 测试(通常速度很快,也可以并行运行)。
Jenkins将捕获每个阶段的控制台输出和结果。任何严重故障(例如基础设施问题或测试套件完全崩溃)都可以配置为立即将管道标记为失败(如果需要),或者继续允许收集部分结果。
结果收集与分析:测试运行时会生成结果文件。我们为每个套件采用标准格式,例如JUnit XML 报告。大多数测试框架都可以输出
JUnit XML 或 Jenkins 能够理解的类似格式的结果。Jenkins 借助JUnit 插件,会在执行后解析这些结果。该插件会汇总所有测试,显示通过、失败或跳过的测试数量。它还会保留历史数据以追踪趋势(例如,某个测试反复失败)。我们还可以集成Allure
报告或自定义仪表板,以获得更丰富的结果——Jenkins 拥有一个 Allure 插件,可以捕获每个测试用例的详细步骤和屏幕截图。报告阶段还可以合并来自
Web、移动和 API 测试的结果,以生成统一的报告。
反馈和通知:收集结果后,可以配置 Jenkins 发送通知。例如,如果管道是拉取请求验证的一部分,Jenkins
会将状态(通过/失败)发布到版本控制。如果是夜间运行,Jenkins 可以通过电子邮件向团队发送摘要报告,或通过
Webhook 发送钉钉/企业微信消息。报告会指出任何新的故障,并链接到详细报告以供调查。由于我们的系统是自主的,理想情况下,每个故障都对应一个真实的缺陷或与需求的偏差。实际上,如果
AI 出现错误(误报测试),则需要处理——管道可以使用标识符标记 AI生成的测试,以便团队知道它们是自动生成的,如果失败,可能需要进行审查。然而,随着时间的推移,反馈循环会重新训练
AI,以提高测试准确性,从而最大限度地减少此类问题。
流水线集成: Jenkins 流水线可以将此测试阶段整合到更大的 CI/CD 流程中。例如,部署到测试环境后,触发自主测试,如果全部通过,则继续部署到生产环境。由于测试源自需求,因此它们充当着控制发布的验收测试。全自动流水线确保从需求定义到代码发布的整个验证过程持续进行且无需手动干预。
Jenkins 作为行业标准的 CI 服务器,为自动化流程带来了可靠性。它将持续运行这些 AI 驱动的测试并呈现结果。使用标准化报告
(JUnit) 意味着我们能够利用 Jenkins 的现有功能来可视化结果(表格、随时间变化的通过/失败测试图表等)。这避免了从头构建自定义报告工具的需要,并符合
CI 透明度的最佳实践。
六、技术栈和工具推荐
为了实现上述解决方案,我们建议为每个组件配备以下工具、框架和服务。这些都是各自领域中经过验证的技术,可以集成在一起形成完整的
AI 驱动测试系统。
梳理出来的技术栈:
参考表格:
组件/层 |
系统中的角色 |
推荐技术 |
需求解析与自然语言处理 |
摄取并理解 PRD(Word、飞书文档页面)。 |
- 文件解析:使用 Python docx/PDF 库、飞书文档 API 检索内容。-
NLP:使用大型语言模型(例如Claude-3.7、GPT-4o、Deepseek,或经过微调的llama模型)来读取和解释需求。-
提示工程:定制提示以提取特征并生成测试用例(例如,指示 LLM 为每个需求输出结构化场景)。 |
AI测试用例生成 |
从需求中得出全面的测试场景和步骤。 |
- 生成式AI生成详细的测试用例(涵盖预期行为和边缘案例)。- 知识集成:检索领域知识或过去类似的测试用例以增强生成能力(RAG
方法,使用需求/测试向量存储)。- 测试用例存储库:存储生成的用例(以 JSON/YAML/Toml
或测试管理工具格式),以便追溯和审查。 |
自动脚本创建 |
将测试用例转化为可执行的测试脚本(代码)。 |
- 框架: Selenium WebDriver/Playwright/Browser
Use(用于 Web UI)、Appium(用于移动)、HTTP 客户端或REST Assured(用于
API)- 实际对 AUT 执行操作。
- 语言:使用具有广泛支持的语言(例如Python + PyTest或Java + TestNG/JUnit)来实现测试。-
AI 代码生成:利用 AI 编码模型(如 Deepseek/OpenAI)从测试步骤生成自动化代码,或使用基于模板的代码生成器将高级操作映射到代码片段。 |
自我修复机制 |
在运行时检测并适应UI 变化以防止测试中断。 |
- 动态定位器:实现灵活的定位器策略(多属性、模糊匹配),以便在一个选择器失效时尝试其他方案。(或者,也可以参考Testim或Katalon等内置自愈功能的工具进行设计。)-
AI 元素识别:利用 AI/ML 根据上下文识别元素(例如,在元素标签上进行相似性搜索,或在
DOM 发生变化时进行视觉提示)。- 错误恢复:出现故障时,使用逻辑重新加载页面、重试操作或调用LLM
提出解决方案(例如,"未找到元素 - 找到带有'购买'而不是'立即购买'文本的按钮")。
|
测试执行编排 |
在所需的平台/环境上大规模运行测试。 |
- 使用Jenkins进行持续集成 (CI) 编排(管道即代码)。- 并行运行:利用 Jenkins
并行阶段或测试框架线程进行并发执行(例如,跨浏览器/设备并行运行测试)。- Selenium
Grid/Playwright Grid:将 Web 测试分发到不同浏览器的节点/容器中。将浏览器
Docker 化以确保一致性。- 设备农场:使用阿里云EMAS、BrowserStack、Sauce
Labs或AWS Device Farm等云服务,在多台设备上并行执行移动和跨浏览器测试,无需维护物理实验室。 |
报告和管道集成 |
汇总结果并与 CI/CD 管道集成。 |
- JUnit XML 报告:测试输出标准 JUnit 格式的结果,Jenkins 会解析这些结果以显示通过/失败趋势。-
Allure报告:生成丰富的 HTML 测试报告(包含步骤、屏幕截图),并通过 Jenkins
Allure 插件发布,以获得更深入的洞察。- 仪表板:使用Jenkins 插件(例如,测试结果分析器)可视化历史记录和失败趋势。可与项目管理集成(将结果链接到需求
ID)。- 通知: Jenkins电子邮件或钉钉/企业微信插件可自动将测试结果通知利益相关者,并在发生故障时发出警报。 |
七、结论
最后我们来回顾一下整个AI驱动的自动化测试的流程:
通过将先进的AI组件与强大的测试自动化框架相结合,该解决方案实现了端到端的自动化测试 ——从项目需求(PRD)理解到结果报告——完全自主。
该架构确保AI将需求彻底转换为测试用例,测试脚本通过自我修复机制适应应用程序的变化,并跨 Web、移动和
API 平台并行执行以获得快速反馈。
Jenkins 集成完成了闭环,将所有内容整合到一个连续的流水线中,团队可以随时获取结果。这种系统化方法利用成熟的工具和AI模型来交付生产级的自主测试系统,该系统可以极大地提高软件质量和交付速度,同时最大限度地减少人工干预。
|