@markless/analyzer
@markless/analyzer 是浏览器通道不变检查Markless
应用程序。它转换应用程序拥有的路由/动作策略和浏览器证据
分为MLA不变结果和版本化判决报告。包的根目录是
runtime-agnostic;可选 @markless/analyzer/playwright 入口点集合
来自剧作家的证据 Page.
消费者应该将分析器检查作为合并阻塞应用程序或控制来运行 盖茨,拥有他们的矩阵,策略,预算和持久收据,并保留 更强的特定于包的断言:在现有的基础上添加分析器证据 定制证明,建立宇称,然后只删除重复的机制——永远不会 用较弱的一般性结论替换较强的断言。
浏览器不变量
浏览器通道当前发出遗留 BQA-* 别名,
normalizeInvariantId 和 createVerdictReport 规范化为以下MLA
id。新的持久化判决使用规范id。
-
MLA-I1-CONSOLE检查捕获的console.error和未捕获pageerror操作窗口的条目。失败意味着页面至少报告了一个错误 浏览器错误。 -
MLA-I2-NETWORK生成的请求记录classifyRequest,再加上 network-liveness错误。根据消费者已知的证据进行评估 文档路径和特定阶段的API契约;失败意味着请求失败 未申报、不成功、畸形或在测量窗口后泄漏。 -
MLA-I3-BOUNDARY-MISSING,MLA-I3-PENDING-TIMEOUT,MLA-I3-REJECTED检查debug-channelBoundarySnapshot与行动的值相对PendingPolicy期望拒绝边界列表。它们分别表示 图读或快照丢失,边界超出了自己的活度 策略,或者发生了意外的拒绝。默认的活动截止日期为 归QA_LIVENESS_DEADLINE_MS在src/invariants.ts. -
MLA-I4-WIRING-MISSING和MLA-I4-UNCLASSIFIED检查可见语义 交互候选项和调试通道的交互解释。一个 失败意味着所需的事件没有有效的框架注册(包括 router delegation for Markless links),或者一个可聚焦/ARIA候选对象没有 可识别语义或矩阵声明的事件。标记的发现 报告消费者拥有的已知审计,而不会导致结果阻塞。 -
MLA-I5-BOOTSTRAP-BUDGET和MLA-I5-ACTION-BUDGET比较同源V8 使用消费者提供的执行javascript字节AnalyzerBudgets. 一个失败 指测量的自举或作用超过其提供的上限;这个 包不拥有应用程序预算值。
MLA缝段
MLA-S1-PRELOAD-INTEGRITY
evaluatePreloadIntegrity 使用声明的模块预加载url和阶段性的
引导、导航和操作请求观察。交互失败时
模块在操作窗口中获取,而不是预先加载;
导航允许目的地加载,直到声明的解决点和失败
之后的模块加载。已声明但从未加载的预加载作为警告返回,
不是不变的失败。
MLA-S2-PAYLOAD-WIRING
parsePayloadEventClaims 从服务中读取事件声明 markless/view 数据和
初始或流臂记录。 reconcilePayloadWiring 比较这些说法
使用运行时调试通道注册。失败意味着承诺的有效载荷失效
运行时未确认的事件注册。无人认领的登记是
单独返回 runtimeOnly;运行时生成的CSR、回调-prop,以及
路由器注册不会被视为失败。
MLA-S3-LOCATOR-RESOLUTION
locatorPlansFromView 派生由服务对象表示的定位器类型的计划
视图和 evaluateLocatorResolution 遍历调用者提供的DOM根
WalkableDomAdapter. 每个计划都必须精确地解析到一个具有预期的节点
形状。零匹配或模糊匹配使不变量失效;不能扩展的种类
从所服务的有效负载中列出 coverage.skipped 而不是沉默
索赔包括在内。
MLA-S4-STRIP-GUARANTEE
evaluateDebugChannelStrip 扫描HTML和JavaScript文本工件
DEBUG_CHANNEL_SENTINELS. 如果任何哨兵仍然存在,则未标记的构建失败。一个
标记的构建是积极的控制,如果没有标记则失败。导入
从 @markless/analyzer;不要将其协议字符串复制到
消费者。
覆盖车道
executedJavaScriptBytes 消耗V8覆盖条目,合并重叠
正范围,减去嵌套的零计数范围,并计算UTF-8字节
同源脚本。缺少同源计数条目的源文本是
错误。 collectExecutedJavaScriptBytes 和 measurePageWindow 提供
剧作家集成。消费者提供的引导和行动天花板通过
来 compareExecutedBytes 或者 evaluateActionInvariants.
路线/行动矩阵
validateMatrixDocument 验证应用程序拥有的 RouteActionMatrix,
包括fixture url、动作定位器和操作、API契约、设置
依赖项、挂起/拒绝策略、导航意图和重置安全性。
assertMatrixFileSetEquality 能否另外证明矩阵路由文件相等
消费者发现的路由文件。验证持久化JSON
route-action-matrix.schema.json;导入
TypeScript契约和验证器,而不是在
利用。
定位器和有效载荷收集
剧作家帮助者 collectLocatorResolution 和 collectPayloadWiring 适应
将实时文档发送到便携式S3和S2评估器。他们互相检查
data-async-container,它自己的有效负载脚本,以及Markless调试通道
分析器所需的子集。缺失的或不兼容的通道是一个集合
错误,不是传递不变量。
剧作家司机
使用时安装剧作家 @markless/analyzer/playwright. ConsoleLedger 和
RequestLedger 保留控制台和分类请求证据;
waitForBoundaryLiveness, inventoryCandidates,
collectCandidateExpectations 收集浏览器通道的证据;
performMatrixAction 执行一个经过验证的矩阵动作;和 measurePageWindow
结合了动作窗口,活跃性,网络安静,候选库存,V8
覆盖,以及S1评估。 collectServedBuildArtifacts 提供文本工件
S4。还为负控制测试导出故障帮助程序。
见证判决和报告
createWitnessVerdict 将证人箱结果转换为
MLA-EXT-WITNESS. 将它与浏览器和接缝结果结合起来
createVerdictReport 或者 appendInvariantResult. validateVerdictReport 验证
当前报告形状,而 readVerdictReport 还升级了遗留的浏览器qa
报告和规范化被接受 BQA-* 别名。报告版本和接受情况
拥有不变id src/contracts.ts 和 src/verdicts.ts.
最小的集成
此示例假设调用方已经打开了启用调试的应用程序页面。 收集两次缝检,验证带钢正控制,集成一次 见证结果,并创造一个规范的判决。
import {
createVerdictReport,
createWitnessVerdict,
evaluateDebugChannelStrip,
} from '@markless/analyzer';
import {
collectLocatorResolution,
collectPayloadWiring,
collectServedBuildArtifacts,
} from '@markless/analyzer/playwright';
import type { Page } from 'playwright';
export async function analyze(page: Page) {
const [payload, locators, artifacts] = await Promise.all([
collectPayloadWiring(page),
collectLocatorResolution(page),
collectServedBuildArtifacts(page),
]);
const strip = evaluateDebugChannelStrip({ debugEnabled: true, artifacts });
const witness = createWitnessVerdict({
name: 'application-browser-lane',
tags: ['browser'],
passed: true,
receiptPath: 'artifacts/application-browser-lane.json',
});
return createVerdictReport({
source: 'application',
lane: 'browser-invariants',
results: [payload.invariant, locators.invariant, strip, witness],
});
}