본문 바로가기
Today I learned

2020 11 22

by soheemon 2020. 11. 22.

Gatling

<참고 URL: gatling.io/docs/current/advanced_tutorial/>

 

looping

반복되는 exec 블록을 함수로 추출후 repeat를 사용한다.

 

repeat 

지정된 횟수만큼 루프를 반복한다.

repeat(times, counterName) {
	myChain
}

repeat(20) { myChain } // will loop on myChain 20 times
repeat("${myKey}") { myChain } // will loop on myChain (Int value of the Session attribute myKey) times
repeat(session => session("foo").as[Int] /* or anything that returns an Int*/ ) { myChain }

 

 

// 해당 코드를 반복문으로 교체해보자.
object Browse {
	def gotoPage(page: Int) = exec(http("Page " + page)
    .get("/computers?=" + page))
    .pause(1)
    
    val browse = exec(gotoPage(0), gotoPage(1), gotoPage(2), gotoPage(3), gotoPage(4))
}

//repeat 함수를 사용하여 반복
object Browse {
	val browse = repeat(5, "n") {
    exec(http("Page ${n}")
    .get("/computers?p=${n}"))
    .pause(1)
    }
}

 

simulation-setup

load 모델에는 두가지 방법이 있다.

- Closed systems : 동시 사용자의 수를 제어 할 수 있다.

- Open systems : 도착 사용자의 비율을 제어 할 수 있다.

 

Closed System은 동시 사용자 수가 제한되는 시스템이다. 큐가 전부 차면, 다른 사용자가 종료 해야지 새로운 사용자가 들어 올 수 있다.

반대로 Open system은 동시 사용자 수를 제어할 수 없다. 서비스를 제공하는 데 문제가 있어도 사용자의 연결을 계속 받는다. 대부분의 웹 사이트는 Open system을 사용한다.

 

만약 Open system임에도 불구하고 closed system 워크로드모델로 로드테스트를 진행한다면 테스트는 상상했던것과 다른 결과를 내놓을것이다.

 

open and closed workload models는 서로 상반되어서, 두개를 동일한 injection profile에 혼합할 수 없다.

 

Open Model

setUp(
  scn.inject(
    nothingFor(4 seconds), // 1
    atOnceUsers(10), // 2
    rampUsers(10) during (5 seconds), // 3
    constantUsersPerSec(20) during (15 seconds), // 4
    constantUsersPerSec(20) during (15 seconds) randomized, // 5
    rampUsersPerSec(10) to 20 during (10 minutes), // 6
    rampUsersPerSec(10) to 20 during (10 minutes) randomized, // 7
    heavisideUsers(1000) during (20 seconds) // 8
  ).protocols(httpProtocol)
)

대기열이 없는 구조.

1) 주어진 시간동안 일시 중지한다.

2) 주어진 수의 사용자를 한번에 주입한다.

3) 주어진 기간의 시간대에 균등하게 분산된 주어진 사용자 수를 주입한다.(5초동안 일정하게 10명투입)

4) 주어진 기간동안 초당 사용자 수로 정의된 일정한 비율로 사용자를 주입한다. (15초동안 1초당 20명비율로 투입하되, 그 비율을 일정하게 유지한다.)

5) 위와 동일하지만, 그 비율을 랜덤화한다.

6) 주어진 기간동안 초당 사용자 수로 정의된 시작 비율에서 목표 비율까지 사용자를 주입한다.(10분동안 1초당 10명을 시작으로 주입하되, 그 비율을 1초당 20명으로 늘린다.) - 일정한 간격으로

7) 위와 동일하지만 그 비율을 랜덤화한다.

8) 주어진 기간으로 늘어난 헤비 사이드 스텝 함수 의 부드러운 근사에 따라 주어진 수의 사용자를 주입합니다 .

 

Closed Model

대기열이 있는 구조

setUp(
  scn.inject(
    constantConcurrentUsers(10) during (10 seconds), // 1
    rampConcurrentUsers(10) to (20) during (10 seconds) // 2
  )
)

1) 동시 사용자 수가 일정하도록 주입

2) 시스템의 동시 사용자 수가 선형적으로 증가하도록 주입()

 

"어렵다"

'Today I learned' 카테고리의 다른 글

2020 11 27  (0) 2020.11.27
2020 11 26  (0) 2020.11.26
2020 11 19  (0) 2020.11.19
2020 11 11  (0) 2020.11.11
2020 11 09  (0) 2020.11.09

댓글