Files
progcode/web/public/assets/editorial/2023/e2e-stability-2023-flake-classification.svg
huncode 3d310bd605
Build and deploy / deploy (push) Successful in 16s
revise August 2023 e2e stability articles
2026-07-31 15:08:57 +03:00

63 lines
5.8 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800" viewBox="0 0 1200 800" role="img" aria-labelledby="title desc">
<title id="title">Классификация flaky e2e-теста без роста timeout</title>
<desc id="desc">Последовательность из четырёх проверок: уникальность selector, semantic readiness, различие initial attempt и retry, evidence конкретной попытки. У каждого шага есть отдельное действие; timeout не является первым решением.</desc>
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0,0 L12,6 L0,12 Z" fill="#486581"/></marker>
</defs>
<rect width="1200" height="800" fill="#f7fafc"/>
<rect x="48" y="42" width="1104" height="84" rx="18" fill="#102a43"/>
<text x="84" y="93" fill="#ffffff" font-family="Arial, sans-serif" font-size="34" font-weight="700">Flaky: классифицировать слой, не повышать timeout</text>
<text x="84" y="116" fill="#d9e2ec" font-family="Arial, sans-serif" font-size="17">Каждый ответ сужает следующую проверку; ни один не объявляет корневую причину.</text>
<path d="M435 252 L435 278" stroke="#486581" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M435 387 L435 413" stroke="#486581" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M435 522 L435 548" stroke="#486581" stroke-width="5" marker-end="url(#arrow)"/>
<g>
<rect x="68" y="156" width="735" height="96" rx="16" fill="#e0f2fe" stroke="#0ea5e9" stroke-width="3"/>
<circle cx="116" cy="204" r="25" fill="#0369a1"/>
<text x="108" y="214" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">1</text>
<text x="160" y="194" fill="#102a43" font-family="Arial, sans-serif" font-size="25" font-weight="700">Selector</text>
<text x="160" y="223" fill="#334e68" font-family="Arial, sans-serif" font-size="20">Locator разрешается ровно в один пользовательский control?</text>
<rect x="852" y="170" width="280" height="67" rx="14" fill="#fff1f2" stroke="#e11d48" stroke-width="2"/>
<text x="874" y="198" fill="#9f1239" font-family="Arial, sans-serif" font-size="20" font-weight="700">Нет → сузить locator</text>
<text x="874" y="220" fill="#9f1239" font-family="Arial, sans-serif" font-size="16">Не трогать readiness.</text>
</g>
<g>
<rect x="68" y="291" width="735" height="96" rx="16" fill="#ecfdf5" stroke="#10b981" stroke-width="3"/>
<circle cx="116" cy="339" r="25" fill="#047857"/>
<text x="108" y="349" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">2</text>
<text x="160" y="329" fill="#102a43" font-family="Arial, sans-serif" font-size="25" font-weight="700">Readiness condition</text>
<text x="160" y="358" fill="#334e68" font-family="Arial, sans-serif" font-size="20">После click виден терминальный пользовательский факт?</text>
<rect x="852" y="305" width="280" height="67" rx="14" fill="#fff7ed" stroke="#f97316" stroke-width="2"/>
<text x="874" y="333" fill="#9a3412" font-family="Arial, sans-serif" font-size="20" font-weight="700">Нет → назвать state</text>
<text x="874" y="355" fill="#9a3412" font-family="Arial, sans-serif" font-size="16">Не ждать spinner или sleep.</text>
</g>
<g>
<rect x="68" y="426" width="735" height="96" rx="16" fill="#eef2ff" stroke="#6366f1" stroke-width="3"/>
<circle cx="116" cy="474" r="25" fill="#4338ca"/>
<text x="108" y="484" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">3</text>
<text x="160" y="464" fill="#102a43" font-family="Arial, sans-serif" font-size="25" font-weight="700">Retry</text>
<text x="160" y="493" fill="#334e68" font-family="Arial, sans-serif" font-size="20">Initial failed, retry passed — это результат двух попыток.</text>
<rect x="852" y="440" width="280" height="67" rx="14" fill="#eef2ff" stroke="#6366f1" stroke-width="2"/>
<text x="874" y="468" fill="#3730a3" font-family="Arial, sans-serif" font-size="20" font-weight="700">Сохранить оба outcome</text>
<text x="874" y="490" fill="#3730a3" font-family="Arial, sans-serif" font-size="16">Не называть retry причиной.</text>
</g>
<g>
<rect x="68" y="561" width="735" height="96" rx="16" fill="#f5f3ff" stroke="#8b5cf6" stroke-width="3"/>
<circle cx="116" cy="609" r="25" fill="#6d28d9"/>
<text x="108" y="619" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">4</text>
<text x="160" y="599" fill="#102a43" font-family="Arial, sans-serif" font-size="25" font-weight="700">Evidence</text>
<text x="160" y="628" fill="#334e68" font-family="Arial, sans-serif" font-size="20">Trace/log/snapshot привязан к номеру попытки и одному вопросу?</text>
<rect x="852" y="575" width="280" height="67" rx="14" fill="#f5f3ff" stroke="#8b5cf6" stroke-width="2"/>
<text x="874" y="603" fill="#5b21b6" font-family="Arial, sans-serif" font-size="20" font-weight="700">Собрать один факт</text>
<text x="874" y="625" fill="#5b21b6" font-family="Arial, sans-serif" font-size="16">Не обещать root cause.</text>
</g>
<rect x="68" y="696" width="1064" height="62" rx="14" fill="#102a43"/>
<text x="96" y="734" fill="#ffffff" font-family="Arial, sans-serif" font-size="23" font-weight="700">Только после этого: малый diff, owner, rollback. Timeout — верхняя граница, не readiness condition.</text>
</svg>