Merge pull request 'Added speedtest feature/19-speed_test' (#23) from feature/19-speed_test into dev
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #23
This commit is contained in:
commit
7ac8edb5cf
@ -8,7 +8,9 @@
|
|||||||
"build": "rimraf ./dist && tsc && cp-cli ./src/templates ./dist/templates && cp-cli ./src/locales ./dist/locales",
|
"build": "rimraf ./dist && tsc && cp-cli ./src/templates ./dist/templates && cp-cli ./src/locales ./dist/locales",
|
||||||
"licenses:export": "license-exporter --markdown",
|
"licenses:export": "license-exporter --markdown",
|
||||||
"release": "release-it --only-version",
|
"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": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -66,9 +68,11 @@
|
|||||||
"@types/node": "^14.14.22",
|
"@types/node": "^14.14.22",
|
||||||
"@types/puppeteer": "^5.4.3",
|
"@types/puppeteer": "^5.4.3",
|
||||||
"cp-cli": "^2.0.0",
|
"cp-cli": "^2.0.0",
|
||||||
|
"faker": "^5.3.1",
|
||||||
"nodemon": "^2.0.7",
|
"nodemon": "^2.0.7",
|
||||||
"release-it": "^14.2.2",
|
"release-it": "^14.2.2",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
|
"start-server-and-test": "^1.12.0",
|
||||||
"ts-node": "^9.1.1",
|
"ts-node": "^9.1.1",
|
||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
},
|
},
|
||||||
@ -85,4 +89,4 @@
|
|||||||
"publish": false
|
"publish": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
79
src/tests/speedtest.ts
Normal file
79
src/tests/speedtest.ts
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import axios from "axios"
|
||||||
|
import faker from "faker"
|
||||||
|
import { Runner } from '../models/Runner'
|
||||||
|
import { RunnerGroup } from '../models/RunnerGroup'
|
||||||
|
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
function generateRunners(amount: number): Runner[] {
|
||||||
|
let runners: Runner[] = new Array<Runner>();
|
||||||
|
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<Measurement> {
|
||||||
|
const res = await axios.post(`${baseurl}/contracts`, runners);
|
||||||
|
return new Measurement("contract", runners.length, parseInt(res.headers['request-duration']))
|
||||||
|
}
|
||||||
|
|
||||||
|
async function testContracts(sizes): Promise<Measurement[]> {
|
||||||
|
let measurements = new Array<Measurement>();
|
||||||
|
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("########### 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();
|
||||||
|
|
||||||
|
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}.`
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user