Gatling에서 일반 Scala 코드의 성능 테스트

S3의 PUT 성능을 측정해달라고 부탁받아, Gatling으로 할 수 없는지 시도해 보는 것이 일의 경위입니다.
Gatling은 HTTP/HTTPS 로드 테스트를 지원하지만 다른 방법은 JMS
와 MQTT를 지원하지만, 일반 Scala 코드에서로드를 작성할 수있는 방법은 문서를 찾는 것이 좋습니다.
S3의 PUT은 HTTP로 할 수 있지만 SDK없이 Gatling 시나리오에서 재현하는 것은 매우 번거롭습니다. 통상 이용할 때는 SDK로 간단하게 액세스 할 수 있으므로, 모처럼의 Scala이기 때문에, SDK로 액세스하는 코드 그대로 부하 테스트하고 싶습니다.

일반적으로 Gatling 시나리오는 이렇게 작성합니다.

거기서, exec에 건네주고 있는 형태를 자작 할 수 있으면, 그 안에 SDK로 액세스 하는 코드를 써 하고 싶을 수 있다고 하는 산단입니다.

먼저 exec의 구현을 살펴 보겠습니다.

Execs 추적의 exec 메서드가 ActionBuilder를 반환합니다.
그런 다음 ActionBuilder를 살펴보겠습니다.

Action 트레이트에는 build 메소드가 있어 Action 를 돌려줍니다.

Action 트레이트에는 execute 메소드가 있어, 이름으로부터 생각하면 이것을 구현하면 좋을 것 같습니다.
그러나 인수의 Session은 무엇이든 들어있는 클래스이므로이 메서드 내에서 무엇을하고 있는지 모릅니다. 코멘트도

Core method executed when the Action received a Session message
"액션이 세션 메시지를 받으면 실행되는 핵심 방법"

밖에 쓰지 않고 참고가 될 것 같지 않습니다.
거기서 「Gatling Custom Action」등에서 구구라고 참고가 되는 페이지를 찾아 구현할 수 있었습니다만, 지금은 그 페이지 사라지고 있었습니다.
여러 가지로 ActionBuilder와 Action의 구현은 이렇게 되었습니다.

ActionBuilder 의 build 메소드의 인수로 건네받고 있는 ScenarioContext 로부터 statsEngine 를 꺼내 logReponse 메소드로 실행 데이터를 기록하고 있습니다.
이용 방법은 이런 느낌이 됩니다.

적절한 처리를 작성하고 Status를 반환합니다.
이것을 gatling:test로 실행하면 무사 부하 테스트가 실행되어 리포트도 출력되었습니다.



이제 AWS, GCP, Redis 등 HTTP 액세스가 어려운 대상에 대해서도 쉽게 부하를 걸 수 있게 되었습니다.
코드는 여기에 있습니다.

좋은 웹페이지 즐겨찾기