Skip to content

Commit

Permalink
Merge pull request #55 from Malinskiy/feature/run-metrics
Browse files Browse the repository at this point in the history
feature(am): support reporting test metrics
  • Loading branch information
Malinskiy committed Sep 2, 2021
2 parents f2c4cac + 1b059a3 commit eec940e
Show file tree
Hide file tree
Showing 6 changed files with 382 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -219,15 +219,17 @@ class InstrumentationResponseTransformer : ProgressiveResponseTransformer<List<T
return when (Status.valueOf(code)) {
Status.ERROR -> {
var time = 0L
val metrics = mutableMapOf<String, String>()

atom.forEach { line ->
val parameters = atom.filterNot { it == last }.toMap("INSTRUMENTATION_RESULT:")
parameters["stream"]?.lines()?.forEach { line ->
when {
line.startsWith("Time: ") -> {
time = line.substring(6).toDoubleOrNull()?.times(1000)?.toLong() ?: 0L
}
}
}

val metrics = parameters.filterKeys { !KNOWN_KEYS.contains(it) }

finishReported = true
listOf(TestRunEnded(time, metrics))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,4 +258,36 @@ class InstrumentationResponseTransformerTest {
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
.isEqualTo(javaClass.getResourceAsStream("/instrumentation/log_9.expected").reader().readText().trimEnd())
}

@Test
fun testRunMetrics() = runBlocking {
val transformer = InstrumentationResponseTransformer()
val lines = javaClass.getResourceAsStream("/instrumentation/log_10.input").reader().readText()

val events = mutableListOf<TestEvent>()
val bytes = (lines).toByteArray(Const.DEFAULT_TRANSPORT_ENCODING)
transformer.process(bytes, 0, bytes.size)?.let {
events.addAll(it)
}
transformer.transform()?.let { events.addAll(it) }

assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
.isEqualTo(javaClass.getResourceAsStream("/instrumentation/log_10.expected").reader().readText().trimEnd())
}

@Test
fun testSingleTestMetric() = runBlocking {
val transformer = InstrumentationResponseTransformer()
val lines = javaClass.getResourceAsStream("/instrumentation/log_11.input").reader().readText()

val events = mutableListOf<TestEvent>()
val bytes = (lines).toByteArray(Const.DEFAULT_TRANSPORT_ENCODING)
transformer.process(bytes, 0, bytes.size)?.let {
events.addAll(it)
}
transformer.transform()?.let { events.addAll(it) }

assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
.isEqualTo(javaClass.getResourceAsStream("/instrumentation/log_11.expected").reader().readText().trimEnd())
}
}
22 changes: 22 additions & 0 deletions adam/src/test/resources/instrumentation/log_10.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
TestRunStartedEvent(testCount=10)
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText1))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText1), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText2))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText2), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText3))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText3), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText4))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText4), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText5))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText5), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText6))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText6), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText7))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText7), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText8))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText8), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText9))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText9), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText), metrics={})
TestRunEnded(elapsedTimeMillis=7896, metrics={allure-id=some-value})
150 changes: 150 additions & 0 deletions adam/src/test/resources/instrumentation/log_10.input
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
com.example.MainActivityTest:
INSTRUMENTATION_STATUS: test=testText1
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText1
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=2
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText2
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=2
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText2
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=3
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText3
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=3
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText3
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=4
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText4
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=4
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText4
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=5
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText5
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=5
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText5
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=6
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText6
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=6
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText6
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=7
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText7
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=7
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText7
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=8
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText8
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=8
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText8
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=9
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText9
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=9
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText9
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=10
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=testText
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.example.MainActivityTest
INSTRUMENTATION_STATUS: current=10
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=10
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=testText
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_RESULT: allure-id=some-value
INSTRUMENTATION_RESULT: stream=

Time: 7.896

OK (10 tests)


INSTRUMENTATION_CODE: -1
22 changes: 22 additions & 0 deletions adam/src/test/resources/instrumentation/log_11.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
TestRunStartedEvent(testCount=10)
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText1))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText1), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText2))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText2), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText3))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText3), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText4))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText4), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText5))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText5), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText6))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText6), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText7))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText7), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText8))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText8), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText9))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText9), metrics={})
TestStarted(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText))
TestEnded(id=TestIdentifier(className=com.example.MainActivityTest, testName=testText), metrics={allure-id=some-value})
TestRunEnded(elapsedTimeMillis=7714, metrics={})
Loading

0 comments on commit eec940e

Please sign in to comment.