Skip to content

Configuration (Korean)

김지성/HTS팀/NE edited this page Mar 16, 2018 · 1 revision

EAT 프로그램 동작에 필요한 여러가지 매개변수들을 설정합니다.

1. Config key 종류 및 설명

* 공통

Key Value Description Note
common rootDirectory 리소스들의 최상위 폴더 하위폴더로 다음과 같은 폴더가 포함되어야 한다.
- extraLibrary
- proto
- src
- scenario
ignoreUnnecessaryPacket 받은 패킷 중, 시나리오에 작성하지 않은 패킷들을 무시
countOfRealThread 리얼 쓰레드의 갯수를 설정 EAT에서는 parallel universe에서 제공하는 Light-weight thread(Fiber) 를 주로 사용하고 있으며, 성능적 이유로 필요에 따라서 리얼 쓰레드의 갯수를 조정할 수 있다.
loggingOnSameFile
receiveTimeoutSec 수신할 패킷의 Timeout 시간을 초 단위로 설정 Timeout이 발생하면, exception이 발생하나, 이후 시나리오는 계속 진행된다.
display displayTransferredPacket 보내고 받는 패킷의 이름 출력 여부 아래 그림1 - (1) 참고
displayTransferredPacketJson 보내고 받는 패킷의 내용을 Json 형식으로 출력할지 여부 아래 그림1 - (2) 참고
displayUnitTestResult 각 Tester 액터가 수행한 테스트의 real response와 expected response의 비교 결과 출력 여부 아래 그림1 - (3) 참고
displayFinalTestResult 각 Tester 액터가 테스트를 끝난 뒤 다음과 같은 테스트 결과를 출력할지 여부
- 총 테스트 케이스의 갯수
- 성공 갯수
- 실패 갯수
아래 그림1 - (4) 참고
displayStatisticResult 각 Tester 액터가 테스트를 끝낸 뒤, 테스트에 대한 통계 결과 출력 여부 아래 그림1 - (5) 참고
displayFinalStatisticResult 모든 Tester 액터가 테스트를 끝낸 뒤, 수행한 전체 시나리오에 따라 송수신한 패킷의 시간에 대한 통계 결과 출력 여부 아래 그림1 - (6) 참고
server ip 접속할 서버의 IP 주소 ex) 10.77.95.231
port 접속할 서버의 Port 번호 ex) 8600
countOfPort 접속할 서버의 포트의 갯수 ex) port가 8600이고, countOfPort가 2이면, EAT의 Tester Actor들은 8600 Port와 8601 Port를 사용하여 순차적으로 서버에 접속한다.
socketType 서버에 접속할 Socket의 Type 다음의 값중 하나만 선택할 수 있다.
- "STREAM""
- "WEBSOCKET"
subUriOfWS (socketTypeWEBSOCKET인 경우만 사용함)
웹소켓 접속 시 서비스 uri 명칭
ex) subUriOfWS의 값으로 "sub"를 입력한 경우 아래와 같은 WebSocket 접속 uri가 사용된다.
ws://10.77.95.231:8600/sub
packet pluginPackage EAT에서 참조 할 플러그인 클래스가 구현되어 있는 jar 파일 ( IStreamPacket 인터페이스가 구현되어 있는 클래스 ) 예제에서는 IStreamPacket을 구현한 플러그인 클래스가 protobuf_plugin-0.1.1.jar 파일로 패키징 되어있다.
classPackage 사용할 패킷구조를 정의한 serialize 클래스가 구현되어 있는 jar 파일. 예제에서는 protocol buffer 플러그인에서 사용할 프로토콜 클래스들을 protocols.jar 로 패키징 한다.
pluginClass 플러그인이 구현된 클래스의 이름 (패키지 전체 경로를 포함해야 함)
bytePacketTypes Byte 형식 데이터의 키 값을 입력함. 주로 byte 형식의 데이터를 별도로 deserialize 하기 위한 용도로 사용함. EAT이 시나리오를 파싱 할 때, bytePacketTypes에 명시된 키값을 가진 json 객체들을 byte 데이터로 인식하게 한다.
(Config)
"bytePacketTypes": ["packetBytes", "data"]
(Scenario)
"data": {
[ExamplePackage]JoinRoomInfo: {
"channel": "example-1"
}
}
위와 같은 경우 data내의 값은 byte packet으로 변환되어 data에 저장된다.
packetPackages key와 packageName 의 쌍으로 이루어져 있으며, 시나리오에서 쓰이는 key 값이 packageName으로 변환됨 (Config)
{
"key": "TUTORIAL",
"packageName": "tutorial"
}
(Scenario)
#Request:TUTORIAL:[TUTORIAL]Basic.RequestLogin
-> 이 경우 Scenario의 [TUTORIAL]은 [tutorial]로 대체된다.
scenarioPath 사용 할 시나리오 파일들이 있는 폴더의 경로 rootDirectory 하단의 폴더명을 입력
playerCount 테스트를 진행 할 Tester 액터들의 갯수
testActorStartGap 각 Tester 액터들간의 테스트 시작 시간(ms)
userId 테스트를 진행 할 액터들의 ID userId"100" 으로 설정되어 있고, playerCount가 "3" 이라면 100부터 순차적으로 "100", "101", "102" 3명의 액터가 테스트를 진행하게 된다.
scenarioFile 테스트에 사용되는 시나리오 파일들 scenarioFile에 명시된 순으로 각 Tester 액터당 한 개의 시나리오를 실행하게 된다.
명시된 시나리오의 갯수보다 액터의 수가 더 많으면, 마지막 시나리오 실행 뒤 다음 액터는 다시 처음 시나리오를 실행함으로써 명시된 전체 시나리오를 반복적으로 실행한다.

