agentic-qe 1.4.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +133 -27
  2. package/.claude/agents/qe-api-contract-validator.md.backup +1148 -0
  3. package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +1148 -0
  4. package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +1123 -0
  5. package/.claude/agents/qe-chaos-engineer.md +142 -23
  6. package/.claude/agents/qe-chaos-engineer.md.backup +808 -0
  7. package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +808 -0
  8. package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +787 -0
  9. package/.claude/agents/qe-code-complexity.md +111 -23
  10. package/.claude/agents/qe-code-complexity.md.backup +291 -0
  11. package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +291 -0
  12. package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +286 -0
  13. package/.claude/agents/qe-coverage-analyzer.md +306 -30
  14. package/.claude/agents/qe-coverage-analyzer.md.backup +467 -0
  15. package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +467 -0
  16. package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +438 -0
  17. package/.claude/agents/qe-deployment-readiness.md +84 -28
  18. package/.claude/agents/qe-deployment-readiness.md.backup +1166 -0
  19. package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +1166 -0
  20. package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +1140 -0
  21. package/.claude/agents/qe-flaky-test-hunter.md +277 -35
  22. package/.claude/agents/qe-flaky-test-hunter.md.backup +1195 -0
  23. package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +1195 -0
  24. package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +1162 -0
  25. package/.claude/agents/qe-fleet-commander.md +126 -23
  26. package/.claude/agents/qe-fleet-commander.md.backup +718 -0
  27. package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +718 -0
  28. package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +697 -0
  29. package/.claude/agents/qe-performance-tester.md +314 -57
  30. package/.claude/agents/qe-performance-tester.md.backup +428 -0
  31. package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +428 -0
  32. package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +372 -0
  33. package/.claude/agents/qe-production-intelligence.md +126 -27
  34. package/.claude/agents/qe-production-intelligence.md.backup +1219 -0
  35. package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +1219 -0
  36. package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +1194 -0
  37. package/.claude/agents/qe-quality-analyzer.md +127 -32
  38. package/.claude/agents/qe-quality-analyzer.md.backup +425 -0
  39. package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +425 -0
  40. package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +394 -0
  41. package/.claude/agents/qe-quality-gate.md +148 -33
  42. package/.claude/agents/qe-quality-gate.md.backup +446 -0
  43. package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +446 -0
  44. package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +415 -0
  45. package/.claude/agents/qe-regression-risk-analyzer.md +78 -27
  46. package/.claude/agents/qe-regression-risk-analyzer.md.backup +1009 -0
  47. package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +1009 -0
  48. package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +984 -0
  49. package/.claude/agents/qe-requirements-validator.md +131 -27
  50. package/.claude/agents/qe-requirements-validator.md.backup +748 -0
  51. package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +748 -0
  52. package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +723 -0
  53. package/.claude/agents/qe-security-scanner.md +137 -62
  54. package/.claude/agents/qe-security-scanner.md.backup +634 -0
  55. package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +634 -0
  56. package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +573 -0
  57. package/.claude/agents/qe-test-data-architect.md +129 -26
  58. package/.claude/agents/qe-test-data-architect.md.backup +1064 -0
  59. package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +1064 -0
  60. package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +1040 -0
  61. package/.claude/agents/qe-test-executor.md +165 -21
  62. package/.claude/agents/qe-test-executor.md.backup +389 -0
  63. package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +389 -0
  64. package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +369 -0
  65. package/.claude/agents/qe-test-generator.md +379 -34
  66. package/.claude/agents/qe-test-generator.md.backup +997 -0
  67. package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +997 -0
  68. package/.claude/agents/qe-visual-tester.md +236 -23
  69. package/.claude/agents/qe-visual-tester.md.backup +777 -0
  70. package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +777 -0
  71. package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +756 -0
  72. package/.claude/agents/subagents/qe-code-reviewer.md +59 -0
  73. package/.claude/agents/subagents/qe-data-generator.md +60 -0
  74. package/.claude/agents/subagents/qe-integration-tester.md +77 -0
  75. package/.claude/agents/subagents/qe-performance-validator.md +55 -0
  76. package/.claude/agents/subagents/qe-security-auditor.md +51 -0
  77. package/.claude/agents/subagents/qe-test-implementer.md +371 -0
  78. package/.claude/agents/subagents/qe-test-refactorer.md +510 -0
  79. package/.claude/agents/subagents/qe-test-writer.md +603 -0
  80. package/.claude/skills/accessibility-testing/SKILL.md +764 -777
  81. package/.claude/skills/agentic-quality-engineering/SKILL.md +0 -6
  82. package/.claude/skills/api-testing-patterns/SKILL.md +0 -12
  83. package/.claude/skills/bug-reporting-excellence/SKILL.md +0 -6
  84. package/.claude/skills/chaos-engineering-resilience/SKILL.md +0 -6
  85. package/.claude/skills/code-review-quality/SKILL.md +0 -6
  86. package/.claude/skills/compatibility-testing/SKILL.md +0 -6
  87. package/.claude/skills/compliance-testing/SKILL.md +0 -6
  88. package/.claude/skills/consultancy-practices/SKILL.md +0 -6
  89. package/.claude/skills/context-driven-testing/SKILL.md +0 -6
  90. package/.claude/skills/contract-testing/SKILL.md +0 -6
  91. package/.claude/skills/database-testing/SKILL.md +0 -6
  92. package/.claude/skills/exploratory-testing-advanced/SKILL.md +0 -6
  93. package/.claude/skills/holistic-testing-pact/SKILL.md +0 -6
  94. package/.claude/skills/localization-testing/SKILL.md +0 -6
  95. package/.claude/skills/mobile-testing/SKILL.md +535 -548
  96. package/.claude/skills/mutation-testing/SKILL.md +0 -6
  97. package/.claude/skills/performance-testing/SKILL.md +0 -6
  98. package/.claude/skills/quality-metrics/SKILL.md +0 -12
  99. package/.claude/skills/refactoring-patterns/SKILL.md +0 -6
  100. package/.claude/skills/regression-testing/SKILL.md +1033 -1045
  101. package/.claude/skills/risk-based-testing/SKILL.md +0 -12
  102. package/.claude/skills/security-testing/SKILL.md +0 -6
  103. package/.claude/skills/shift-left-testing/SKILL.md +529 -535
  104. package/.claude/skills/shift-right-testing/SKILL.md +585 -591
  105. package/.claude/skills/tdd-london-chicago/SKILL.md +0 -6
  106. package/.claude/skills/technical-writing/SKILL.md +0 -6
  107. package/.claude/skills/test-automation-strategy/SKILL.md +0 -6
  108. package/.claude/skills/test-data-management/SKILL.md +1054 -1067
  109. package/.claude/skills/test-design-techniques/SKILL.md +0 -6
  110. package/.claude/skills/test-environment-management/SKILL.md +0 -6
  111. package/.claude/skills/test-reporting-analytics/SKILL.md +0 -6
  112. package/.claude/skills/visual-testing-advanced/SKILL.md +0 -6
  113. package/.claude/skills/xp-practices/SKILL.md +0 -6
  114. package/CHANGELOG.md +397 -5
  115. package/README.md +24 -19
  116. package/dist/cli/commands/init.d.ts +4 -0
  117. package/dist/cli/commands/init.d.ts.map +1 -1
  118. package/dist/cli/commands/init.js +97 -44
  119. package/dist/cli/commands/init.js.map +1 -1
  120. package/dist/mcp/handlers/coordination/index.d.ts +14 -14
  121. package/dist/mcp/handlers/coordination/index.d.ts.map +1 -1
  122. package/dist/mcp/handlers/coordination/index.js +14 -14
  123. package/dist/mcp/handlers/coordination/index.js.map +1 -1
  124. package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
  125. package/dist/mcp/handlers/phase2/Phase2Tools.js +39 -10
  126. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
  127. package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +63 -0
  128. package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -0
  129. package/dist/mcp/handlers/phase3/Phase3DomainTools.js +885 -0
  130. package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -0
  131. package/dist/mcp/handlers/phase3/index.d.ts +6 -0
  132. package/dist/mcp/handlers/phase3/index.d.ts.map +1 -0
  133. package/dist/mcp/handlers/phase3/index.js +10 -0
  134. package/dist/mcp/handlers/phase3/index.js.map +1 -0
  135. package/dist/mcp/handlers/prediction/index.d.ts +10 -10
  136. package/dist/mcp/handlers/prediction/index.d.ts.map +1 -1
  137. package/dist/mcp/handlers/prediction/index.js +10 -10
  138. package/dist/mcp/handlers/prediction/index.js.map +1 -1
  139. package/dist/mcp/handlers/security/check-authz.d.ts +152 -0
  140. package/dist/mcp/handlers/security/check-authz.d.ts.map +1 -0
  141. package/dist/mcp/handlers/security/check-authz.js +434 -0
  142. package/dist/mcp/handlers/security/check-authz.js.map +1 -0
  143. package/dist/mcp/handlers/security/generate-report.d.ts +156 -0
  144. package/dist/mcp/handlers/security/generate-report.d.ts.map +1 -0
  145. package/dist/mcp/handlers/security/generate-report.js +469 -0
  146. package/dist/mcp/handlers/security/generate-report.js.map +1 -0
  147. package/dist/mcp/handlers/security/index.d.ts +80 -0
  148. package/dist/mcp/handlers/security/index.d.ts.map +1 -0
  149. package/dist/mcp/handlers/security/index.js +91 -0
  150. package/dist/mcp/handlers/security/index.js.map +1 -0
  151. package/dist/mcp/handlers/security/scan-comprehensive.d.ts +66 -0
  152. package/dist/mcp/handlers/security/scan-comprehensive.d.ts.map +1 -0
  153. package/dist/mcp/handlers/security/scan-comprehensive.js +296 -0
  154. package/dist/mcp/handlers/security/scan-comprehensive.js.map +1 -0
  155. package/dist/mcp/handlers/security/scan-dependencies.d.ts +148 -0
  156. package/dist/mcp/handlers/security/scan-dependencies.d.ts.map +1 -0
  157. package/dist/mcp/handlers/security/scan-dependencies.js +354 -0
  158. package/dist/mcp/handlers/security/scan-dependencies.js.map +1 -0
  159. package/dist/mcp/handlers/security/validate-auth.d.ts +128 -0
  160. package/dist/mcp/handlers/security/validate-auth.d.ts.map +1 -0
  161. package/dist/mcp/handlers/security/validate-auth.js +294 -0
  162. package/dist/mcp/handlers/security/validate-auth.js.map +1 -0
  163. package/dist/mcp/handlers/test/generate-integration-tests.d.ts +95 -0
  164. package/dist/mcp/handlers/test/generate-integration-tests.d.ts.map +1 -0
  165. package/dist/mcp/handlers/test/generate-integration-tests.js +286 -0
  166. package/dist/mcp/handlers/test/generate-integration-tests.js.map +1 -0
  167. package/dist/mcp/handlers/test/generate-unit-tests.d.ts +89 -0
  168. package/dist/mcp/handlers/test/generate-unit-tests.d.ts.map +1 -0
  169. package/dist/mcp/handlers/test/generate-unit-tests.js +273 -0
  170. package/dist/mcp/handlers/test/generate-unit-tests.js.map +1 -0
  171. package/dist/mcp/handlers/test/optimize-test-suite.d.ts +97 -0
  172. package/dist/mcp/handlers/test/optimize-test-suite.d.ts.map +1 -0
  173. package/dist/mcp/handlers/test/optimize-test-suite.js +282 -0
  174. package/dist/mcp/handlers/test/optimize-test-suite.js.map +1 -0
  175. package/dist/mcp/server.d.ts.map +1 -1
  176. package/dist/mcp/server.js +211 -0
  177. package/dist/mcp/server.js.map +1 -1
  178. package/dist/mcp/tools/deprecated.d.ts +1390 -0
  179. package/dist/mcp/tools/deprecated.d.ts.map +1 -0
  180. package/dist/mcp/tools/deprecated.js +859 -0
  181. package/dist/mcp/tools/deprecated.js.map +1 -0
  182. package/dist/mcp/tools/qe/api-contract/index.d.ts +138 -0
  183. package/dist/mcp/tools/qe/api-contract/index.d.ts.map +1 -0
  184. package/dist/mcp/tools/qe/api-contract/index.js +572 -0
  185. package/dist/mcp/tools/qe/api-contract/index.js.map +1 -0
  186. package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts +110 -0
  187. package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts.map +1 -0
  188. package/dist/mcp/tools/qe/code-quality/analyze-complexity.js +381 -0
  189. package/dist/mcp/tools/qe/code-quality/analyze-complexity.js.map +1 -0
  190. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts +115 -0
  191. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts.map +1 -0
  192. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js +461 -0
  193. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js.map +1 -0
  194. package/dist/mcp/tools/qe/code-quality/index.d.ts +12 -0
  195. package/dist/mcp/tools/qe/code-quality/index.d.ts.map +1 -0
  196. package/dist/mcp/tools/qe/code-quality/index.js +30 -0
  197. package/dist/mcp/tools/qe/code-quality/index.js.map +1 -0
  198. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts +58 -0
  199. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts.map +1 -0
  200. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js +172 -0
  201. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js.map +1 -0
  202. package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts +73 -0
  203. package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts.map +1 -0
  204. package/dist/mcp/tools/qe/coverage/calculate-trends.js +240 -0
  205. package/dist/mcp/tools/qe/coverage/calculate-trends.js.map +1 -0
  206. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts +38 -0
  207. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts.map +1 -0
  208. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js +204 -0
  209. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js.map +1 -0
  210. package/dist/mcp/tools/qe/coverage/index.d.ts +12 -0
  211. package/dist/mcp/tools/qe/coverage/index.d.ts.map +1 -0
  212. package/dist/mcp/tools/qe/coverage/index.js +23 -0
  213. package/dist/mcp/tools/qe/coverage/index.js.map +1 -0
  214. package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts +46 -0
  215. package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts.map +1 -0
  216. package/dist/mcp/tools/qe/coverage/recommend-tests.js +248 -0
  217. package/dist/mcp/tools/qe/coverage/recommend-tests.js.map +1 -0
  218. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts +179 -0
  219. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts.map +1 -0
  220. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js +554 -0
  221. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js.map +1 -0
  222. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts +172 -0
  223. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts.map +1 -0
  224. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js +498 -0
  225. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js.map +1 -0
  226. package/dist/mcp/tools/qe/flaky-detection/index.d.ts +35 -0
  227. package/dist/mcp/tools/qe/flaky-detection/index.d.ts.map +1 -0
  228. package/dist/mcp/tools/qe/flaky-detection/index.js +66 -0
  229. package/dist/mcp/tools/qe/flaky-detection/index.js.map +1 -0
  230. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts +159 -0
  231. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts.map +1 -0
  232. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js +462 -0
  233. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js.map +1 -0
  234. package/dist/mcp/tools/qe/fleet/index.d.ts +422 -0
  235. package/dist/mcp/tools/qe/fleet/index.d.ts.map +1 -0
  236. package/dist/mcp/tools/qe/fleet/index.js +652 -0
  237. package/dist/mcp/tools/qe/fleet/index.js.map +1 -0
  238. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts +180 -0
  239. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts.map +1 -0
  240. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js +347 -0
  241. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js.map +1 -0
  242. package/dist/mcp/tools/qe/performance/generate-report.d.ts +146 -0
  243. package/dist/mcp/tools/qe/performance/generate-report.d.ts.map +1 -0
  244. package/dist/mcp/tools/qe/performance/generate-report.js +354 -0
  245. package/dist/mcp/tools/qe/performance/generate-report.js.map +1 -0
  246. package/dist/mcp/tools/qe/performance/index.d.ts +13 -0
  247. package/dist/mcp/tools/qe/performance/index.d.ts.map +1 -0
  248. package/dist/mcp/tools/qe/performance/index.js +24 -0
  249. package/dist/mcp/tools/qe/performance/index.js.map +1 -0
  250. package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts +120 -0
  251. package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts.map +1 -0
  252. package/dist/mcp/tools/qe/performance/monitor-realtime.js +215 -0
  253. package/dist/mcp/tools/qe/performance/monitor-realtime.js.map +1 -0
  254. package/dist/mcp/tools/qe/performance/run-benchmark.d.ts +68 -0
  255. package/dist/mcp/tools/qe/performance/run-benchmark.d.ts.map +1 -0
  256. package/dist/mcp/tools/qe/performance/run-benchmark.js +120 -0
  257. package/dist/mcp/tools/qe/performance/run-benchmark.js.map +1 -0
  258. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts +239 -0
  259. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts.map +1 -0
  260. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js +671 -0
  261. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js.map +1 -0
  262. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +219 -0
  263. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -0
  264. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +732 -0
  265. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -0
  266. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts +447 -0
  267. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts.map +1 -0
  268. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js +551 -0
  269. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js.map +1 -0
  270. package/dist/mcp/tools/qe/quality-gates/index.d.ts +40 -0
  271. package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -0
  272. package/dist/mcp/tools/qe/quality-gates/index.js +56 -0
  273. package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -0
  274. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts +226 -0
  275. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts.map +1 -0
  276. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js +603 -0
  277. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js.map +1 -0
  278. package/dist/mcp/tools/qe/regression/analyze-risk.d.ts +212 -0
  279. package/dist/mcp/tools/qe/regression/analyze-risk.d.ts.map +1 -0
  280. package/dist/mcp/tools/qe/regression/analyze-risk.js +617 -0
  281. package/dist/mcp/tools/qe/regression/analyze-risk.js.map +1 -0
  282. package/dist/mcp/tools/qe/regression/index.d.ts +36 -0
  283. package/dist/mcp/tools/qe/regression/index.d.ts.map +1 -0
  284. package/dist/mcp/tools/qe/regression/index.js +63 -0
  285. package/dist/mcp/tools/qe/regression/index.js.map +1 -0
  286. package/dist/mcp/tools/qe/regression/select-tests.d.ts +241 -0
  287. package/dist/mcp/tools/qe/regression/select-tests.d.ts.map +1 -0
  288. package/dist/mcp/tools/qe/regression/select-tests.js +601 -0
  289. package/dist/mcp/tools/qe/regression/select-tests.js.map +1 -0
  290. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts +134 -0
  291. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts.map +1 -0
  292. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js +737 -0
  293. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js.map +1 -0
  294. package/dist/mcp/tools/qe/requirements/index.d.ts +40 -0
  295. package/dist/mcp/tools/qe/requirements/index.d.ts.map +1 -0
  296. package/dist/mcp/tools/qe/requirements/index.js +84 -0
  297. package/dist/mcp/tools/qe/requirements/index.js.map +1 -0
  298. package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts +196 -0
  299. package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts.map +1 -0
  300. package/dist/mcp/tools/qe/requirements/validate-requirements.js +740 -0
  301. package/dist/mcp/tools/qe/requirements/validate-requirements.js.map +1 -0
  302. package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts +300 -0
  303. package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts.map +1 -0
  304. package/dist/mcp/tools/qe/security/detect-vulnerabilities.js +492 -0
  305. package/dist/mcp/tools/qe/security/detect-vulnerabilities.js.map +1 -0
  306. package/dist/mcp/tools/qe/security/index.d.ts +34 -0
  307. package/dist/mcp/tools/qe/security/index.d.ts.map +1 -0
  308. package/dist/mcp/tools/qe/security/index.js +44 -0
  309. package/dist/mcp/tools/qe/security/index.js.map +1 -0
  310. package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts +240 -0
  311. package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts.map +1 -0
  312. package/dist/mcp/tools/qe/security/scan-comprehensive.js +535 -0
  313. package/dist/mcp/tools/qe/security/scan-comprehensive.js.map +1 -0
  314. package/dist/mcp/tools/qe/security/validate-compliance.d.ts +299 -0
  315. package/dist/mcp/tools/qe/security/validate-compliance.d.ts.map +1 -0
  316. package/dist/mcp/tools/qe/security/validate-compliance.js +517 -0
  317. package/dist/mcp/tools/qe/security/validate-compliance.js.map +1 -0
  318. package/dist/mcp/tools/qe/shared/types.d.ts +840 -0
  319. package/dist/mcp/tools/qe/shared/types.d.ts.map +1 -0
  320. package/dist/mcp/tools/qe/shared/types.js +13 -0
  321. package/dist/mcp/tools/qe/shared/types.js.map +1 -0
  322. package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts +264 -0
  323. package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts.map +1 -0
  324. package/dist/mcp/tools/qe/test-data/analyze-schema.js +553 -0
  325. package/dist/mcp/tools/qe/test-data/analyze-schema.js.map +1 -0
  326. package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts +167 -0
  327. package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts.map +1 -0
  328. package/dist/mcp/tools/qe/test-data/generate-test-data.js +336 -0
  329. package/dist/mcp/tools/qe/test-data/generate-test-data.js.map +1 -0
  330. package/dist/mcp/tools/qe/test-data/index.d.ts +44 -0
  331. package/dist/mcp/tools/qe/test-data/index.d.ts.map +1 -0
  332. package/dist/mcp/tools/qe/test-data/index.js +90 -0
  333. package/dist/mcp/tools/qe/test-data/index.js.map +1 -0
  334. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts +165 -0
  335. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts.map +1 -0
  336. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js +342 -0
  337. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js.map +1 -0
  338. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts +144 -0
  339. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts.map +1 -0
  340. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js +432 -0
  341. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js.map +1 -0
  342. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts +98 -0
  343. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts.map +1 -0
  344. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js +459 -0
  345. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js.map +1 -0
  346. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts +83 -0
  347. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts.map +1 -0
  348. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js +483 -0
  349. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js.map +1 -0
  350. package/dist/mcp/tools/qe/test-generation/index.d.ts +56 -0
  351. package/dist/mcp/tools/qe/test-generation/index.d.ts.map +1 -0
  352. package/dist/mcp/tools/qe/test-generation/index.js +97 -0
  353. package/dist/mcp/tools/qe/test-generation/index.js.map +1 -0
  354. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts +124 -0
  355. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts.map +1 -0
  356. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js +362 -0
  357. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js.map +1 -0
  358. package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts +119 -0
  359. package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts.map +1 -0
  360. package/dist/mcp/tools/qe/visual/compare-screenshots.js +280 -0
  361. package/dist/mcp/tools/qe/visual/compare-screenshots.js.map +1 -0
  362. package/dist/mcp/tools/qe/visual/detect-regression.d.ts +138 -0
  363. package/dist/mcp/tools/qe/visual/detect-regression.d.ts.map +1 -0
  364. package/dist/mcp/tools/qe/visual/detect-regression.js +271 -0
  365. package/dist/mcp/tools/qe/visual/detect-regression.js.map +1 -0
  366. package/dist/mcp/tools/qe/visual/index.d.ts +16 -0
  367. package/dist/mcp/tools/qe/visual/index.d.ts.map +1 -0
  368. package/dist/mcp/tools/qe/visual/index.js +22 -0
  369. package/dist/mcp/tools/qe/visual/index.js.map +1 -0
  370. package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts +276 -0
  371. package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts.map +1 -0
  372. package/dist/mcp/tools/qe/visual/validate-accessibility.js +413 -0
  373. package/dist/mcp/tools/qe/visual/validate-accessibility.js.map +1 -0
  374. package/dist/mcp/tools.d.ts +44 -0
  375. package/dist/mcp/tools.d.ts.map +1 -1
  376. package/dist/mcp/tools.js +1980 -1
  377. package/dist/mcp/tools.js.map +1 -1
  378. package/package.json +2 -2
  379. package/dist/learning/__mocks__/LearningEngine.d.ts +0 -39
  380. package/dist/learning/__mocks__/LearningEngine.d.ts.map +0 -1
  381. package/dist/learning/__mocks__/LearningEngine.js +0 -116
  382. package/dist/learning/__mocks__/LearningEngine.js.map +0 -1
  383. package/dist/utils/__mocks__/Database.d.ts +0 -85
  384. package/dist/utils/__mocks__/Database.d.ts.map +0 -1
  385. package/dist/utils/__mocks__/Database.js +0 -125
  386. package/dist/utils/__mocks__/Database.js.map +0 -1
  387. package/dist/utils/__mocks__/Logger.d.ts +0 -26
  388. package/dist/utils/__mocks__/Logger.d.ts.map +0 -1
  389. package/dist/utils/__mocks__/Logger.js +0 -44
  390. package/dist/utils/__mocks__/Logger.js.map +0 -1
