k6 对于常见的测试进行了多种说明,同时也有比较详细的讲解还是很不错的
常见参考测试类型
简单说明
- (smoke test) 冒烟测试, 验证系统的最小负载,而不会出现任何问题
- (load tet)负载测试, 主要根据并发用户以及每秒请求评估系统性能
- (stress test,spike test) 压力测试&&峰值测试,评估系统极限以及极端条件下的稳定性
- (soak test)浸泡测试,系统长时间稳定性测试
冒烟测试实例
- 参考配置
import http from 'k6/http';
import { check, group, sleep, fail } from 'k6';
export let options = {
vus: 1, // 1 user looping for 1 minute
duration: '1m',
thresholds: {
http_req_duration: ['p(99)<1500'], // 99% of requests must complete below 1.5s
},
};
const BASE_URL = 'https://test-api.k6.io';
const USERNAME = 'TestUser';
const PASSWORD = 'SuperCroc2020';
export default () => {
let loginRes = http.post(`${BASE_URL}/auth/token/login/`, {
username: USERNAME,
password: PASSWORD,
});
check(loginRes, {
'logged in successfully': (resp) => resp.json('access') !== '',
});
let authHeaders = {
headers: {
Authorization: `Bearer ${loginRes.json('access')}`,
},
};
let myObjects = http.get(`${BASE_URL}/my/crocodiles/`, authHeaders).json();
check(myObjects, { 'retrieved crocodiles': (obj) => obj.length > 0 });
sleep(1);
};
负载测试
- 参考配置
import http from 'k6/http';
import { check, group, sleep } from 'k6';
export let options = {
stages: [
{ duration: '5m', target: 100 }, // simulate ramp-up of traffic from 1 to 100 users over 5 minutes.
{ duration: '10m', target: 100 }, // stay at 100 users for 10 minutes
{ duration: '5m', target: 0 }, // ramp-down to 0 users
],
thresholds: {
http_req_duration: ['p(99)<1500'], // 99% of requests must complete below 1.5s
'logged in successfully': ['p(99)<1500'], // 99% of requests must complete below 1.5s
},
};
const BASE_URL = 'https://test-api.k6.io';
const USERNAME = 'TestUser';
const PASSWORD = 'SuperCroc2020';
export default () => {
let loginRes = http.post(`${BASE_URL}/auth/token/login/`, {
username: USERNAME,
password: PASSWORD,
});
check(loginRes, {
'logged in successfully': (resp) => resp.json('access') !== '',
});
let authHeaders = {
headers: {
Authorization: `Bearer ${loginRes.json('access')}`,
},
};
let myObjects = http.get(`${BASE_URL}/my/crocodiles/`, authHeaders).json();
check(myObjects, { 'retrieved crocodiles': (obj) => obj.length > 0 });
sleep(1);
};
压力&&峰值测试
- 压力
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
stages: [
{ duration: '2m', target: 100 }, // below normal load
{ duration: '5m', target: 100 },
{ duration: '2m', target: 200 }, // normal load
{ duration: '5m', target: 200 },
{ duration: '2m', target: 300 }, // around the breaking point
{ duration: '5m', target: 300 },
{ duration: '2m', target: 400 }, // beyond the breaking point
{ duration: '5m', target: 400 },
{ duration: '10m', target: 0 }, // scale down. Recovery stage.
],
};
export default function () {
const BASE_URL = 'https://test-api.k6.io'; // make sure this is not production
let responses = http.batch([
[
'GET',
`${BASE_URL}/public/crocodiles/1/`,
null,
{ tags: { name: 'PublicCrocs' } },
],
[
'GET',
`${BASE_URL}/public/crocodiles/2/`,
null,
{ tags: { name: 'PublicCrocs' } },
],
[
'GET',
`${BASE_URL}/public/crocodiles/3/`,
null,
{ tags: { name: 'PublicCrocs' } },
],
[
'GET',
`${BASE_URL}/public/crocodiles/4/`,
null,
{ tags: { name: 'PublicCrocs' } },
],
]);
sleep(1);
}
- 峰值测试
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
stages: [
{ duration: '10s', target: 100 }, // below normal load
{ duration: '1m', target: 100 },
{ duration: '10s', target: 1400 }, // spike to 1400 users
{ duration: '3m', target: 1400 }, // stay at 1400 for 3 minutes
{ duration: '10s', target: 100 }, // scale down. Recovery stage.
{ duration: '3m', target: 100 },
{ duration: '10s', target: 0 },
],
};
export default function () {
const BASE_URL = 'https://test-api.k6.io'; // make sure this is not production
let responses = http.batch([
[
'GET',
`${BASE_URL}/public/crocodiles/1/`,
null,
{ tags: { name: 'PublicCrocs' } },
],
[
'GET',
`${BASE_URL}/public/crocodiles/2/`,
null,
{ tags: { name: 'PublicCrocs' } },
],
[
'GET',
`${BASE_URL}/public/crocodiles/3/`,
null,
{ tags: { name: 'PublicCrocs' } },
],
[
'GET',
`${BASE_URL}/public/crocodiles/4/`,
null,
{ tags: { name: 'PublicCrocs' } },
],
]);
sleep(1);
}
浸泡测试
- 参考
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
stages: [
{ duration: '2m', target: 400 }, // ramp up to 400 users
{ duration: '3h56m', target: 400 }, // stay at 400 for ~4 hours
{ duration: '2m', target: 0 }, // scale down. (optional)
],
};
const API_BASE_URL = 'https://test-api.k6.io';
export default function () {
http.batch([
['GET', `${API_BASE_URL}/public/crocodiles/1/`],
['GET', `${API_BASE_URL}/public/crocodiles/2/`],
['GET', `${API_BASE_URL}/public/crocodiles/3/`],
['GET', `${API_BASE_URL}/public/crocodiles/4/`],
]);
sleep(1);
}
说明
以上内容来自官方文档,还是很不错的,也是我们进行测试值得参考的流程