当前位置: 首页 > article >正文

自动化测试相关协议深度剖析及A2A、MCP协议自动化测试应用展望

一、不同协议底层逻辑关联分析

1. OPENAPI协议

OPENAPI 协议核心在于定义 API 的规范结构,它使用 YAML 或 JSON 格式来描述 API 的端点、请求参数、响应格式等信息。其底层逻辑是构建一个清晰、标准化的 API 描述文档,方便不同的客户端和服务端进行对接。它不直接参与通信过程,而是为通信双方提供了一个契约,规定了如何进行交互。

2. Selenium、Appium相关协议

Selenium 用于 Web 应用测试,Appium 用于移动应用测试。它们基于 WebDriver 协议,该协议定义了客户端(测试脚本)与服务端(浏览器驱动或移动设备驱动)之间的通信规则。客户端通过发送 HTTP 请求到服务端,服务端根据请求执行相应的操作,如打开页面、点击元素等,并将结果返回给客户端。其底层逻辑是基于 HTTP 协议的请求 - 响应模式。

3. Playwright协议

Playwright 同样采用客户端 - 服务端架构。它的底层逻辑与 Selenium 类似,也是通过 HTTP 协议进行通信。不过,Playwright 对不同浏览器的驱动进行了封装,提供了统一的 API,使得测试脚本可以更方便地在不同浏览器上运行。它的优势在于对浏览器的控制更加精细,能够处理更多的现代 Web 技术。

4. Pipeline上Selenium Grid协议

Selenium Grid 是 Selenium 的扩展,用于分布式测试。它的底层逻辑基于 Selenium WebDriver 协议,同时引入了中心节点(Hub)和多个节点(Node)的概念。Hub 作为服务端接收客户端的测试请求,然后根据节点的状态和配置将请求分配到合适的 Node 上执行。节点之间通过网络进行通信,实现测试任务的并行执行。

5. A2A协议

A2A 协议基于客户端 - 服务端架构,用于智能体之间的通信和协作。其底层逻辑可以基于多种网络协议,如 HTTP、WebSocket 等。智能体之间通过发送和接收消息来交换信息和协调任务。A2A 协议强调智能体的自主性和协作性,能够根据不同的场景和需求动态调整通信策略。

6. MCP协议

假设 MCP 协议通信底层逻辑基于 OPENAPI 协议。这意味着 MCP 协议在 OPENAPI 定义的 API 规范基础上,构建了自己的通信机制。它可能使用 OPENAPI 来描述服务的接口和数据格式,然后通过 HTTP 或其他协议进行实际的通信。MCP 协议可以在客户端和服务端之间传递测试任务、结果等信息,实现自动化测试的远程控制和管理。

底层逻辑关联总结

  • Selenium、Appium 和 Playwright 都基于 WebDriver 协议,通过 HTTP 进行通信,主要用于 UI 自动化测试。
  • Selenium Grid 是 Selenium 的扩展,在 WebDriver 协议基础上实现了分布式测试的任务分配和管理。
  • A2A 协议为智能体之间的协作提供了通信机制,底层可基于多种网络协议。
  • MCP 协议基于 OPENAPI 协议构建,利用 OPENAPI 的规范来定义通信接口,实现自动化测试的远程控制。

二、A2A协议和MCP协议对传统自动化测试流程的影响及未来流程设想

目前Pipeline流程

目前的自动化测试 Pipeline 流程通常包括以下几个步骤:

  1. 代码提交:开发人员将代码提交到版本控制系统。
  2. 触发构建:Pipeline 监测到代码变更后,触发构建任务。
  3. 环境准备:创建测试环境,安装必要的依赖和软件。
  4. 测试执行:使用 Selenium、Appium 等工具执行测试用例。
  5. 结果报告:生成测试报告,展示测试结果。

未来流程设想

引入 A2A 协议和 MCP 协议后,未来的自动化测试 Pipeline 流程可能如下:

