summaryrefslogtreecommitdiffstats
path: root/mobile/android/focus-android/automation/taskcluster/androidTest/parse-ui-test.py
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/focus-android/automation/taskcluster/androidTest/parse-ui-test.py')
-rw-r--r--mobile/android/focus-android/automation/taskcluster/androidTest/parse-ui-test.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/mobile/android/focus-android/automation/taskcluster/androidTest/parse-ui-test.py b/mobile/android/focus-android/automation/taskcluster/androidTest/parse-ui-test.py
new file mode 100644
index 0000000000..de41a6c7e7
--- /dev/null
+++ b/mobile/android/focus-android/automation/taskcluster/androidTest/parse-ui-test.py
@@ -0,0 +1,89 @@
+#!/usr/bin/python3
+
+from __future__ import print_function
+
+import argparse
+import json
+import sys
+from pathlib import Path
+
+import yaml
+
+
+def parse_args(cmdln_args):
+ parser = argparse.ArgumentParser(description="Parse UI test logs an results")
+ parser.add_argument(
+ "--output-md",
+ type=argparse.FileType("w", encoding="utf-8"),
+ help="Output markdown file.",
+ required=True,
+ )
+ parser.add_argument(
+ "--log",
+ type=argparse.FileType("r", encoding="utf-8"),
+ help="Log output of flank.",
+ required=True,
+ )
+ parser.add_argument(
+ "--results", type=Path, help="Directory containing flank results", required=True
+ )
+ parser.add_argument(
+ "--exit-code", type=int, help="Exit code of flank.", required=True
+ )
+ parser.add_argument("--device-type", help="Type of device ", required=True)
+ parser.add_argument(
+ "--report-treeherder-failures",
+ help="Report failures in treeherder format.",
+ required=False,
+ action="store_true",
+ )
+ return parser.parse_args(args=cmdln_args)
+
+
+def extract_android_args(log):
+ return yaml.safe_load(log.split("AndroidArgs\n")[1].split("RunTests\n")[0])
+
+
+def main():
+ args = parse_args(sys.argv[1:])
+
+ log = args.log.read()
+ matrix_ids = json.loads(args.results.joinpath("matrix_ids.json").read_text())
+
+ android_args = extract_android_args(log)
+
+ print = args.output_md.write
+
+ print("# Devices\n")
+ print(yaml.safe_dump(android_args["gcloud"]["device"]))
+
+ print("# Results\n")
+ print("| Matrix | Result | Firebase Test Lab | Details\n")
+ print("| --- | --- | --- | --- |\n")
+ for matrix, matrix_result in matrix_ids.items():
+ for axis in matrix_result["axes"]:
+ print(
+ f"| {matrix_result['matrixId']} | {matrix_result['outcome']}"
+ f"| [Firebase Test Lab]({matrix_result['webLink']}) | {axis['details']}\n"
+ )
+ if (
+ args.report_treeherder_failures
+ and matrix_result["outcome"] != "success"
+ and matrix_result["outcome"] != "flaky"
+ ):
+ # write failures to test log in format known to treeherder logviewer
+ sys.stdout.write(
+ f"TEST-UNEXPECTED-FAIL | {matrix_result['outcome']} | {matrix_result['webLink']} | {axis['details']}\n"
+ )
+ print("---\n")
+ print("# References & Documentation\n")
+ print(
+ "* [Automated UI Testing Documentation](https://github.com/mozilla-mobile/shared-docs/blob/main/android/ui-testing.md)\n"
+ )
+ print(
+ "* Mobile Test Engineering on [Confluence](https://mozilla-hub.atlassian.net/wiki/spaces/MTE/overview) | [Slack](https://mozilla.slack.com/archives/C02KDDS9QM9) | [Alerts](https://mozilla.slack.com/archives/C0134KJ4JHL)\n"
+ )
+
+
+if __name__ == "__main__":
+ main()