k6 - 02를 사용한 성능 테스트 - 여러 작업

5034 단어
이 시리즈의 첫 번째 부분에서는 매우 기본적인 k6 테스트를 만드는 방법을 배웠습니다. 이 자습서에서는 좀 더 현실적이고 흥미로운 테스트를 만들 것입니다.
이를 위해 테스트할 실제 앱이 있는 것이 좋습니다. 간단하고 익숙하기 때문에 파일 호스팅 및 공유ownCloud를 선택했습니다.
Dropbox와 유사한 솔루션입니다.

테스트용 ownCloud 인스턴스를 시작하고 실행하는 가장 쉬운 방법은 docker를 사용하는 것입니다.

그냥 실행하십시오: docker run -p 8080:8080 --name owncloud owncloud/server .

이 마법의 docker run 명령은 http://localhost:8080에서 연결할 수 있는 새로운 ownCloud 설치를 제공해야 합니다.

매우 안전한 암호admin가 있는 admin라는 사용자 사전 설정이 하나 있습니다. UI에 로그인하여 파일 업로드, 새 사용자 생성, 파일 및 폴더 공유 등을 할 수 있습니다.
ownCloud 자체를 조금 사용해 본 후 k6으로 돌아가 보겠습니다.

파일 생성 테스트



파일( script.js )을 만들고 다음 내용을 추가합니다.

import http from 'k6/http'
import encoding from 'k6/encoding'
import { check } from 'k6'
import { uuidv4 } from 'https://jslib.k6.io/k6-utils/1.0.0/index.js'

export let options = {
  iterations: 100,
  vus: 10
}

export default function() {
  const fileName = `${uuidv4()}.txt`
  const url = `http://localhost:8080/remote.php/webdav/${fileName}`
  const body = 'some content'
  const headers = {
    'Authorization': 'Basic ' + encoding.b64encode('admin:admin'),
    'Content-Type': 'application/x-www-form-urlencoded'
  }

  const response = http.request('PUT', url, body, { headers: headers })
  check(response, {
    'status is 201': (r) => r.status === 201 || 204
  })
}


  • 여기에서 우리가 제공하는 options 개체에서 iterations: 100vus: 10 즉, 100개의 테스트 실행이 10 vus로 나뉩니다. iterationsvus로 나누는 방법을 지정하기 위해 executor 옵션을 제공할 수 있습니다. 실행자에 대한 자세한 내용은 확인https://k6.io/docs/using-k6/scenarios/executors/
  • 파일 생성을 위해 owncloud 엔드포인트에 PUT 요청을 전송하고 있습니다. 인증 헤더의 경우 우리가 만든 비밀번호admin와 함께 사용자admin를 사용하고 있습니다. 따라서 기본적으로 옵션의 10 vusadmin 사용자 인증
  • 을 사용합니다.
  • owncloud에서 같은 이름으로 여러 파일을 생성할 수 없기 때문에 fileName에서 uuid을 사용하고 있습니다.

  • 테스트 삭제 파일




    import http from 'k6/http'
    import encoding from 'k6/encoding'
    import { check } from 'k6'
    import { uuidv4 } from 'https://jslib.k6.io/k6-utils/1.0.0/index.js'
    
    export let options = {
      iterations: 100,
      vus: 10
    }
    
    const createFile = url => {
      const body = 'some content'
      const headers = {
        'Authorization': 'Basic ' + encoding.b64encode('admin:admin'),
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    
      const response = http.request('PUT', url, body, { headers: headers })
      check(response, {
        'status is 201': (r) => r.status === 201 || 204
      })
    }
    
    const deleteFile = (url) => {
      const headers = {
        'Authorization': 'Basic ' + encoding.b64encode('admin:admin')
      }
      const response = http.request('DELETE', url, undefined, { headers: headers })
      check(response, {
        'status is 204': (r) => r.status === 204
      })
    }
    
    export default function() {
      const fileName = `${uuidv4()}.txt`
      const url = `http://localhost:8080/remote.php/webdav/${fileName}`
      createFile(url)
      deleteFile(url)
    }
    


    여기에 파일을 삭제하는 코드를 추가하고 있습니다. 또한 파일 생성 및 삭제에 대한 논리를 두 개의 별도 함수createFiledeleteFile로 분리했습니다.

    설정 단계



    테스트 중에 stages를 사용하여 VU 레벨을 올리거나 내릴 수 있습니다. options.stages 속성을 사용하면 램핑 동작을 구성할 수 있습니다.

    ...
    export let options = {
      stages: [
        { duration: '30s', target: 20 },
        { duration: '1m30s', target: 10 },
        { duration: '20s', target: 0 }
      ]
    }
    ...
    


  • 첫 번째 단계(30초 지속 시간): 시작 시 처음에는 1 VU가 있고 그 다음 k6은 30초 동안 1VU에서 20VU로 선형적으로 증가합니다.
  • 두 번째 단계(1분 30초 지속 시간): 이 단계가 시작될 때 첫 번째 단계에서 20Vus를 갖게 되지만 이 단계의 지속 시간이 끝나면 선형적으로 10Vus로 감소합니다.
  • 세 번째 단계(20초 지속 시간): 이 단계 동안 두 번째 단계의 10Vus는 20초가 지나면 선형적으로 0으로 감소합니다.

  • 이제 k6 run script.js를 사용하여 테스트를 실행하면 다음과 같습니다.



    위의 스크린샷에서 볼 수 있듯이 테스트는 2m20s (30s + 1m30s + 20s)의 총 지속 시간 동안 실행되며 vus max20(첫 번째 단계의 끝)이고 min1입니다. ) 첫 번째 단계가 시작될 때 발생합니다.

    좋은 웹페이지 즐겨찾기