Skip to content

Commit

Permalink
EndpointPerformanceTest: also measure time
Browse files Browse the repository at this point in the history
Measurements below 0.02 will be recorded as 0.02, because we have too much flakiness between
0.01 and 0.02 with the low amount of data.
  • Loading branch information
BacLuc committed Mar 3, 2024
1 parent 38f63b5 commit fe44ced
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 34 deletions.
19 changes: 14 additions & 5 deletions api/tests/Api/SnapshotTests/EndpointPerformanceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,22 @@ public function testPerformanceDidNotChangeForStableEndpoints() {
$collectionEndpoints = self::getCollectionEndpoints();
foreach ($collectionEndpoints as $collectionEndpoint) {
if ('/users' !== $collectionEndpoint && !str_contains($collectionEndpoint, '/content_node')) {
list($statusCode, $queryCount) = $this->measurePerformanceFor($collectionEndpoint);
list($statusCode, $queryCount, $executionTimeSeconds) = $this->measurePerformanceFor($collectionEndpoint);
$responseCodes[$collectionEndpoint] = $statusCode;
$numberOfQueries[$collectionEndpoint] = $queryCount;
$numberOfQueries[$collectionEndpoint] = [
'queryCount' => $queryCount,
'executionTimeSeconds' => $executionTimeSeconds,
];
}

if (!str_contains($collectionEndpoint, '/content_node')) {
$fixtureFor = $this->getFixtureFor($collectionEndpoint);
list($statusCode, $queryCount) = $this->measurePerformanceFor("{$collectionEndpoint}/{$fixtureFor->getId()}");
list($statusCode, $queryCount, $executionTimeSeconds) = $this->measurePerformanceFor("{$collectionEndpoint}/{$fixtureFor->getId()}");
$responseCodes["{$collectionEndpoint}/item"] = $statusCode;
$numberOfQueries["{$collectionEndpoint}/item"] = $queryCount;
$numberOfQueries["{$collectionEndpoint}/item"] = [
'queryCount' => $queryCount,
'executionTimeSeconds' => $executionTimeSeconds,
];
}
}

Expand Down Expand Up @@ -120,8 +126,11 @@ public function measurePerformanceFor(string $collectionEndpoint): array {
$statusCode = $response->getStatusCode();
$collector = $client->getProfile()->getCollector('db');
$queryCount = $collector->getQueryCount();
// because measurements between 0.02 and 0.01 are flaky, we do not record
// times below 0.02.
$executionTimeSeconds = max(0.02, round($collector->getTime(), 2));

return [$statusCode, $queryCount];
return [$statusCode, $queryCount, $executionTimeSeconds];
}

public static function getContentNodeEndpoints(): array {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,87 @@
/activities: 21
/activities/item: 33
/activity_progress_labels: 6
/activity_progress_labels/item: 7
/activity_responsibles: 6
/activity_responsibles/item: 8
/camps: 29
/camps/item: 28
/camp_collaborations: 25
/camp_collaborations/item: 15
/categories: 11
/categories/item: 9
/content_types: 6
/content_types/item: 6
/days: 17
/days/item: 11
/day_responsibles: 6
/day_responsibles/item: 9
/material_items: 7
/material_items/item: 9
/material_lists: 6
/material_lists/item: 7
/periods: 6
/periods/item: 19
/profiles: 6
/profiles/item: 6
/schedule_entries: 23
/schedule_entries/item: 21
/users/item: 6
/activities:
queryCount: 21
executionTimeSeconds: 0.03
/activities/item:
queryCount: 33
executionTimeSeconds: 0.03
/activity_progress_labels:
queryCount: 6
executionTimeSeconds: 0.02
/activity_progress_labels/item:
queryCount: 7
executionTimeSeconds: 0.02
/activity_responsibles:
queryCount: 6
executionTimeSeconds: 0.02
/activity_responsibles/item:
queryCount: 8
executionTimeSeconds: 0.02
/camps:
queryCount: 29
executionTimeSeconds: 0.02
/camps/item:
queryCount: 28
executionTimeSeconds: 0.02
/camp_collaborations:
queryCount: 25
executionTimeSeconds: 0.02
/camp_collaborations/item:
queryCount: 15
executionTimeSeconds: 0.02
/categories:
queryCount: 11
executionTimeSeconds: 0.02
/categories/item:
queryCount: 9
executionTimeSeconds: 0.02
/content_types:
queryCount: 6
executionTimeSeconds: 0.02
/content_types/item:
queryCount: 6
executionTimeSeconds: 0.02
/days:
queryCount: 17
executionTimeSeconds: 0.02
/days/item:
queryCount: 11
executionTimeSeconds: 0.02
/day_responsibles:
queryCount: 6
executionTimeSeconds: 0.02
/day_responsibles/item:
queryCount: 9
executionTimeSeconds: 0.02
/material_items:
queryCount: 7
executionTimeSeconds: 0.02
/material_items/item:
queryCount: 9
executionTimeSeconds: 0.02
/material_lists:
queryCount: 6
executionTimeSeconds: 0.02
/material_lists/item:
queryCount: 7
executionTimeSeconds: 0.02
/periods:
queryCount: 6
executionTimeSeconds: 0.02
/periods/item:
queryCount: 19
executionTimeSeconds: 0.02
/profiles:
queryCount: 6
executionTimeSeconds: 0.02
/profiles/item:
queryCount: 6
executionTimeSeconds: 0.02
/schedule_entries:
queryCount: 23
executionTimeSeconds: 0.02
/schedule_entries/item:
queryCount: 21
executionTimeSeconds: 0.02
/users/item:
queryCount: 6
executionTimeSeconds: 0.02

0 comments on commit fe44ced

Please sign in to comment.