自动化测试相关协议深度剖析及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 流程通常包括以下几个步骤:
- 代码提交:开发人员将代码提交到版本控制系统。
- 触发构建:Pipeline 监测到代码变更后,触发构建任务。
- 环境准备:创建测试环境,安装必要的依赖和软件。
- 测试执行:使用 Selenium、Appium 等工具执行测试用例。
- 结果报告:生成测试报告,展示测试结果。
未来流程设想
引入 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功能:在设备设置中开启Wi-Fi主开关(即使未连接路由器) 关闭冲突功能:若已开启「热点共享」或连接到其他Wi-Fi网络,需先关闭相关功能以避免硬件占. <!-- Wi-Fi Direct 核心权限…...
Java 动态代理教程(JDK 动态代理)(以RPC 过程为例)
1. 什么是动态代理 在运行时为指定的接口自动生成代理对象,并通过 invoke 方法增强了这些对象的功能 2. 两个核心组件 java.lang.reflect.Proxy类 这个类提供了方法:newProxyInstance()用来创建一个代理对象 public static Object newProxyInstance(…...
【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】
1. 背景 我们会在很多资料上看到 BluetoothPhoneService 类,但是我们在实际 aosp 中确找不到具体的实现, 这是为何? 这是一个很好的问题!虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念,但…...
【mongodb】数据库操作
目录 1. 查看所有数据库2. 切换到指定数据库(若数据库不存在,则创建)3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库(若数据库不存在,则…...
【Harmony】文本公共接口EditMenuOptions的使用
文章目录 一、EditMenuOptions介绍二、相关接口介绍2.1、editMenuOptions2.2、EditMenuOptionsonCreateMenu函数说明onMenuItemClick函数说明 2.3、TextRange对象说明2.4、TextMenuItem对象说明2.5、TextMenuItemId属性ofequals 三、简单案例 一、EditMenuOptions介绍 EditMen…...