1. 智能体通信目的

智能体之间通信的目的主要是为了高效协作完成自动化测试任务。例如:

  • 任务分配与协调:Master Agent 节点根据不同子 Agent 的能力、负载情况等信息,将测试任务合理分配给子 Agent。子 Agent 收到任务后,若发现自身资源不足或遇到无法处理的情况,可与 Master Agent 或其他子 Agent 通信,请求协助或重新分配任务。
  • 信息共享:智能体之间可以共享测试数据、测试结果、环境信息等。比如,一个子 Agent 在测试过程中发现某个特定的异常情况,它可以将该信息及时共享给其他相关的子 Agent,避免重复错误,提高整体测试效率。
  • 状态同步:确保各个智能体的状态一致,避免因状态不一致导致的测试冲突。例如,在分布式测试环境中,所有子 Agent 需要知道当前测试的整体进度和状态。
2. 通过 MCP 进行测试的方式

MCP 协议基于 OPENAPI 规范,在自动化测试中可以这样使用:

  • 任务传递:Master Agent 节点将测试任务按照 MCP 协议定义的接口和数据格式,通过 HTTP 或其他协议发送给子 Agent。测试任务可以包含测试用例的详细信息,如测试目标、测试步骤、预期结果等。
  • 执行控制:子 Agent 接收到测试任务后,根据 MCP 协议与测试目标(如浏览器、移动设备等)进行通信。例如,子 Agent 可以通过 MCP 协议发送请求,控制浏览器打开指定的页面、点击元素、输入数据等操作。
  • 结果反馈:子 Agent 在执行测试任务过程中,将测试结果按照 MCP 协议的要求反馈给 Master Agent 节点。测试结果可以包括测试是否通过、错误信息、执行时间等。
3. 使用自然语言的可能性

目前像 Playwright 等工具已经开始支持一定程度的自然语言处理,未来 A2A 和 MCP 结合也有很大的使用自然语言的可能性。

  • 任务下达:测试人员可以使用自然语言向 Master Agent 节点描述测试任务,如“测试登录页面的用户名和密码输入框是否正常工作”。Master Agent 节点通过自然语言处理技术解析任务,并将其转化为具体的测试用例,然后分配给子 Agent 执行。
  • 结果解读:子 Agent 在反馈测试结果时,可以使用自然语言进行描述。例如,“登录页面输入错误密码后,提示信息显示不正确”,这样更便于测试人员理解和分析。

对比分析

  • 智能化:引入 A2A 协议后,测试任务的分配和协调更加智能,能够根据不同的测试场景和资源情况进行动态调整。
  • 远程控制:MCP 协议使得测试任务可以在远程环境中执行,提高了测试的灵活性和可扩展性。
  • 协作性:A2A 协议促进了不同智能体之间的协作,使得测试过程更加高效和准确。

三、客户端和服务端A2A代码交互示例

通过以下示例,帮助我们更好的理解协议

client端

import asyncio
from uuid import uuid4
from common.client import A2AClient
from common.types import AgentCard
from common.resolver import A2ACardResolverasync def main():try:# 解析智能体卡片card_resolver = A2ACardResolver("http://localhost:10000")card = card_resolver.get_agent_card()print("======= Agent Card ========")print(card.model_dump_json(exclude_none=True))# 创建 A2A 客户端client = A2AClient(agent_card=card)# 构建请求负载payload = {"id": uuid4().hex,"sessionId": uuid4().hex,"acceptedOutputModes": ["text"],"message": {"role": "user","parts": [{"type": "text","text": "执行登录测试用例",}],},}# 发送任务并获取结果ret = await client.send_task(payload=payload)print(ret.model_dump_json())except Exception as e:print(f"Error occurred: {str(e)}")if __name__ == "__main__":asyncio.run(main())

服务端

