zoukankan      html  css  js  c++  java
  • k6 常见测试模式说明

    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);
    }

    说明

    以上内容来自官方文档,还是很不错的,也是我们进行测试值得参考的流程

    参考资料

    https://k6.io/docs/test-types/introduction/

  • 相关阅读:
    Oracle 的四种连接-左外连接、右外连接、内连接、全连接
    选择文件错误提示
    window 窗口编辑
    BufferedWriter与BufferedRead --------------------------Test2
    BufferedWriter与BufferedRead --------------------------Test
    BufferedInputStream 缓冲输入字节流 -------上
    IO异常 的处理 test
    IO异常 的处理
    Struts2概述、开发环境搭建
    Operation(自定义多线程)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14642685.html
Copyright © 2011-2022 走看看