diff options
| author | 2024-10-24 23:54:16 +0000 | |
|---|---|---|
| committer | 2024-10-24 23:54:16 +0000 | |
| commit | 0c2b38b476a75a8b09e78232866cc3e55009a64a (patch) | |
| tree | 35be25d8655c409b003b4efbaf5bc5495f6a1440 | |
| parent | c7c3bf88cbba1184891d7ab234c2e9e73eccbf25 (diff) | |
| parent | a71022172c5d7838b4e6a51b34b9071a1b15a088 (diff) | |
Merge "Add a script to dump latest test result summary." into main am: 7efc6eaa99 am: a71022172c
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3318210
Change-Id: I21801780e182cdcef45f159a8b9d1e551ee2b627
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerHook.java | 14 | ||||
| -rwxr-xr-x | ravenwood/scripts/ravenwood-test-summary | 75 |
2 files changed, 87 insertions, 2 deletions
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerHook.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerHook.java index 478bead1354f..e0f9ec94a819 100644 --- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerHook.java +++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerHook.java @@ -25,6 +25,7 @@ import android.util.Log; import androidx.test.platform.app.InstrumentationRegistry; +import org.junit.AssumptionViolatedException; import org.junit.runner.Description; import org.junit.runners.model.TestClass; @@ -134,8 +135,17 @@ public class RavenwoodAwareTestRunnerHook { if (scope == Scope.Instance && order == Order.Outer) { // End of a test method. runner.mState.exitTestMethod(); - RavenwoodTestStats.getInstance().onTestFinished(classDescription, description, - th == null ? Result.Passed : Result.Failed); + + final Result result; + if (th == null) { + result = Result.Passed; + } else if (th instanceof AssumptionViolatedException) { + result = Result.Skipped; + } else { + result = Result.Failed; + } + + RavenwoodTestStats.getInstance().onTestFinished(classDescription, description, result); } // If RUN_DISABLED_TESTS is set, and the method did _not_ throw, make it an error. diff --git a/ravenwood/scripts/ravenwood-test-summary b/ravenwood/scripts/ravenwood-test-summary new file mode 100755 index 000000000000..602fbff31ea3 --- /dev/null +++ b/ravenwood/scripts/ravenwood-test-summary @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2024 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +''' +Print the latest Ravenwood test execution summary + +Usage: /ravenwood-test-summary + +Example output: +Module Passed Failed Skipped +android.test.mock.ravenwood.tests 2 0 0 +CarLibHostUnitTest 565 0 7 +CarServiceHostUnitTest 364 0 0 +CtsAccountManagerTestCasesRavenwood 4 0 0 +CtsAppTestCasesRavenwood 21 0 0 + +Description: +This script finds all the test execution result from /tmp/Ravenwood-stats*, +and shows per-module summary. +''' + +import csv +import glob +import sys + +# Find the latest stats files. +stats_files = glob.glob('/tmp/Ravenwood-stats_*_latest.csv') + +if len(stats_files) == 0: + print("No log files found.", file=sys.stderr) + exit(1) + + +def parse_stats(file, result): + module = '(unknwon)' + passed = 0 + failed = 0 + skipped = 0 + with open(file) as csvfile: + reader = csv.reader(csvfile, delimiter=',') + + + for i, row in enumerate(reader): + if i == 0: continue # Skip header line + module = row[0] + passed += int(row[3]) + failed += int(row[4]) + skipped += int(row[5]) + + result[module] = (passed, failed, skipped) + + +result = {} + +for file in stats_files: + parse_stats(file, result) + +print('%-60s %8s %8s %8s' % ("Module", "Passed", "Failed", "Skipped")) + +for module in sorted(result.keys(), key=str.casefold): + r = result[module] + print('%-60s %8d %8d %8d' % (module, r[0], r[1], r[2])) |