Add k6 test files
This commit is contained in:
parent
85cfb05060
commit
90651ed6aa
8 changed files with 180 additions and 12 deletions
32
README.md
32
README.md
|
@ -1,2 +1,32 @@
|
|||
# performance-testing
|
||||
The code from my YouTube video on "How to do Performance Testing with k6"
|
||||
The code from my YouTube video on "How to do Performance Testing with k6"
|
||||
|
||||
You first need to run the API:
|
||||
```sh
|
||||
cd src
|
||||
dotnet run
|
||||
```
|
||||
|
||||
Then in a seperate terminal window run the tests using the commands below.
|
||||
|
||||
I have added a HOSTNAME variable to each of the scripts (except simple-test.js) which needs to be added when running them.
|
||||
|
||||
## Stress Test
|
||||
```sh
|
||||
k6 run -e HOSTNAME=localhost:5157 tests/stress-test.js
|
||||
```
|
||||
|
||||
## Spike Test
|
||||
```sh
|
||||
k6 run -e HOSTNAME=localhost:5157 tests/spike-test.js
|
||||
```
|
||||
|
||||
## Load Test
|
||||
```sh
|
||||
k6 run -e HOSTNAME=localhost:5157 tests/load-test.js
|
||||
```
|
||||
|
||||
## Soak Test
|
||||
```sh
|
||||
k6 run -e HOSTNAME=localhost:5157 tests/soak-test.js
|
||||
```
|
|
@ -1,6 +1,5 @@
|
|||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
|
||||
builder.Services.AddControllers();
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
|
||||
|
|
|
@ -19,16 +19,6 @@
|
|||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"https": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "swagger",
|
||||
"applicationUrl": "https://localhost:7255;http://localhost:5157",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
|
|
35
tests/load-test.js
Normal file
35
tests/load-test.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
import http from 'k6/http';
|
||||
import { sleep } from 'k6';
|
||||
import { SharedArray } from 'k6/data';
|
||||
|
||||
export const options = {
|
||||
stages: [
|
||||
{ duration: '5m', target: 200 }, // ramp up
|
||||
{ duration: '20m', target: 200 }, // stable
|
||||
{ duration: '5m', target: 0 }, // ramp-down to 0 users
|
||||
],
|
||||
thresholds: {
|
||||
http_req_duration: ['p(99)<10'], // 99% of requests must complete within 10ms
|
||||
}
|
||||
};
|
||||
|
||||
const dates = new SharedArray('dates', function () {
|
||||
var dates = [];
|
||||
var currentDate = new Date();
|
||||
var minDate = new Date();
|
||||
minDate.setFullYear(currentDate.getFullYear() - 100);
|
||||
|
||||
for (var i = 0; i < 100; i++) {
|
||||
var randomTime = Math.random() * (currentDate.getTime() - minDate.getTime());
|
||||
var randomDate = new Date(minDate.getTime() + randomTime);
|
||||
dates.push(randomDate.toISOString());
|
||||
}
|
||||
|
||||
return dates;
|
||||
});
|
||||
|
||||
export default () => {
|
||||
const randomDate = dates[Math.floor(Math.random() * dates.length)];
|
||||
http.get(`http://${__ENV.HOSTNAME}/age/${randomDate}`);
|
||||
sleep(1);
|
||||
};
|
10
tests/simple-test.js
Normal file
10
tests/simple-test.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
import http from 'k6/http';
|
||||
|
||||
export const options = {
|
||||
vus: 1,
|
||||
duration: '10s'
|
||||
};
|
||||
|
||||
export default () => {
|
||||
http.get('http://localhost:5157/age/1987-09-01');
|
||||
};
|
32
tests/soak-test.js
Normal file
32
tests/soak-test.js
Normal file
|
@ -0,0 +1,32 @@
|
|||
import http from 'k6/http';
|
||||
import { sleep } from 'k6';
|
||||
import { SharedArray } from 'k6/data';
|
||||
|
||||
export const options = {
|
||||
stages: [
|
||||
{ duration: '5m', target: 200 }, // ramp up
|
||||
{ duration: '8h', target: 200 }, // stable
|
||||
{ duration: '5m', target: 0 }, // ramp-down to 0 users
|
||||
],
|
||||
};
|
||||
|
||||
const dates = new SharedArray('dates', function () {
|
||||
var dates = [];
|
||||
var currentDate = new Date();
|
||||
var minDate = new Date();
|
||||
minDate.setFullYear(currentDate.getFullYear() - 100);
|
||||
|
||||
for (var i = 0; i < 100; i++) {
|
||||
var randomTime = Math.random() * (currentDate.getTime() - minDate.getTime());
|
||||
var randomDate = new Date(minDate.getTime() + randomTime);
|
||||
dates.push(randomDate.toISOString());
|
||||
}
|
||||
|
||||
return dates;
|
||||
});
|
||||
|
||||
export default () => {
|
||||
const randomDate = dates[Math.floor(Math.random() * dates.length)];
|
||||
http.get(`http://${__ENV.HOSTNAME}/age/${randomDate}`);
|
||||
sleep(1);
|
||||
};
|
36
tests/spike-test.js
Normal file
36
tests/spike-test.js
Normal file
|
@ -0,0 +1,36 @@
|
|||
import http from 'k6/http';
|
||||
import { sleep } from 'k6';
|
||||
import { SharedArray } from 'k6/data';
|
||||
|
||||
export const options = {
|
||||
stages: [
|
||||
{ duration: '10s', target: 200 }, // ramp up
|
||||
{ duration: '1m', target: 200 }, // stable
|
||||
{ duration: '10s', target: 2000 }, // ramp up
|
||||
{ duration: '5m', target: 2000 }, // stable
|
||||
{ duration: '10s', target: 200 }, // ramp up
|
||||
{ duration: '1m', target: 200 }, // stable
|
||||
{ duration: '10s', target: 0 }, // ramp-down to 0 users
|
||||
],
|
||||
};
|
||||
|
||||
const dates = new SharedArray('dates', function () {
|
||||
var dates = [];
|
||||
var currentDate = new Date();
|
||||
var minDate = new Date();
|
||||
minDate.setFullYear(currentDate.getFullYear() - 100);
|
||||
|
||||
for (var i = 0; i < 100; i++) {
|
||||
var randomTime = Math.random() * (currentDate.getTime() - minDate.getTime());
|
||||
var randomDate = new Date(minDate.getTime() + randomTime);
|
||||
dates.push(randomDate.toISOString());
|
||||
}
|
||||
|
||||
return dates;
|
||||
});
|
||||
|
||||
export default () => {
|
||||
const randomDate = dates[Math.floor(Math.random() * dates.length)];
|
||||
http.get(`http://${__ENV.HOSTNAME}/age/${randomDate}`);
|
||||
sleep(1);
|
||||
};
|
36
tests/stress-test.js
Normal file
36
tests/stress-test.js
Normal file
|
@ -0,0 +1,36 @@
|
|||
import http from 'k6/http';
|
||||
import { sleep } from 'k6';
|
||||
import { SharedArray } from 'k6/data';
|
||||
|
||||
export const options = {
|
||||
stages: [
|
||||
{ duration: '1m', target: 200 }, // ramp up
|
||||
{ duration: '5m', target: 200 }, // stable
|
||||
{ duration: '1m', target: 400 }, // ramp up
|
||||
{ duration: '5m', target: 400 }, // stable
|
||||
{ duration: '1m', target: 800 }, // ramp up
|
||||
{ duration: '5m', target: 800 }, // stable
|
||||
{ duration: '5m', target: 0 }, // ramp-down to 0 users
|
||||
],
|
||||
};
|
||||
|
||||
const dates = new SharedArray('dates', function () {
|
||||
var dates = [];
|
||||
var currentDate = new Date();
|
||||
var minDate = new Date();
|
||||
minDate.setFullYear(currentDate.getFullYear() - 100);
|
||||
|
||||
for (var i = 0; i < 100; i++) {
|
||||
var randomTime = Math.random() * (currentDate.getTime() - minDate.getTime());
|
||||
var randomDate = new Date(minDate.getTime() + randomTime);
|
||||
dates.push(randomDate.toISOString());
|
||||
}
|
||||
|
||||
return dates;
|
||||
});
|
||||
|
||||
export default () => {
|
||||
const randomDate = dates[Math.floor(Math.random() * dates.length)];
|
||||
http.get(`http://${__ENV.HOSTNAME}/age/${randomDate}`);
|
||||
sleep(1);
|
||||
};
|
Loading…
Reference in a new issue