@@ -1,548 +1,535 @@
1
- ---
2
- name: mobile-testing
3
- description: Comprehensive mobile testing for iOS and Android platforms including gestures, sensors, permissions, device fragmentation, and performance. Use when testing native apps, hybrid apps, or mobile web, ensuring quality across 1000+ device variants.
4
- version: 1.0.0
5
- category: specialized-testing
6
- tags:
7
- - mobile-testing
8
- - ios
9
- - android
10
- - appium
11
- - device-fragmentation
12
- - mobile-performance
13
- - gestures
14
- difficulty: intermediate
15
- estimated_time: 90-120 minutes
16
- author: agentic-qe
17
- ---
18
-
19
- # Mobile Testing
20
-
21
- ## Core Principle
22
-
23
- **60%+ of web traffic is mobile. Testing only desktop = ignoring majority of users.**
24
-
25
- Mobile devices have unique challenges: device fragmentation (1000+ Android devices), platform differences (iOS vs Android), touch gestures, sensors, intermittent networks, and limited resources. Mobile testing ensures quality across this complex landscape.
26
-
27
- ## What is Mobile Testing?
28
-
29
- **Mobile Testing:** Validating functionality, usability, performance, and security of applications on mobile devices (smartphones, tablets) across multiple platforms, OS versions, and screen sizes.
30
-
31
- **Why Critical:**
32
- - 60%+ of global web traffic from mobile
33
- - 1000+ Android device variants (fragmentation)
34
- - Platform-specific behaviors (iOS ≠ Android)
35
- - Mobile-specific interactions (gestures, sensors, permissions)
36
- - Performance critical (slow networks, limited CPU/memory)
37
- - App store review requirements
38
-
39
- **Goal:** Flawless mobile experience across devices, platforms, and conditions.
40
-
41
- ## Mobile App Types
42
-
43
- ### 1. Native Apps
44
-
45
- **iOS:** Swift/Objective-C, runs only on iOS
46
- **Android:** Kotlin/Java, runs only on Android
47
-
48
- **Characteristics:**
49
- - Best performance
50
- - Full access to device features
51
- - Platform-specific UI (UIKit vs Material Design)
52
- - Separate codebase per platform
53
-
54
- **Testing Tools:**
55
- - **iOS:** XCTest, XCUITest, EarlGrey
56
- - **Android:** Espresso, UI Automator, Robolectric
57
-
58
- ---
59
-
60
- ### 2. Hybrid Apps
61
-
62
- **Technologies:** React Native, Flutter, Ionic, Cordova
63
-
64
- **Characteristics:**
65
- - Single codebase for both platforms
66
- - JavaScript/Dart + native bridges
67
- - Good performance (near-native)
68
- - Shared business logic, platform-specific UI
69
-
70
- **Testing Tools:**
71
- - Appium (cross-platform)
72
- - Detox (React Native)
73
- - Flutter Driver (Flutter)
74
-
75
- ---
76
-
77
- ### 3. Mobile Web
78
-
79
- **PWAs, responsive websites in mobile browsers**
80
-
81
- **Characteristics:**
82
- - No app store submission
83
- - Universal access via URL
84
- - Limited device feature access
85
- - Responsive design critical
86
-
87
- **Testing Tools:**
88
- - Playwright Mobile
89
- - BrowserStack, Sauce Labs
90
- - Chrome DevTools (mobile emulation)
91
-
92
- ---
93
-
94
- ## iOS vs Android Differences
95
-
96
- ### Key Differences
97
-
98
- | Aspect | iOS | Android |
99
- |--------|-----|---------|
100
- | **OS Versions** | 2-3 supported (high adoption) | 10+ in use (fragmentation) |
101
- | **Devices** | ~40 iPhone/iPad models | 1000+ manufacturers |
102
- | **Screen Sizes** | Predictable set | Vast variety |
103
- | **UI Guidelines** | Human Interface Guidelines | Material Design |
104
- | **Permissions** | Single prompt system | Granular runtime permissions |
105
- | **Back Button** | Swipe/nav button | Hardware/software back button |
106
- | **App Distribution** | App Store (strict review) | Google Play + sideloading |
107
- | **Testing Tools** | XCUITest (native) | Espresso (native) |
108
-
109
- ---
110
-
111
- ## Mobile-Specific Testing
112
-
113
- ### 1. Touch Gestures
114
-
115
- **Gesture Types:**
116
- ```
117
- Tap → Single touch
118
- Double Tap Quick two taps
119
- Long Press Touch and hold (context menu)
120
- Swipe → Slide finger (scroll, swipe between screens)
121
- Pinch → Two fingers move apart (zoom in)
122
- Zoom Out → Two fingers move together (zoom out)
123
- Rotate → Two fingers rotate
124
- Multi-Touch → Multiple simultaneous touches
125
- ```
126
-
127
- **Testing with Appium:**
128
- ```javascript
129
- // Tap
130
- await driver.touchAction({
131
- action: 'tap',
132
- x: 100,
133
- y: 200
134
- });
135
-
136
- // Swipe (scroll down)
137
- await driver.touchAction([
138
- { action: 'press', x: 200, y: 400 },
139
- { action: 'moveTo', x: 200, y: 100 },
140
- { action: 'release' }
141
- ]);
142
-
143
- // Pinch to zoom
144
- const finger1 = [
145
- { action: 'press', x: 100, y: 200 },
146
- { action: 'moveTo', x: 50, y: 150 },
147
- { action: 'release' }
148
- ];
149
- const finger2 = [
150
- { action: 'press', x: 200, y: 200 },
151
- { action: 'moveTo', x: 250, y: 250 },
152
- { action: 'release' }
153
- ];
154
- await driver.multiTouchAction([finger1, finger2]);
155
-
156
- // Long press
157
- await driver.touchAction({
158
- action: 'longPress',
159
- x: 100,
160
- y: 200,
161
- duration: 2000 // 2 seconds
162
- });
163
- ```
164
-
165
- ---
166
-
167
- ### 2. Sensors Testing
168
-
169
- **Device Sensors:**
170
- - **GPS/Location:** Location services
171
- - **Camera:** Photo/video capture
172
- - **Microphone:** Audio recording
173
- - **Accelerometer:** Device tilt/shake
174
- - **Gyroscope:** Rotation detection
175
- - **Proximity:** Screen off when near face
176
- - **Ambient Light:** Brightness auto-adjust
177
-
178
- **Testing Location:**
179
- ```javascript
180
- // Set GPS location
181
- await driver.setGeoLocation({
182
- latitude: 37.7749,
183
- longitude: -122.4194,
184
- altitude: 0
185
- });
186
-
187
- // Test location-based feature
188
- const nearbyStores = await findElement('stores-list');
189
- expect(nearbyStores.getText()).toContain('San Francisco');
190
- ```
191
-
192
- **Testing Camera/Gallery:**
193
- ```javascript
194
- // iOS: Push image to simulator
195
- await driver.pushFile('/path/on/device/image.jpg', imageBase64);
196
-
197
- // Android: Set location for gallery
198
- await driver.execute('mobile: shell', {
199
- command: 'am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///path'
200
- });
201
-
202
- // Trigger camera/gallery picker
203
- await driver.findElement('upload-photo-button').click();
204
-
205
- // Verify image uploaded
206
- expect(await driver.findElement('uploaded-image')).toBeDefined();
207
- ```
208
-
209
- ---
210
-
211
- ### 3. Permissions Testing
212
-
213
- **iOS Permissions Flow:**
214
- ```javascript
215
- // Request permission (iOS shows system alert)
216
- await driver.findElement('enable-location').click();
217
-
218
- // Handle iOS permission alert
219
- const alert = await driver.getAlert();
220
- expect(alert.getText()).toContain('allow location');
221
- await alert.accept(); // or alert.dismiss()
222
-
223
- // Verify permission granted
224
- const locationEnabled = await driver.findElement('location-status');
225
- expect(locationEnabled.getText()).toBe('Enabled');
226
- ```
227
-
228
- **Android Runtime Permissions:**
229
- ```javascript
230
- // Grant permission before test (Android)
231
- await driver.execute('mobile: shell', {
232
- command: 'pm grant com.example.app android.permission.CAMERA'
233
- });
234
-
235
- // Or handle permission dialog during test
236
- await driver.findElement('take-photo').click();
237
-
238
- // Wait for permission dialog
239
- const permissionDialog = await driver.waitForElement('com.android.packageinstaller:id/permission_message');
240
- await driver.findElement('com.android.packageinstaller:id/permission_allow_button').click();
241
- ```
242
-
243
- ---
244
-
245
- ### 4. Network Conditions
246
-
247
- **Test on Poor Networks:**
248
- ```javascript
249
- // Simulate 3G network
250
- await driver.setNetworkConnection(4); // 3G
251
-
252
- // Test app behavior
253
- await driver.findElement('load-content').click();
254
-
255
- const loadingIndicator = await driver.waitForElement('spinner', 5000);
256
- expect(loadingIndicator).toBeDefined();
257
-
258
- // Restore full network
259
- await driver.setNetworkConnection(6); // WiFi + Data
260
- ```
261
-
262
- **Offline Mode Testing:**
263
- ```javascript
264
- // Disable network
265
- await driver.toggleAirplaneMode();
266
-
267
- // Test offline functionality
268
- await driver.findElement('view-saved-items').click();
269
- const items = await driver.findElements('saved-item');
270
- expect(items.length).toBeGreaterThan(0);
271
-
272
- // Verify offline banner
273
- const banner = await driver.findElement('offline-banner');
274
- expect(banner.getText()).toContain('No internet connection');
275
-
276
- // Re-enable network
277
- await driver.toggleAirplaneMode();
278
- ```
279
-
280
- ---
281
-
282
- ## Device Fragmentation Strategy
283
-
284
- ### Real Devices vs Emulators
285
-
286
- **Emulators/Simulators:**
287
- - **Pros:** Fast, free, easy to automate, unlimited devices
288
- - **Cons:** Not 100% accurate, no real sensors, different performance
289
-
290
- **Real Devices:**
291
- - **Pros:** Accurate, real sensors, actual performance, real network
292
- - **Cons:** Expensive, harder to maintain, slower
293
-
294
- **Strategy:** Use emulators for fast feedback, real devices for critical paths
295
-
296
- ---
297
-
298
- ### Device Coverage Matrix
299
-
300
- **Priority Tiers:**
301
-
302
- **Tier 1 (Must Test):**
303
- - Latest iPhone (iOS current version)
304
- - Latest Samsung Galaxy (Android current version)
305
- - iPad (latest)
306
- - ~60% of user base
307
-
308
- **Tier 2 (Should Test):**
309
- - iPhone N-1, N-2 (previous 2 generations)
310
- - Samsung Galaxy N-1, N-2
311
- - Google Pixel (latest)
312
- - One popular low-end Android
313
- - ~30% of user base
314
-
315
- **Tier 3 (Nice to Test):**
316
- - Older devices (N-3, N-4)
317
- - Various manufacturers (Xiaomi, OnePlus, etc.)
318
- - Tablets
319
- - ~10% of user base
320
-
321
- **Example Matrix:**
322
- ```
323
- Device | OS Version | Screen Size | Priority
324
- -----------------------|------------|-------------|----------
325
- iPhone 15 Pro | iOS 17 | 6.1" | Tier 1
326
- iPhone 14 | iOS 16 | 6.1" | Tier 2
327
- iPhone 13 | iOS 15 | 6.1" | Tier 2
328
- iPad Pro | iOS 17 | 12.9" | Tier 1
329
- Samsung Galaxy S24 | Android 14 | 6.2" | Tier 1
330
- Samsung Galaxy S23 | Android 13 | 6.1" | Tier 2
331
- Google Pixel 8 | Android 14 | 6.2" | Tier 2
332
- Xiaomi Redmi Note 12 | Android 13 | 6.67" | Tier 3
333
- ```
334
-
335
- ---
336
-
337
- ## Mobile Automation with Appium
338
-
339
- ### Setup
340
-
341
- **Install Appium:**
342
- ```bash
343
- npm install -g appium
344
- appium driver install xcuitest # iOS
345
- appium driver install uiautomator2 # Android
346
- ```
347
-
348
- **Capabilities (iOS):**
349
- ```javascript
350
- const caps = {
351
- platformName: 'iOS',
352
- 'appium:platformVersion': '17.0',
353
- 'appium:deviceName': 'iPhone 15',
354
- 'appium:automationName': 'XCUITest',
355
- 'appium:app': '/path/to/app.ipa',
356
- 'appium:noReset': true,
357
- 'appium:fullReset': false
358
- };
359
- ```
360
-
361
- **Capabilities (Android):**
362
- ```javascript
363
- const caps = {
364
- platformName: 'Android',
365
- 'appium:platformVersion': '14',
366
- 'appium:deviceName': 'Pixel 8',
367
- 'appium:automationName': 'UiAutomator2',
368
- 'appium:app': '/path/to/app.apk',
369
- 'appium:appPackage': 'com.example.app',
370
- 'appium:appActivity': '.MainActivity'
371
- };
372
- ```
373
-
374
- ---
375
-
376
- ### Cross-Platform Tests
377
-
378
- **Page Object Pattern:**
379
- ```javascript
380
- class LoginPage {
381
- get emailInput() {
382
- return platform === 'iOS'
383
- ? $('~email-input') // accessibility id
384
- : $('android=new UiSelector().resourceId("email")');
385
- }
386
-
387
- get passwordInput() {
388
- return platform === 'iOS'
389
- ? $('~password-input')
390
- : $('android=new UiSelector().resourceId("password")');
391
- }
392
-
393
- get loginButton() {
394
- return platform === 'iOS'
395
- ? $('~login-button')
396
- : $('android=new UiSelector().text("Login")');
397
- }
398
-
399
- async login(email, password) {
400
- await this.emailInput.setValue(email);
401
- await this.passwordInput.setValue(password);
402
- await this.loginButton.click();
403
- }
404
- }
405
-
406
- // Use in tests
407
- test('user can login', async () => {
408
- const loginPage = new LoginPage();
409
- await loginPage.login('test@example.com', 'password123');
410
-
411
- expect(await dashboardPage.isDisplayed()).toBe(true);
412
- });
413
- ```
414
-
415
- ---
416
-
417
- ## Mobile Performance Testing
418
-
419
- ### Key Metrics
420
-
421
- **Performance Goals:**
422
- - **App Launch:** < 2 seconds
423
- - **Screen Transition:** < 300ms
424
- - **Network Request:** < 1 second
425
- - **Frame Rate:** 60 FPS (no jank)
426
- - **Battery Drain:** < 5%/hour (background)
427
- - **Memory Usage:** < 150MB (typical app)
428
-
429
- **Measuring with Appium:**
430
- ```javascript
431
- // Get performance data
432
- const perfData = await driver.getPerformanceData('com.example.app', 'cpuinfo', 5);
433
- console.log('CPU Usage:', perfData);
434
-
435
- const memData = await driver.getPerformanceData('com.example.app', 'memoryinfo', 5);
436
- console.log('Memory Usage:', memData);
437
- ```
438
-
439
- **iOS Instruments:**
440
- ```bash
441
- # Measure launch time
442
- instruments -t "Time Profiler" -D trace.trace -w "iPhone 15" MyApp.app
443
-
444
- # Measure memory
445
- instruments -t "Allocations" -D memory.trace -w "iPhone 15" MyApp.app
446
- ```
447
-
448
- **Android Profiler:**
449
- ```bash
450
- # Measure CPU
451
- adb shell dumpsys cpuinfo | grep com.example.app
452
-
453
- # Measure memory
454
- adb shell dumpsys meminfo com.example.app
455
-
456
- # Measure battery
457
- adb shell dumpsys batterystats --reset
458
- # Use app for 1 hour
459
- adb shell dumpsys batterystats com.example.app
460
- ```
461
-
462
- ---
463
-
464
- ## Using with QE Agents
465
-
466
- ### qe-mobile-tester: Intelligent Cross-Platform Testing
467
-
468
- ```typescript
469
- // Agent orchestrates mobile testing across devices
470
- const results = await agent.executeMobileTests({
471
- platforms: ['iOS', 'Android'],
472
- deviceTiers: [1, 2], // Tier 1 and 2 devices
473
- tests: 'regression-suite',
474
- parallelDevices: 5
475
- });
476
-
477
- // Returns:
478
- // {
479
- // iOS: {
480
- // iPhone15: { passed: 47, failed: 0 },
481
- // iPhone14: { passed: 46, failed: 1 }
482
- // },
483
- // Android: {
484
- // GalaxyS24: { passed: 45, failed: 2 },
485
- // Pixel8: { passed: 47, failed: 0 }
486
- // },
487
- // totalTime: '15 minutes',
488
- // deviceFarmCost: '$8.50'
489
- // }
490
- ```
491
-
492
- ### Device Farm Integration
493
-
494
- ```typescript
495
- // Agent connects to BrowserStack/Sauce Labs
496
- await agent.runOnDeviceFarm({
497
- service: 'browserstack',
498
- devices: [
499
- 'iPhone 15 - iOS 17',
500
- 'Samsung Galaxy S24 - Android 14',
501
- 'iPad Pro - iOS 17'
502
- ],
503
- tests: 'smoke-suite',
504
- recordVideo: true,
505
- captureNetworkLogs: true
506
- });
507
-
508
- // Automatically distributes tests across devices
509
- // Captures screenshots, videos, logs
510
- // Generates consolidated report
511
- ```
512
-
513
- ---
514
-
515
- ## Related Skills
516
-
517
- **Core Testing:**
518
- - [agentic-quality-engineering](../agentic-quality-engineering/) - Mobile testing agents
519
- - [regression-testing](../regression-testing/) - Mobile regression
520
- - [performance-testing](../performance-testing/) - Mobile performance
521
-
522
- **Specialized:**
523
- - [accessibility-testing](../accessibility-testing/) - Mobile a11y (VoiceOver, TalkBack)
524
- - [security-testing](../security-testing/) - Mobile security
525
- - [compatibility-testing](../compatibility-testing/) - Device compatibility
526
-
527
- ---
528
-
529
- ## Remember
530
-
531
- **Mobile is not a smaller desktop - it's a different platform.**
532
-
533
- Unique challenges:
534
- - Device fragmentation (1000+ devices)
535
- - Touch gestures, not mouse clicks
536
- - Sensors, permissions, offline scenarios
537
- - Intermittent networks, battery constraints
538
- - Platform differences (iOS ≠ Android)
539
-
540
- **Test on real devices for critical flows.**
541
-
542
- Emulators catch 80% of bugs, but real devices are essential for:
543
- - Actual performance
544
- - Real sensor behavior
545
- - Network reliability
546
- - Platform-specific quirks
547
-
548
- **With Agents:** `qe-mobile-tester` orchestrates testing across device farms, manages platform differences, and provides comprehensive mobile testing at scale. Use agents to test 10+ devices in parallel and reduce mobile testing time from days to hours.
1
+ ---
2
+ name: mobile-testing
3
+ description: Comprehensive mobile testing for iOS and Android platforms including gestures, sensors, permissions, device fragmentation, and performance. Use when testing native apps, hybrid apps, or mobile web, ensuring quality across 1000+ device variants.
4
+ ---
5
+
6
+ # Mobile Testing
7
+
8
+ ## Core Principle
9
+
10
+ **60%+ of web traffic is mobile. Testing only desktop = ignoring majority of users.**
11
+
12
+ Mobile devices have unique challenges: device fragmentation (1000+ Android devices), platform differences (iOS vs Android), touch gestures, sensors, intermittent networks, and limited resources. Mobile testing ensures quality across this complex landscape.
13
+
14
+ ## What is Mobile Testing?
15
+
16
+ **Mobile Testing:** Validating functionality, usability, performance, and security of applications on mobile devices (smartphones, tablets) across multiple platforms, OS versions, and screen sizes.
17
+
18
+ **Why Critical:**
19
+ - 60%+ of global web traffic from mobile
20
+ - 1000+ Android device variants (fragmentation)
21
+ - Platform-specific behaviors (iOS ≠ Android)
22
+ - Mobile-specific interactions (gestures, sensors, permissions)
23
+ - Performance critical (slow networks, limited CPU/memory)
24
+ - App store review requirements
25
+
26
+ **Goal:** Flawless mobile experience across devices, platforms, and conditions.
27
+
28
+ ## Mobile App Types
29
+
30
+ ### 1. Native Apps
31
+
32
+ **iOS:** Swift/Objective-C, runs only on iOS
33
+ **Android:** Kotlin/Java, runs only on Android
34
+
35
+ **Characteristics:**
36
+ - Best performance
37
+ - Full access to device features
38
+ - Platform-specific UI (UIKit vs Material Design)
39
+ - Separate codebase per platform
40
+
41
+ **Testing Tools:**
42
+ - **iOS:** XCTest, XCUITest, EarlGrey
43
+ - **Android:** Espresso, UI Automator, Robolectric
44
+
45
+ ---
46
+
47
+ ### 2. Hybrid Apps
48
+
49
+ **Technologies:** React Native, Flutter, Ionic, Cordova
50
+
51
+ **Characteristics:**
52
+ - Single codebase for both platforms
53
+ - JavaScript/Dart + native bridges
54
+ - Good performance (near-native)
55
+ - Shared business logic, platform-specific UI
56
+
57
+ **Testing Tools:**
58
+ - Appium (cross-platform)
59
+ - Detox (React Native)
60
+ - Flutter Driver (Flutter)
61
+
62
+ ---
63
+
64
+ ### 3. Mobile Web
65
+
66
+ **PWAs, responsive websites in mobile browsers**
67
+
68
+ **Characteristics:**
69
+ - No app store submission
70
+ - Universal access via URL
71
+ - Limited device feature access
72
+ - Responsive design critical
73
+
74
+ **Testing Tools:**
75
+ - Playwright Mobile
76
+ - BrowserStack, Sauce Labs
77
+ - Chrome DevTools (mobile emulation)
78
+
79
+ ---
80
+
81
+ ## iOS vs Android Differences
82
+
83
+ ### Key Differences
84
+
85
+ | Aspect | iOS | Android |
86
+ |--------|-----|---------|
87
+ | **OS Versions** | 2-3 supported (high adoption) | 10+ in use (fragmentation) |
88
+ | **Devices** | ~40 iPhone/iPad models | 1000+ manufacturers |
89
+ | **Screen Sizes** | Predictable set | Vast variety |
90
+ | **UI Guidelines** | Human Interface Guidelines | Material Design |
91
+ | **Permissions** | Single prompt system | Granular runtime permissions |
92
+ | **Back Button** | Swipe/nav button | Hardware/software back button |
93
+ | **App Distribution** | App Store (strict review) | Google Play + sideloading |
94
+ | **Testing Tools** | XCUITest (native) | Espresso (native) |
95
+
96
+ ---
97
+
98
+ ## Mobile-Specific Testing
99
+
100
+ ### 1. Touch Gestures
101
+
102
+ **Gesture Types:**
103
+ ```
104
+ Tap → Single touch
105
+ Double Tap → Quick two taps
106
+ Long Press → Touch and hold (context menu)
107
+ Swipe → Slide finger (scroll, swipe between screens)
108
+ Pinch → Two fingers move apart (zoom in)
109
+ Zoom Out → Two fingers move together (zoom out)
110
+ Rotate → Two fingers rotate
111
+ Multi-Touch → Multiple simultaneous touches
112
+ ```
113
+
114
+ **Testing with Appium:**
115
+ ```javascript
116
+ // Tap
117
+ await driver.touchAction({
118
+ action: 'tap',
119
+ x: 100,
120
+ y: 200
121
+ });
122
+
123
+ // Swipe (scroll down)
124
+ await driver.touchAction([
125
+ { action: 'press', x: 200, y: 400 },
126
+ { action: 'moveTo', x: 200, y: 100 },
127
+ { action: 'release' }
128
+ ]);
129
+
130
+ // Pinch to zoom
131
+ const finger1 = [
132
+ { action: 'press', x: 100, y: 200 },
133
+ { action: 'moveTo', x: 50, y: 150 },
134
+ { action: 'release' }
135
+ ];
136
+ const finger2 = [
137
+ { action: 'press', x: 200, y: 200 },
138
+ { action: 'moveTo', x: 250, y: 250 },
139
+ { action: 'release' }
140
+ ];
141
+ await driver.multiTouchAction([finger1, finger2]);
142
+
143
+ // Long press
144
+ await driver.touchAction({
145
+ action: 'longPress',
146
+ x: 100,
147
+ y: 200,
148
+ duration: 2000 // 2 seconds
149
+ });
150
+ ```
151
+
152
+ ---
153
+
154
+ ### 2. Sensors Testing
155
+
156
+ **Device Sensors:**
157
+ - **GPS/Location:** Location services
158
+ - **Camera:** Photo/video capture
159
+ - **Microphone:** Audio recording
160
+ - **Accelerometer:** Device tilt/shake
161
+ - **Gyroscope:** Rotation detection
162
+ - **Proximity:** Screen off when near face
163
+ - **Ambient Light:** Brightness auto-adjust
164
+
165
+ **Testing Location:**
166
+ ```javascript
167
+ // Set GPS location
168
+ await driver.setGeoLocation({
169
+ latitude: 37.7749,
170
+ longitude: -122.4194,
171
+ altitude: 0
172
+ });
173
+
174
+ // Test location-based feature
175
+ const nearbyStores = await findElement('stores-list');
176
+ expect(nearbyStores.getText()).toContain('San Francisco');
177
+ ```
178
+
179
+ **Testing Camera/Gallery:**
180
+ ```javascript
181
+ // iOS: Push image to simulator
182
+ await driver.pushFile('/path/on/device/image.jpg', imageBase64);
183
+
184
+ // Android: Set location for gallery
185
+ await driver.execute('mobile: shell', {
186
+ command: 'am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///path'
187
+ });
188
+
189
+ // Trigger camera/gallery picker
190
+ await driver.findElement('upload-photo-button').click();
191
+
192
+ // Verify image uploaded
193
+ expect(await driver.findElement('uploaded-image')).toBeDefined();
194
+ ```
195
+
196
+ ---
197
+
198
+ ### 3. Permissions Testing
199
+
200
+ **iOS Permissions Flow:**
201
+ ```javascript
202
+ // Request permission (iOS shows system alert)
203
+ await driver.findElement('enable-location').click();
204
+
205
+ // Handle iOS permission alert
206
+ const alert = await driver.getAlert();
207
+ expect(alert.getText()).toContain('allow location');
208
+ await alert.accept(); // or alert.dismiss()
209
+
210
+ // Verify permission granted
211
+ const locationEnabled = await driver.findElement('location-status');
212
+ expect(locationEnabled.getText()).toBe('Enabled');
213
+ ```
214
+
215
+ **Android Runtime Permissions:**
216
+ ```javascript
217
+ // Grant permission before test (Android)
218
+ await driver.execute('mobile: shell', {
219
+ command: 'pm grant com.example.app android.permission.CAMERA'
220
+ });
221
+
222
+ // Or handle permission dialog during test
223
+ await driver.findElement('take-photo').click();
224
+
225
+ // Wait for permission dialog
226
+ const permissionDialog = await driver.waitForElement('com.android.packageinstaller:id/permission_message');
227
+ await driver.findElement('com.android.packageinstaller:id/permission_allow_button').click();
228
+ ```
229
+
230
+ ---
231
+
232
+ ### 4. Network Conditions
233
+
234
+ **Test on Poor Networks:**
235
+ ```javascript
236
+ // Simulate 3G network
237
+ await driver.setNetworkConnection(4); // 3G
238
+
239
+ // Test app behavior
240
+ await driver.findElement('load-content').click();
241
+
242
+ const loadingIndicator = await driver.waitForElement('spinner', 5000);
243
+ expect(loadingIndicator).toBeDefined();
244
+
245
+ // Restore full network
246
+ await driver.setNetworkConnection(6); // WiFi + Data
247
+ ```
248
+
249
+ **Offline Mode Testing:**
250
+ ```javascript
251
+ // Disable network
252
+ await driver.toggleAirplaneMode();
253
+
254
+ // Test offline functionality
255
+ await driver.findElement('view-saved-items').click();
256
+ const items = await driver.findElements('saved-item');
257
+ expect(items.length).toBeGreaterThan(0);
258
+
259
+ // Verify offline banner
260
+ const banner = await driver.findElement('offline-banner');
261
+ expect(banner.getText()).toContain('No internet connection');
262
+
263
+ // Re-enable network
264
+ await driver.toggleAirplaneMode();
265
+ ```
266
+
267
+ ---
268
+
269
+ ## Device Fragmentation Strategy
270
+
271
+ ### Real Devices vs Emulators
272
+
273
+ **Emulators/Simulators:**
274
+ - **Pros:** Fast, free, easy to automate, unlimited devices
275
+ - **Cons:** Not 100% accurate, no real sensors, different performance
276
+
277
+ **Real Devices:**
278
+ - **Pros:** Accurate, real sensors, actual performance, real network
279
+ - **Cons:** Expensive, harder to maintain, slower
280
+
281
+ **Strategy:** Use emulators for fast feedback, real devices for critical paths
282
+
283
+ ---
284
+
285
+ ### Device Coverage Matrix
286
+
287
+ **Priority Tiers:**
288
+
289
+ **Tier 1 (Must Test):**
290
+ - Latest iPhone (iOS current version)
291
+ - Latest Samsung Galaxy (Android current version)
292
+ - iPad (latest)
293
+ - ~60% of user base
294
+
295
+ **Tier 2 (Should Test):**
296
+ - iPhone N-1, N-2 (previous 2 generations)
297
+ - Samsung Galaxy N-1, N-2
298
+ - Google Pixel (latest)
299
+ - One popular low-end Android
300
+ - ~30% of user base
301
+
302
+ **Tier 3 (Nice to Test):**
303
+ - Older devices (N-3, N-4)
304
+ - Various manufacturers (Xiaomi, OnePlus, etc.)
305
+ - Tablets
306
+ - ~10% of user base
307
+
308
+ **Example Matrix:**
309
+ ```
310
+ Device | OS Version | Screen Size | Priority
311
+ -----------------------|------------|-------------|----------
312
+ iPhone 15 Pro | iOS 17 | 6.1" | Tier 1
313
+ iPhone 14 | iOS 16 | 6.1" | Tier 2
314
+ iPhone 13 | iOS 15 | 6.1" | Tier 2
315
+ iPad Pro | iOS 17 | 12.9" | Tier 1
316
+ Samsung Galaxy S24 | Android 14 | 6.2" | Tier 1
317
+ Samsung Galaxy S23 | Android 13 | 6.1" | Tier 2
318
+ Google Pixel 8 | Android 14 | 6.2" | Tier 2
319
+ Xiaomi Redmi Note 12 | Android 13 | 6.67" | Tier 3
320
+ ```
321
+
322
+ ---
323
+
324
+ ## Mobile Automation with Appium
325
+
326
+ ### Setup
327
+
328
+ **Install Appium:**
329
+ ```bash
330
+ npm install -g appium
331
+ appium driver install xcuitest # iOS
332
+ appium driver install uiautomator2 # Android
333
+ ```
334
+
335
+ **Capabilities (iOS):**
336
+ ```javascript
337
+ const caps = {
338
+ platformName: 'iOS',
339
+ 'appium:platformVersion': '17.0',
340
+ 'appium:deviceName': 'iPhone 15',
341
+ 'appium:automationName': 'XCUITest',
342
+ 'appium:app': '/path/to/app.ipa',
343
+ 'appium:noReset': true,
344
+ 'appium:fullReset': false
345
+ };
346
+ ```
347
+
348
+ **Capabilities (Android):**
349
+ ```javascript
350
+ const caps = {
351
+ platformName: 'Android',
352
+ 'appium:platformVersion': '14',
353
+ 'appium:deviceName': 'Pixel 8',
354
+ 'appium:automationName': 'UiAutomator2',
355
+ 'appium:app': '/path/to/app.apk',
356
+ 'appium:appPackage': 'com.example.app',
357
+ 'appium:appActivity': '.MainActivity'
358
+ };
359
+ ```
360
+
361
+ ---
362
+
363
+ ### Cross-Platform Tests
364
+
365
+ **Page Object Pattern:**
366
+ ```javascript
367
+ class LoginPage {
368
+ get emailInput() {
369
+ return platform === 'iOS'
370
+ ? $('~email-input') // accessibility id
371
+ : $('android=new UiSelector().resourceId("email")');
372
+ }
373
+
374
+ get passwordInput() {
375
+ return platform === 'iOS'
376
+ ? $('~password-input')
377
+ : $('android=new UiSelector().resourceId("password")');
378
+ }
379
+
380
+ get loginButton() {
381
+ return platform === 'iOS'
382
+ ? $('~login-button')
383
+ : $('android=new UiSelector().text("Login")');
384
+ }
385
+
386
+ async login(email, password) {
387
+ await this.emailInput.setValue(email);
388
+ await this.passwordInput.setValue(password);
389
+ await this.loginButton.click();
390
+ }
391
+ }
392
+
393
+ // Use in tests
394
+ test('user can login', async () => {
395
+ const loginPage = new LoginPage();
396
+ await loginPage.login('test@example.com', 'password123');
397
+
398
+ expect(await dashboardPage.isDisplayed()).toBe(true);
399
+ });
400
+ ```
401
+
402
+ ---
403
+
404
+ ## Mobile Performance Testing
405
+
406
+ ### Key Metrics
407
+
408
+ **Performance Goals:**
409
+ - **App Launch:** < 2 seconds
410
+ - **Screen Transition:** < 300ms
411
+ - **Network Request:** < 1 second
412
+ - **Frame Rate:** 60 FPS (no jank)
413
+ - **Battery Drain:** < 5%/hour (background)
414
+ - **Memory Usage:** < 150MB (typical app)
415
+
416
+ **Measuring with Appium:**
417
+ ```javascript
418
+ // Get performance data
419
+ const perfData = await driver.getPerformanceData('com.example.app', 'cpuinfo', 5);
420
+ console.log('CPU Usage:', perfData);
421
+
422
+ const memData = await driver.getPerformanceData('com.example.app', 'memoryinfo', 5);
423
+ console.log('Memory Usage:', memData);
424
+ ```
425
+
426
+ **iOS Instruments:**
427
+ ```bash
428
+ # Measure launch time
429
+ instruments -t "Time Profiler" -D trace.trace -w "iPhone 15" MyApp.app
430
+
431
+ # Measure memory
432
+ instruments -t "Allocations" -D memory.trace -w "iPhone 15" MyApp.app
433
+ ```
434
+
435
+ **Android Profiler:**
436
+ ```bash
437
+ # Measure CPU
438
+ adb shell dumpsys cpuinfo | grep com.example.app
439
+
440
+ # Measure memory
441
+ adb shell dumpsys meminfo com.example.app
442
+
443
+ # Measure battery
444
+ adb shell dumpsys batterystats --reset
445
+ # Use app for 1 hour
446
+ adb shell dumpsys batterystats com.example.app
447
+ ```
448
+
449
+ ---
450
+
451
+ ## Using with QE Agents
452
+
453
+ ### qe-mobile-tester: Intelligent Cross-Platform Testing
454
+
455
+ ```typescript
456
+ // Agent orchestrates mobile testing across devices
457
+ const results = await agent.executeMobileTests({
458
+ platforms: ['iOS', 'Android'],
459
+ deviceTiers: [1, 2], // Tier 1 and 2 devices
460
+ tests: 'regression-suite',
461
+ parallelDevices: 5
462
+ });
463
+
464
+ // Returns:
465
+ // {
466
+ // iOS: {
467
+ // iPhone15: { passed: 47, failed: 0 },
468
+ // iPhone14: { passed: 46, failed: 1 }
469
+ // },
470
+ // Android: {
471
+ // GalaxyS24: { passed: 45, failed: 2 },
472
+ // Pixel8: { passed: 47, failed: 0 }
473
+ // },
474
+ // totalTime: '15 minutes',
475
+ // deviceFarmCost: '$8.50'
476
+ // }
477
+ ```
478
+
479
+ ### Device Farm Integration
480
+
481
+ ```typescript
482
+ // Agent connects to BrowserStack/Sauce Labs
483
+ await agent.runOnDeviceFarm({
484
+ service: 'browserstack',
485
+ devices: [
486
+ 'iPhone 15 - iOS 17',
487
+ 'Samsung Galaxy S24 - Android 14',
488
+ 'iPad Pro - iOS 17'
489
+ ],
490
+ tests: 'smoke-suite',
491
+ recordVideo: true,
492
+ captureNetworkLogs: true
493
+ });
494
+
495
+ // Automatically distributes tests across devices
496
+ // Captures screenshots, videos, logs
497
+ // Generates consolidated report
498
+ ```
499
+
500
+ ---
501
+
502
+ ## Related Skills
503
+
504
+ **Core Testing:**
505
+ - [agentic-quality-engineering](../agentic-quality-engineering/) - Mobile testing agents
506
+ - [regression-testing](../regression-testing/) - Mobile regression
507
+ - [performance-testing](../performance-testing/) - Mobile performance
508
+
509
+ **Specialized:**
510
+ - [accessibility-testing](../accessibility-testing/) - Mobile a11y (VoiceOver, TalkBack)
511
+ - [security-testing](../security-testing/) - Mobile security
512
+ - [compatibility-testing](../compatibility-testing/) - Device compatibility
513
+
514
+ ---
515
+
516
+ ## Remember
517
+
518
+ **Mobile is not a smaller desktop - it's a different platform.**
519
+
520
+ Unique challenges:
521
+ - Device fragmentation (1000+ devices)
522
+ - Touch gestures, not mouse clicks
523
+ - Sensors, permissions, offline scenarios
524
+ - Intermittent networks, battery constraints
525
+ - Platform differences (iOS Android)
526
+
527
+ **Test on real devices for critical flows.**
528
+
529
+ Emulators catch 80% of bugs, but real devices are essential for:
530
+ - Actual performance
531
+ - Real sensor behavior
532
+ - Network reliability
533
+ - Platform-specific quirks
534
+
535
+ **With Agents:** `qe-mobile-tester` orchestrates testing across device farms, manages platform differences, and provides comprehensive mobile testing at scale. Use agents to test 10+ devices in parallel and reduce mobile testing time from days to hours.