k6를 사용하여 DB의 부하 테스트 환경을 구축해 보십시오

11034 단어 PostgreSQLSQLk6tech

개시하다


DB타SQL에 대한 하중 테스트를 수행하기 위한 필수조건이 있는데, 그때 k6를 이용한 적이 있기 때문에 내용을 정리해보려고 한다.

무엇


k6는 소스 부하 테스트 도구입니다.
무료, 개발자 중심, 확장 가능한 특징이 있습니다.
k6 테스트 시스템의 신뢰성과 성능을 이용하여 고성능과 장애 방지 응용 프로그램을 구축할 수 있다.

컨디션


이번에 Mac의 로컬 환경에서 가져오기 k6xk6-sql (SQL 확장 기능 실행).
  • macOS Montery (12.1)
  • k6 (0.36.1)
  • xk6 (v0.6.1)
  • go (1.17.8)
  • 가져오기


    goo 설치


    확장 기능의 설치 관계로 인해 goenv부터 가져옵니다.
    설치go
    $ goenv install 1.17.8
    
    유효성
    $ goenv global 1.17.8
    
    명령을 실행할 수 있는 경우 완료
    $ go version
    go version go1.17.8 darwin/arm64
    

    k6 및 xk6-sql 설치


    설치k6설치
    $ go install go.k6.io/[email protected]
    
    xk6
    $ go install go.k6.io/xk6/cmd/[email protected]
    
    작업 디렉토리로 이동
    구축 명령 실행
    $ cd /path/to/workspace
    
    xk6-sql
    $ CGO_ENABLED=1 xk6 build master \
      --with github.com/grafana/xk6-sql
    
    작업 디렉토리 바로 아래에 파일 생성 확인 k6
    $ ls 
    k6
    
    생성된 k6의 실행을 확인하면 완료
    $ ./k6 version
    k6 v0.36.0 ((devel), go1.17.8, darwin/arm64)
    

    실행


    이번에는 로컬 환경에 PostgreSQL이 존재하는 환경을 바탕으로 PostgreSQL을 연결하는 시나리오를 제작한다.

    방안 실현


    시나리오의 실현은 JS에서 진행된다.
    PostgreSQL을 연결하고 SQL을 실행하는 코드는 다음과 같습니다.
    //
    // postgreSQLに接続するサンプル
    //
    import sql from ‘k6/x/sql’;
    
    // ユーザー名
    const userName = ‘user’;
    // パスワード
    const password = ‘password’;
    // ホスト名
    const hostName =127.0.0.1;
    // ポート番号
    const port =5432;
    // DB名
    const dbName = ‘postgres’
    // SSLモード
    const sslMode = ‘sslmode=disable’
    
    // 接続情報から接続用の文字列を作成
    const connectionString = `postgres://${userName}:${password}@${hostName}:${port}/${dbName}?${sslMode}`;
    
    // DBへ接続
    const db = sql.open(“postgres”, connectionString);
    
    export function setup() {
      db.exec(`CREATE TABLE IF NOT EXISTS table (
              key varchar,
              value varchar);`);
    }
    export function teardown() {
      db.close();
    }
    export default () => {
      db.exec(INSERT INTO table (key, value) VALUES (‘plugin-name’, ‘k6-plugin-sql’););
      let results = sql.query(db,SELECT * FROM table;);
      for (const row of results) {
        console.log(`key: ${row.key}, value: ${row.value}`);
      }
    }
    
    실제 실행 후 다음과 같은 결과가 표시됩니다.
    $ ./k6 run scenario.js
    
              /\      |‾‾| /‾‾/   /‾‾/
         /\  /  \     |  |/  /   /  /
        /  \/    \    |     (   /   ‾‾\
       /          \   |  |\  \ |  (‾)  |
      / __________ \  |__| \__\ \_____/ .io
      execution: local
         script: ./script.js
         output: -
      scenarios: (100.00%) 1 scenario, 1 max VUs, 10m30s max duration (incl. graceful stop):
               * default: 1 iterations for each of 1 VUs (maxDuration: 10m0s, gracefulStop: 30s)
    INFO[0002] key: plugin-name, value: k6-plugin-sql        source=console
    running (00m01.9s), 0/1 VUs, 1 complete and 0 interrupted iterations
    default ✓ [======================================] 1 VUs  00m00.7s/10m0s  1/1 iters, 1 per VU
         █ setup
         █ teardown
         data_received........: 0 B 0 B/s
         data_sent............: 0 B 0 B/s
         iteration_duration...: avg=628.31ms min=53.58µs med=664.73ms max=1.22s p(90)=1.1s p(95)=1.16s
         iterations...........: 1   0.529856/s
         vus..................: 0   min=0      max=0
         vus_max..............: 1   min=1      max=1
    
    DB에서 SQL을 직접 수행할 수 있습니다.
    이후 필요에 따라 방안의 내용을 수정하기만 하면 된다.

    최후


    k6를 사용하여 DB에서 SQL을 직접 수행할 수 있는 환경을 정리했다.
    k6는 기능이 풍부한 Saas로 여기에는 다 쓰지 못하는 기능이 많다.이 방면은 문서에 기재되어 있으니 필요에 따라 참고하시오.
    그럼!

    참고 자료

  • k6 (공식 사이트)
  • k6(Github)
  • xk6(Github)
  • xk6-sql(Github)
  • 좋은 웹페이지 즐겨찾기