from common.server import A2AServer
from common.types import AgentCard, AgentCapabilities, AgentSkill, MissingAPIKeyError
from common.utils.push_notification_auth import PushNotificationSenderAuth
from agents.langgraph.task_manager import AgentTaskManager
from agents.langgraph.agent import CurrencyAgent
import click
import os
import logging
from dotenv import load_dotenv# 日志配置
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)# 加载环境变量
load_dotenv()@click.command()
@click.option("--host", "host", default="localhost")
@click.option("--port", "port", default=10000)
def main(host, port):"""Starts the A2A Agent server."""try:# 定义智能体能力capabilities = AgentCapabilities(streaming=True, pushNotifications=True)# 定义技能skill1 = AgentSkill(id="skill1",name="测试用例执行技能",description="执行指定的测试用例",tags=["测试用例执行"],examples=["执行登录测试用例"])# 创建智能体卡片agent_card = AgentCard(name="自动化测试智能体",description="执行自动化测试任务",url=f"http://{host}:{port}/",version="1.0.0",defaultInputModes=["text"],defaultOutputModes=["text"],capabilities=capabilities,skills=[skill1],)# 推送通知认证notification_sender_auth = PushNotificationSenderAuth()notification_sender_auth.generate_jwk()# 创建任务管理器task_manager = AgentTaskManager(agent=CurrencyAgent(), notification_sender_auth=notification_sender_auth)# 创建 A2A 服务器server = A2AServer(agent_card=agent_card,task_manager=task_manager,host=host,port=port,)# 添加 JWKS 端点server.app.add_route("/.well-known/jwks.json", notification_sender_auth.handle_jwks_endpoint, methods=["GET"])logger.info(f"Starting server on {host}:{port}")server.start()except MissingAPIKeyError as e:logger.error(f"Error: {e}")exit(1)except Exception as e:logger.error(f"An error occurred during server startup: {e}")exit(1)if __name__ == "__main__":main()

代码说明

  • 服务端代码(server.py):创建了一个 A2A 服务器,定义了智能体的能力和技能,设置了推送通知认证,添加了 JWKS 端点,并启动服务器。
  • 客户端代码(client.py):解析智能体卡片,创建 A2A 客户端,构建请求负载并发送测试任务,最后打印服务端的响应结果。

相关文章:

自动化测试相关协议深度剖析及A2A、MCP协议自动化测试应用展望

一、不同协议底层逻辑关联分析 1. OPENAPI协议 OPENAPI 协议核心在于定义 API 的规范结构,它使用 YAML 或 JSON 格式来描述 API 的端点、请求参数、响应格式等信息。其底层逻辑是构建一个清晰、标准化的 API 描述文档,方便不同的客户端和服务端进行对接…...

ReAct、CoT 和 ToT:大模型提示词推理架构的对比分析

ReAct、CoT 和 ToT:大模型提示词推理架构的对比分析 在大型语言模型(LLM)的研究与应用中,如何有效提升模型在复杂任务上的推理能力是关键问题之一。目前,ReAct(Reasoning and Acting)、CoT&…...

用魔法打败魔法——获取软件安装路径

用魔法打败魔法——获取软件安装路径 🌟嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 背景普通方法用魔法一句话 1.首先新建‘PC自动化应…...

2024-04-19| Java: Documented注解学习 JavaDoc

在 Java 中,Documented 是一个元注解(meta-annotation),用于标记其他注解,表明这些注解应该被包含在 JavaDoc 文档中。以下是关于 Documented 注解的作用的简要说明: 作用 记录注解信息到 JavaDoc&#x…...

Spring Boot常用注解全解析:从入门到实战

🌱 Spring Boot常用注解全解析:从入门到实战 #SpringBoot核心 #注解详解 #开发技巧 #高效编程 一、核心启动与配置注解 1. SpringBootApplication 作用:标记主启动类,整合了Configuration、EnableAutoConfiguration和Component…...

【重学Android】1.关于@Composer注解的一点知识笔记

