From e3a45a61ac3b2d691c2f75d36155896b7ed301d8 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Mon, 8 Feb 2021 17:32:02 +0100 Subject: [PATCH 1/6] Implemented first experimental speedtest ref #19 --- src/tests/speedtest.ts | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/tests/speedtest.ts diff --git a/src/tests/speedtest.ts b/src/tests/speedtest.ts new file mode 100644 index 0000000..881340d --- /dev/null +++ b/src/tests/speedtest.ts @@ -0,0 +1,45 @@ +import axios from "axios" +import { Runner } from '../models/Runner' + +const baseurl = "http://localhost:4010" + +axios.interceptors.request.use((config) => { + config.headers['request-startTime'] = process.hrtime() + return config +}) + +axios.interceptors.response.use((response) => { + const start = response.config.headers['request-startTime'] + const end = process.hrtime(start) + const milliseconds = Math.round((end[0] * 1000) + (end[1] / 1000000)) + response.headers['request-duration'] = milliseconds + return response +}) + +async function postContracts(runners: Runner[]): Promise { + const res = await axios.post(`${baseurl}/contracts`, runners); + return new Measurement("contract", runners.length, parseInt(res.headers['request-duration'])) +} + +async function main() { + console.log((await axios.get("http://localhost:4010/version")).data) + console.log((await postContracts([])).toString()) +} + +main(); + +class Measurement { + public type: string; + public inputcount: number; + public responsetime: number; + + constructor(type: string, input: number, time: number) { + this.type = type; + this.inputcount = input; + this.responsetime = time; + } + + public toString(): string { + return `It took ${this.responsetime}ms to generate ${this.inputcount} pdfs for the type ${this.type}.` + } +} \ No newline at end of file -- 2.47.2 From 08944460854c78cd4368cf178b022c31b624c8d9 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Mon, 8 Feb 2021 18:08:01 +0100 Subject: [PATCH 2/6] Implemented runner generation using fakerjs ref #19 --- package.json | 1 + src/tests/speedtest.ts | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 90132ef..65fb6ac 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "@types/node": "^14.14.22", "@types/puppeteer": "^5.4.3", "cp-cli": "^2.0.0", + "faker": "^5.3.1", "nodemon": "^2.0.7", "release-it": "^14.2.2", "rimraf": "^3.0.2", diff --git a/src/tests/speedtest.ts b/src/tests/speedtest.ts index 881340d..1c67e8a 100644 --- a/src/tests/speedtest.ts +++ b/src/tests/speedtest.ts @@ -1,5 +1,7 @@ import axios from "axios" +import faker from "faker" import { Runner } from '../models/Runner' +import { RunnerGroup } from '../models/RunnerGroup' const baseurl = "http://localhost:4010" @@ -16,6 +18,21 @@ axios.interceptors.response.use((response) => { return response }) +function generateRunners(amount: number): Runner[] { + let runners: Runner[] = new Array(); + let group = new RunnerGroup(); + let runner = new Runner(); + for (var i = 0; i < amount; i++) { + group.name = faker.company.bsBuzz(); + group.id = Math.floor(Math.random() * (9999999 - 1) + 1); + runner.firstname = faker.name.firstName(); + runner.lastname = faker.name.lastName(); + runner.id = Math.floor(Math.random() * (9999999 - 1) + 1); + runners.push(runner); + } + return runners; +} + async function postContracts(runners: Runner[]): Promise { const res = await axios.post(`${baseurl}/contracts`, runners); return new Measurement("contract", runners.length, parseInt(res.headers['request-duration'])) @@ -23,7 +40,7 @@ async function postContracts(runners: Runner[]): Promise { async function main() { console.log((await axios.get("http://localhost:4010/version")).data) - console.log((await postContracts([])).toString()) + console.log((await postContracts(generateRunners(100))).toString()); } main(); -- 2.47.2 From 0d27916188114fa41e666170135de2b714ff113a Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Mon, 8 Feb 2021 18:12:35 +0100 Subject: [PATCH 3/6] tmp --- src/tests/speedtest.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/speedtest.ts b/src/tests/speedtest.ts index 1c67e8a..d502b72 100644 --- a/src/tests/speedtest.ts +++ b/src/tests/speedtest.ts @@ -39,8 +39,8 @@ async function postContracts(runners: Runner[]): Promise { } async function main() { - console.log((await axios.get("http://localhost:4010/version")).data) - console.log((await postContracts(generateRunners(100))).toString()); + console.log(`version ${(await axios.get("http://localhost:4010/version")).data.version}`) + console.log("Starting tests"); } main(); -- 2.47.2 From a1b0a1918db552eb385fedcbaa576ad493a1d605 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 9 Feb 2021 17:54:13 +0100 Subject: [PATCH 4/6] Implemented basic contracts tests in various sizes ref #19 --- src/tests/speedtest.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/tests/speedtest.ts b/src/tests/speedtest.ts index d502b72..5448215 100644 --- a/src/tests/speedtest.ts +++ b/src/tests/speedtest.ts @@ -39,8 +39,12 @@ async function postContracts(runners: Runner[]): Promise { } async function main() { + const sizes = [0, 1, 10, 50, 100, 200, 500, 1000] console.log(`version ${(await axios.get("http://localhost:4010/version")).data.version}`) console.log("Starting tests"); + for (let size of sizes) { + console.log((await (await postContracts(generateRunners(size))).toString())) + } } main(); -- 2.47.2 From 75b8b281b87d9b173093f16beae12d707ec05052 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 9 Feb 2021 18:02:43 +0100 Subject: [PATCH 5/6] Added speedtest script to package ref #19 --- package.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a60e379..4d84162 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,9 @@ "build": "rimraf ./dist && tsc && cp-cli ./src/templates ./dist/templates && cp-cli ./src/locales ./dist/locales", "licenses:export": "license-exporter --markdown", "release": "release-it --only-version", - "translations:sort": "node sort_translations.js" + "translations:sort": "node sort_translations.js", + "test:speed": "start-server-and-test dev http://localhost:4010/docs/openapi.json test:speed:run", + "test:speed:run": "ts-node src/tests/speedtest.ts" }, "repository": { "type": "git", @@ -70,6 +72,7 @@ "nodemon": "^2.0.7", "release-it": "^14.2.2", "rimraf": "^3.0.2", + "start-server-and-test": "^1.12.0", "ts-node": "^9.1.1", "typescript": "^4.1.3" }, @@ -86,4 +89,4 @@ "publish": false } } -} +} \ No newline at end of file -- 2.47.2 From aefe5493b06c04cc2b20029e1f7fc5f15ec9c04e Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 9 Feb 2021 18:43:15 +0100 Subject: [PATCH 6/6] Beautified output a bit ref #19 --- src/tests/speedtest.ts | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/tests/speedtest.ts b/src/tests/speedtest.ts index 5448215..c016204 100644 --- a/src/tests/speedtest.ts +++ b/src/tests/speedtest.ts @@ -38,13 +38,26 @@ async function postContracts(runners: Runner[]): Promise { return new Measurement("contract", runners.length, parseInt(res.headers['request-duration'])) } +async function testContracts(sizes): Promise { + let measurements = new Array(); + console.log("#### Testing contracts ####"); + + for (let size of sizes) { + const m = await postContracts(generateRunners(size)); + console.log(m.toString()); + measurements.push(m); + } + return measurements; +} + async function main() { const sizes = [0, 1, 10, 50, 100, 200, 500, 1000] - console.log(`version ${(await axios.get("http://localhost:4010/version")).data.version}`) - console.log("Starting tests"); - for (let size of sizes) { - console.log((await (await postContracts(generateRunners(size))).toString())) - } + console.log("########### Speedtest ###########"); + console.log(`Document server version (according to the api): ${(await axios.get("http://localhost:4010/version")).data.version}`); + console.log("####### Running tests #######"); + const contractResults = await testContracts(sizes); + console.log("####### Results #######"); + console.table(contractResults); } main(); -- 2.47.2