Skip to content

Commit a5496ef

Browse files
authored
Merge pull request #704 from NHSDigital/feature/eema1-NRL-973-perfomanceTestHeaders
NRL-973 Add headers to Performance Tests and Fail Workflow if Tests Fail
2 parents cc96bda + 33c3fe7 commit a5496ef

File tree

3 files changed

+41
-19
lines changed

3 files changed

+41
-19
lines changed

tests/performance/consumer/client.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { check } from "k6";
1010
function getHeaders(odsCode = ODS_CODE) {
1111
return {
1212
"Content-Type": "application/fhir+json",
13+
"X-Request-Id": "K6PerformanceTest",
14+
"NHSD-Correlation-Id": "K6PerformanceTest",
1315
"NHSD-Connection-Metadata": JSON.stringify({
1416
"nrl.ods-code": odsCode,
1517
"nrl.pointer-types": POINTER_TYPES.map(
@@ -24,6 +26,13 @@ function getHeaders(odsCode = ODS_CODE) {
2426
};
2527
}
2628

29+
function checkResponse(res) {
30+
const is_success = check(res, { "status is 200": (r) => r.status === 200 });
31+
if (!is_success) {
32+
console.warn(res.json());
33+
}
34+
}
35+
2736
export function countDocumentReference() {
2837
const choice = Math.floor(Math.random() * NHS_NUMBERS.length);
2938
const nhsNumber = NHS_NUMBERS[choice];
@@ -37,8 +46,7 @@ export function countDocumentReference() {
3746
headers: getHeaders(),
3847
}
3948
);
40-
41-
check(res, { "status is 200": (r) => r.status === 200 });
49+
checkResponse(res);
4250
}
4351

4452
export function readDocumentReference() {
@@ -52,7 +60,7 @@ export function readDocumentReference() {
5260
}
5361
);
5462

55-
check(res, { "status is 200": (r) => r.status === 200 });
63+
checkResponse(res);
5664
}
5765

5866
export function searchDocumentReference() {
@@ -71,12 +79,7 @@ export function searchDocumentReference() {
7179
headers: getHeaders(),
7280
}
7381
);
74-
75-
if (res.status !== 200) {
76-
console.log(res.json());
77-
}
78-
79-
check(res, { "status is 200": (r) => r.status === 200 });
82+
checkResponse(res);
8083
}
8184

8285
export function searchPostDocumentReference() {
@@ -96,6 +99,5 @@ export function searchPostDocumentReference() {
9699
headers: getHeaders(),
97100
}
98101
);
99-
100-
check(res, { "status is 200": (r) => r.status === 200 });
102+
checkResponse(res);
101103
}

tests/performance/process_results.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# flake8: noqa
12
from csv import DictReader
23
from statistics import mean
34

@@ -85,6 +86,7 @@ def _create_response_count_figure(data: dict, title: str):
8586
timestamps = []
8687
successful_requests = []
8788
failed_requests = []
89+
failure_plots = []
8890

8991
for timestamp, metrics in scenario_data.items():
9092
timestamps.append(timestamp)
@@ -139,7 +141,7 @@ def _create_response_count_figure(data: dict, title: str):
139141
axes.axis("tight")
140142

141143
fig.legend(list(fig_labels), loc="upper left")
142-
return fig
144+
return fig, failure_plots
143145

144146

145147
def _create_response_time_figure(data: dict, title: str):
@@ -306,17 +308,22 @@ def baseline(
306308
)
307309
fig.savefig("dist/ramp_up_performance.png")
308310

309-
fig = _create_response_count_figure(
311+
fig, baseline_failures = _create_response_count_figure(
310312
baseline_data,
311313
f"NRL v3.0 Consumer API - Baseline Performance ({target_rps} RPS - Warm Start) - Response Count",
312314
)
313315
fig.savefig("dist/baseline_count.png")
314316

315-
fig = _create_response_count_figure(
317+
fig, ramp_up_failures = _create_response_count_figure(
316318
ramp_up_data,
317319
f"NRL v3.0 Consumer API - Ramp-Up Performance (Up to {target_rps} RPS - Cold Start) - Response Count",
318320
)
319321
fig.savefig("dist/ramp_up_count.png")
322+
if len(baseline_failures) > 0 or len(ramp_up_failures) > 0:
323+
print(
324+
f"Number of Failure Responses: {len(baseline_failures) + len(ramp_up_failures)}"
325+
)
326+
exit(1)
320327

321328

322329
def stress(
@@ -341,17 +348,22 @@ def stress(
341348
)
342349
fig.savefig("dist/stress_ramp_up_performance.png")
343350

344-
fig = _create_response_count_figure(
351+
fig, baseline_failures = _create_response_count_figure(
345352
baseline_data,
346353
f"NRL v3.0 Consumer API - Stress Performance ({target_vus} VUs - Warm Start) - Response Count",
347354
)
348355
fig.savefig("dist/stress_baseline_count.png")
349356

350-
fig = _create_response_count_figure(
357+
fig, ramp_up_failures = _create_response_count_figure(
351358
ramp_up_data,
352359
f"NRL v3.0 Consumer API - Stress Performance (Up to {target_vus} VUs - Cold Start) - Response Count",
353360
)
354361
fig.savefig("dist/stress_ramp_up_count.png")
362+
if len(baseline_failures) > 0 or len(ramp_up_failures) > 0:
363+
print(
364+
f"Number of Failure Responses: {len(baseline_failures) + len(ramp_up_failures)}"
365+
)
366+
exit(1)
355367

356368

357369
if __name__ == "__main__":

tests/performance/producer/client.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ function getBaseURL() {
1919
function getHeaders(odsCode = ODS_CODE) {
2020
return {
2121
"Content-Type": "application/fhir+json",
22+
"X-Request-Id": "K6PerformanceTest",
23+
"NHSD-Correlation-Id": "K6PerformanceTest",
2224
"NHSD-Connection-Metadata": JSON.stringify({
2325
"nrl.ods-code": odsCode,
2426
"nrl.pointer-types": POINTER_TYPES.map(
@@ -32,6 +34,12 @@ function getHeaders(odsCode = ODS_CODE) {
3234
}),
3335
};
3436
}
37+
function checkResponse(res) {
38+
const is_success = check(res, { "status is 200": (r) => r.status === 200 });
39+
if (!is_success) {
40+
console.warn(res.json());
41+
}
42+
}
3543

3644
export function createDocumentReference() {
3745
const nhsNumber = randomItem(NHS_NUMBERS);
@@ -58,7 +66,7 @@ export function readDocumentReference() {
5866

5967
const res = http.get(`${getBaseURL()}/${id}`, { headers: getHeaders() });
6068

61-
check(res, { "status is 200": (r) => r.status === 200 });
69+
checkResponse(res);
6270
}
6371

6472
export function updateDocumentReference() {
@@ -71,7 +79,7 @@ export function updateDocumentReference() {
7179
headers: getHeaders(),
7280
});
7381

74-
check(res, { "status is 200": (r) => r.status === 200 });
82+
checkResponse(res);
7583
}
7684

7785
export function deleteDocumentReference() {
@@ -81,7 +89,7 @@ export function deleteDocumentReference() {
8189
headers: getHeaders(),
8290
});
8391

84-
check(res, { "delete status is 200": (r) => r.status === 200 });
92+
checkResponse(res);
8593
}
8694

8795
export function upsertDocumentReference() {

0 commit comments

Comments
 (0)