最新因为一些原因,开始重新学习Android及kotlin编程,也觉得可以顺带记录下这个过程中的一些知识点,也可以用作日后自己查找复习。 Composable 注解在 Android 开发中的使用 Composable 是 Jetpack Compose(Android 的现代声明式…...

【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning

Probabilistic Forecasts of Bike-Sharing Systems forJourney Planning abstract 我们研究了对共享单车系统(BSS)车站未来自行车可用性进行预测的问题。这是相关的,以便提出建议,保证用户能够进行旅行的概率足够高。为此&#x…...

大数据平台简介

一、分布式系统基础架构 (一)定义与核心特征 分布式系统是由多台计算机(节点)通过网络协作组成的系统,对外表现为一个统一整体。其核心特征包括: 去中心化:节点平等或分角色协作(如…...

加一:从简单问题到复杂边界的深度思考

加一:从简单问题到复杂边界的深度思考 引言 在算法世界里,有些问题看似简单,实则暗藏玄机,其中“加一”问题就是一个典型例子。所谓“加一”,通常指的是给一个由数字组成的数组表示的整数加一,这听起来简…...

高精度算法(加、减、乘、除、阶乘和)​

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 唯有主动付出,才有丰富的果…...

实战设计模式之备忘录模式

概述 与解释器模式、迭代器模式一样,备忘录模式也是一种行为设计模式。备忘录模式允许我们保存一个对象的状态,并在稍后恢复到这个状态。该模式非常适合于需要回滚、撤销或历史记录等功能的应用场景。通过使用备忘录模式,开发者可以轻松添加诸…...

keil5 µVision 升级为V5.40.0.0:增加了对STM32CubeMX作为全局生成器的支持,主要有哪些好处?

在Keil5 μVision V5.40.0.0版本中,增加了对STM32CubeMX作为全局生成器的支持,这一更新主要带来了以下三方面的提升: 开发流程整合STM32CubeMX原本就支持生成Keil项目代码,但新版本将这一集成升级为“全局生成器”级别,意味着STM32CubeMX生成的代码能直接成为Keil项目的核…...

吉尔吉斯斯坦工商会代表团赴齐河德瑞新能源汽车考察

德州齐河,2025年4月15日电 时中美贸易突变之际,乘国家一带一路之风。 展中国新能源之宏图,塑国贸体系之新方向。 今日上午,吉尔吉斯斯坦共和国工商会代表团一行三人受邀抵达济南,开启对德瑞新能源科技有限公司&…...

无人机在农业中的应用与挑战!

一、无人机在农业中的作用 1. 提升作业效率与降低成本 无人机在喷洒农药、播种、施肥、吊运等环节显著提升效率。例如,湖北秭归县使用大疆T100无人机吊运脐橙,单次85公斤的运输任务仅需2分钟,而人工需1小时,综合成本降低250元…...

放松大脑的方法

帮助一个人放松大脑,需要结合生理调节、心理技巧和环境优化。以下是一些科学有效的方法,涵盖即时缓解和长期习惯培养: 一、即时放松技巧(快速起效) 1. 深呼吸法(4-7-8呼吸) 方法:吸…...

QT网络拓扑图绘制实验

前言 在网络通讯中,我qt常用的是TCP或者UDP协议,就比方说TCP吧,一台服务器有时可能会和多台客户端相连接,我之前都是处理单链接情况,最近研究图结构的时候,突然就想到了这个问题。那么如何解决这个问题呢&…...

英语四级翻译题练习文章示例

大学正慢慢成为过去吗?Are universiities slowly becoming a thing of the past? 1.1900年前后,法国艺术家让-马克科泰接受委托绘制一组图画,描绘他认为的2000年人们可能过上的生活。Around 1900, the French artist Jean-Marc Cote was commissioned …...

支持中文对齐的命令行表格打印python库——tableprint

文章目录 快速入门 还在为表格中含有中文,命令行打印无法对齐而苦恼吗? 还在为冗长的数据添加代码而抓狂吗? tableprint来了!!!,它完美的解决了上述两个问题,快来试试吧!…...

从《周游记3》演绎歌剧版《菊花台》,周杰伦婚礼曲目意大利文版惊喜亮相

今天(4月19日)22:00,由魔胴西西里咖啡冠名的户外实境互动综艺《周游记3》第四期即将播出。本期节目中,“J式之旅”发起人周杰伦和林暐恒、杜国璋、陈冠霖、陈冠廷,将继续意大利之旅,从那不勒斯的百年老店到…...

生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)

免疫检查点分子与肿瘤免疫治疗 免疫检查点分子与肿瘤免疫治疗-2...

CasualLanguage Model和Seq2Seq模型的区别

**问题1:**Causal Language Modeling 和 Conditional Generation 、Sequence Classification 的区别是什么? 因果语言模型(Causal Language Model): 预测给定文本序列中的下一个字符,一般用于文本生成、补全句子等,模型…...

verilog float mult

module pipe_float_mul(input wire clk ,// 时钟信号input wire en ,// 使能信号input wire rst_n ,// 复位信号input wire round_cfg ,// 决…...

微信小程序调用yolo目标检测模型

目录 后端 前端微信小程序 完整代码 后端 利用Flask,调用目标检测模型,后端代码如下。 # flask_yolo.py from flask import Flask, request, jsonify from ultralytics import YOLO from PIL import Imageapp Flask(__name__) model_path best.p…...

Flink框架十大应用场景

Flink框架适合应用的场景 1. 流式数据处理 Flink框架最常用的应用场景是流式数据处理。流式数据处理是指对实时数据进行处理,以便及时地做出决策。例如,一个电商网站需要对用户的行为进行实时分析,以便根据用户的兴趣和行为推荐商品。Flink框架可以帮助电商网站实时地处理数…...

Crawl4AI:重塑大语言模型数据供给的开源革命者

在AI技术飞速迭代的今天,大型语言模型(LLMs)的进化已从单纯参数竞赛转向数据质量与实时性的深度博弈。传统API接口的僵化、静态数据库的滞后性,正在成为制约AI系统实用价值的桎梏。而Crawl4AI的出现,以开源之力重构了数…...

Android 应用wifi direct连接通信实现

一. 打开Wi-Fi direct 1.必须启用Wi-Fi功能&#xff1a;在设备设置中开启Wi-Fi主开关&#xff08;即使未连接路由器&#xff09; 关闭冲突功能&#xff1a;若已开启「热点共享」或连接到其他Wi-Fi网络&#xff0c;需先关闭相关功能以避免硬件占. <!-- Wi-Fi Direct 核心权限…...

Java 动态代理教程(JDK 动态代理)(以RPC 过程为例)

1. 什么是动态代理 在运行时为指定的接口自动生成代理对象&#xff0c;并通过 invoke 方法增强了这些对象的功能 2. 两个核心组件 java.lang.reflect.Proxy类 这个类提供了方法&#xff1a;newProxyInstance()用来创建一个代理对象 public static Object newProxyInstance(…...

【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】

1. 背景 我们会在很多资料上看到 BluetoothPhoneService 类&#xff0c;但是我们在实际 aosp 中确找不到具体的实现&#xff0c; 这是为何&#xff1f; 这是一个很好的问题&#xff01;虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念&#xff0c;但…...

【mongodb】数据库操作

目录 1. 查看所有数据库2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则创建&#xff09;3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则…...

【Harmony】文本公共接口EditMenuOptions的使用

文章目录 一、EditMenuOptions介绍二、相关接口介绍2.1、editMenuOptions2.2、EditMenuOptionsonCreateMenu函数说明onMenuItemClick函数说明 2.3、TextRange对象说明2.4、TextMenuItem对象说明2.5、TextMenuItemId属性ofequals 三、简单案例 一、EditMenuOptions介绍 EditMen…...