* Test result example

<그림 1 - 테스트 결과 예제>

2. Plugin - protocol buffer configuration example

기본 제공되는 protocol buffer library는 다음과 같은 구조를 갖고 있다.

만약, 이와 다른 protocol buffer를 사용하는 경우, IStreamPacket을 상속받아 재정의 할 수 있다 .

<그림 2 - 예제에서 쓰이는 protocol buffer 플러그인 패킷 구성>

Key Value Description Note
protobuf protobufLibraryJarPath protocol이 정의된 Java 파일을 컴파일 하기위한 protocol buffer 라이브러리의 경로 EAT이 구동되면 최초에 proto 파일을 자바 class 파일로 컴파일 하는 과정을 거치게 되는데, 이 때 protocol buffer가 생성한 java 파일을 컴파일 하기 위한 protocol buffer의 라이브러리 Jar 의 경로를 지정한다. (예제에서는 3.0.0 버전의 protocol buffer를 사용)
serviceId 해당 패킷을 보내려는 곳의 서비스ID 예제에서는 서버 내에서 여러가지 서비스를 구분하여 구동중인 상황을 가정하고 구현하였다. serviceId 값으로 원하는 서비스를 구분하여 패킷을 보낼 수 있도록 하였다.
headerPackageClassName 헤더 클래스(protocol buffer 특성 상 Inner class로 구현됨)가 포함되어있는 클래스의 전체 패키지 경로와 클래스 이름. 예제에서는 header 클래스가 다른 protocol들에 대한 의존성을 가지지 않도록 하기 위하여 configuration을 통해 header inner 클래스가 포함되어있는 클래스를 따로 지정해주도록 하고 있다.
protoBufInfos 사용할 proto 파일들을 앞서 정해준 package key값과 함께 명시해준다. 명시된 .proto 파일들은 protocol buffer 를 통하여 .java 파일로 컴파일 된다.

3. Custom API configuration

Key Value Description Note
customScenarioAPI use custom 시나리오를 사용 할 것인지에 대한 여부
jarFile 사용할 custom 함수들이 정의된 클래스가 들어있는 Jar 파일
apiClassName 사용할 custom 함수들이 정의된 클래스의 이름 custom 함수들은 하나의 클래스 안의 inner 클래스로 작성