十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用 Event Timings 与 getLogEvents 收集 Appium 会话命令的执行耗时?

如何用 Event Timings 与 getLogEvents 收集 Appium 会话命令的执行耗时? 如何用 Event Timings 与 getLogEvents 收集 Appium 会话命令的执行耗时【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium如果你需要知道一次 Appium 会话里每条 WebDriver 命令各花了多少时间、会话各阶段事件发生在什么时刻Appium 自带了 Event Timings 机制服务器会为会话内执行的每条命令记录 Appium 内部命令名与起止时间再通过getLogEvents接口POST /session/:sessionId/appium/events把整段事件历史取回来。这篇文章给出从零到拿到可计算耗时的完整操作路径创建会话、执行命令、可选记录自定义检查点、在结束会话前取出数据、解读响应。前置条件来自文档本身一个已在另一终端运行中的 Appium 服务器JS 示例测试中连接地址为localhost:4723可用环境变量APPIUM_HOST/APPIUM_PORT覆盖能创建出一个真实会话任意 driver。下文的会话参数直接取自仓库中的示例代码针对 Android UiAutomator2 驱动的内建 Settings 应用。相关文档Event Timings 指南、Appium Protocol API 参考、Session 能力表。创建带事件记录的会话命令耗时不需要任何额外配置就会被记录getLogEvents响应中的commands键始终包含。用文档中 W3C 会话创建接口发起会话参数复用示例测试的 capabilitiescurl -s -X POST http://localhost:4723/session \ -H Content-Type: application/json \ -d { capabilities: { alwaysMatch: { platformName: Android, appium:automationName: UiAutomator2, appium:deviceName: Android, appium:appPackage: com.android.settings, appium:appActivity: .Settings } } }记下响应中的会话 ID下文所有命令里的session_id都替换为这个值。关于历史上提到的appium:eventTimingscapabilityEvent Timings 指南说设置它为true会开启事件记录但当前能力表已把它标记为 deprecated 并明确建议使用getLogEvents端点两处说法不一致以 API 参考为准调用getLogEvents本身不依赖该 capability。执行命令耗时自动进入 commands 列表会话建立后正常执行你的测试命令即可。每执行一条命令服务器就在事件历史里追加一条记录Appium 内部命令名指南举的例子是click加上开始处理时间与处理完成时间毫秒 Unix 时间戳。这里用API 参考中已定义的getSettings端点作为一条示例命令curl -s http://localhost:4723/session/session_id/appium/settings之后可以像平时一样继续执行 find、click 等测试步骤不需要为计时做额外调用。可选用 logCustomEvent 打自定义检查点如果想在时间轴上标记自己的业务节点例如某个操作前后可以调用 logCustomEventPOST /session/:sessionId/appium/log_event。该接口有两个必填参数vendor用作命名空间前缀和event事件名curl -s -X POST http://localhost:4723/session/session_id/appium/log_event \ -H Content-Type: application/json \ -d {vendor: myapp, event: before_click}服务器会保存该事件的时间戳稍后取回时以myapp:before_click这个带命名空间的键出现。这一步是可选的不执行它也不影响命令耗时的采集。在结束会话前调用 getLogEvents 取回数据指南明确说明POST /session/:id/appium/events只能返回调用时已经发生的事件所以想拿到整个会话的数据最佳时机是退出会话之前。调用 getLogEventscurl -s -X POST http://localhost:4723/session/session_id/appium/events \ -H Content-Type: application/json \ -d {}该端点支持可选的type参数string 或 arraystring用于只返回指定类型的事件不传或传空则返回全部事件。只取命令耗时和某个自定义事件时可以这样过滤curl -s -X POST http://localhost:4723/session/session_id/appium/events \ -H Content-Type: application/json \ -d {type: [myapp:before_click]}取到数据后再正常结束会话客户端如 WebdriverIO 中即driver.deleteSession()。指南还提到具体客户端库可能已封装此调用例如driver.logs.events或类似 API取决于所用客户端。响应结构、成功判定与耗时计算API 参考给出的示例响应如下文档示例事件类型名与数值均为示意{ commands: [ { cmd: getStatus, startTime: 1756887645447, endTime: 1756887645454 } ], driverevent: [1756887645454], namespace:event: [1756887645454] }响应对象的键分三类commands始终包含在响应中。值是对象数组每个对象含cmd执行的命令名、startTime与endTime毫秒 Unix 时间戳非命名空间键如示例中的driverevent由 driver/plugin 实现自定义值是事件时间戳数组。各 driver 定义自己的事件类型文档没有完整清单——指南建议直接拿真实会话的响应来查看自己 driver 会产出哪些事件类型如newSessionRequested、newSessionStarted带命名空间的键如示例中的namespace:event由logCustomEvent添加也可能由 driver/plugin 提供值同样是时间戳数组。成功判定与可做的计算都以文档明确写出的内容为准响应是对象且含commands数组其中每条命令都有cmd、startTime、endTime三个字段指南写明可以用这些数据计算事件之间的时间间隔、事件严格时间线或某类命令平均耗时的统计信息。以上述文档示例数据为例getStatus的耗时即endTime - startTime 1756887645454 − 1756887645447 7 ms仅演示算法真实值以你的会话为准带type过滤的调用只返回所请求类型的键通过logCustomEvent打过的事件会出现在vendor:event键下值为毫秒时间戳数组。Appium 团队还维护了一个事件时间解析工具appium-event-parser可以从 event timings 输出生成各类报告工具仓库位于 Appium 官方项目生态中本文不附外部链接。已知限制与文档差异capability 状态不一致Event Timings 指南把该功能描述为由appium:eventTimingscapability 控制能力表则将appium:eventTimings标记为 deprecated建议改用getLogEvents端点。按当前 API 参考的操作路径创建会话 → 执行命令 → 调用getLogEvents即可完成采集无需设置该 capability。历史行为指南注明过去事件曾作为GET /session/:id响应的一部分返回该方式已被getLogEvents取代。数据窗口getLogEvents只返回调用时刻之前发生的事件会话中途多次调用拿到的是逐步增长的历史而非全量快照要整会话数据就在退出前取最后一次。【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表