모의 서버
MockServerMockServer는 Apache License에 따라 출시된 HTTP 및 HTTPS용 오픈 소스 모킹 프레임워크입니다.MockServer는 웹 서비스 또는 웹 사이트와 같은 HTTP 및 HTTPS 시스템을 조롱하여 통합 테스트를 단순화하고, 완전하지 않거나 불안정한 서비스에 대해 팀이 개발할 수 있도록 함으로써 개발 팀을 분리하도록 설계되었습니다.
테스트 간소화
MockServer는 다음과 같이 테스트 대상 시스템의 격리를 개선하고 테스트 시나리오를 단순화하며 문제를 캡슐화하고 분리함으로써 자동화된 테스트를 간소화하고 모범 사례를 촉진합니다.
- 종속 시스템을 조롱하는 것은 테스트 대상 시스템을 격리하여 테스트가 안정적으로 실행되고 실제 오류가 있을 때만 실패하도록 하는 효과적인 메커니즘입니다. 이는 네트워크 오류 또는 서버 재부팅/[1]재배치와 같은 관련 없는 외부 변경으로 인한 테스트 실패를 방지합니다.
- 테스트 격리 및 모방 종속 시스템을 사용하면 복잡한 테스트 인프라를 설정하고 관리할 필요 없이 모든 범위의 응답 및 시나리오를 테스트할 수 있습니다.예를 들어, 응답 지연이 증가하거나 연결이 끊어지면 종속 시스템의 부하가 증가함에 따라 증가할 수 있습니다.이러한 유형의 성능 저하를 시뮬레이션하는 것은 대량의 트래픽을 생성하지 않고는 매우 어려울 수 있습니다.종속 시스템을 조롱하는 경우 모의실험은 각 반응의 [1]정확한 응답 지연 또는 기타 특성을 제어할 수 있습니다.
- 자동화된 테스트의 일반적인 안티패턴은 실제 종속 서비스 응답을 기록하고 재생하는 것입니다.이러한 기록은 일반적으로 복잡하고 여러 테스트 간에 공유됩니다.그러나 이것은 테스트 사이에 불필요한 결합을 초래하고 모든 컨텍스트(클래스, 함수, 변수 등)가 단일 책임을 정의해야 하며 책임은 컨텍스트에 의해 완전히 캡슐화되어야 한다는 단일 책임 원칙을 깨뜨립니다.또한 응답이 변경되면 기록 및 재생 솔루션이 중단됩니다.예를 들어, 50권의 책 목록이 포함된 응답을 기록하여 서점 서비스를 조롱하는 경우, 책의 형식이 변경되면 기록된 응답을 50개의 위치에서 업데이트해야 합니다.새 응답이 새 형식으로 기록된 경우, 대부분의 경우 테스트 어설션을 업데이트해야 합니다.또한 기록 및 재생 접근 방식은 테스트에 사용되는 데이터를 테스트 코드에서 숨겨서 캡슐화 및 문제 분리를 해제합니다.MockServer는 여러 언어로 간단한 API 및 클라이언트를 제공하여 종속 시스템에 대한 응답 조롱을 단순화합니다.그런 다음 각 테스트는 모의 서비스에 사용되는 데이터와 논리를 독립적으로 캡슐화하여 각 테스트가 독립적으로 실행되도록 할 수 있습니다.또한 이러한 접근 방식은 테스트를 병렬로 실행할 수 있고 [1]데이터를 공유하지 않기 때문에 테스트를 완료하는 데 걸리는 시간을 단축합니다.
디커플링 개발 팀
MockServer는 다음과 같이 완전하지 않거나 불안정한 서비스에 대해 팀이 개발할 수 있도록 하여 개발 팀을 분리합니다.
- API 또는 서비스가 아직 완전히 개발되지 않은 경우 MockServer를 사용하여 API를 조롱할 수 있으므로 서비스를 사용하는 모든 팀이 지연 없이 작업을 시작할 수 있습니다.애플리케이션을 개발하는 동안 API 또는 서비스를 조롱하면 시스템이 완전히 통합되기 전에 지연되는 시간이 길수록 잘못된 설계 결정을 재요인화하거나 통합을 방지하여 되돌리는 비용이 더 많이 들기 때문에 통합 비용이 증가할 수 있습니다.그러나 종종 재정적 또는 시간적 압박으로 인해 통합되는 두 시스템을 병렬로 구축해야 합니다.불안정하고 신뢰할 수 없는 인터페이스를 기반으로 애플리케이션을 구축하는 경우 개발 및 테스트가 자주 차단될 수 있습니다.불안정한 인터페이스를 조롱하면 통합이 수행되는 시기와 방법을 보다 효과적으로 제어하여 전체적인 중단과 [1]비용을 줄일 수 있습니다.
- 또한 서비스를 조롱하면 개발 팀이 불안정하고 신뢰할 수 없거나 불안정한 웹 서비스로부터 격리될 수 있습니다.이는 API/서비스가 자주 변경되고 개발 및 테스트가 [1]차단되는 초기 개발 단계에서 특히 중요합니다.
특징들
지원되는 주요 기능은 다음과 같습니다.
- 예상과 일치하는 요청이 수신된 경우 특정 응답 반환
- 예상과 일치하는 요청이 수신된 경우 동적으로 응답 반환
- 예상과 일치하는 요청이 수신되었을 때 콜백(Java) 실행
- 요청이 특정 횟수만큼 전송되었는지 확인
- 일련의 요청이 특정 순서로 전송되었는지 확인
- 시스템이 외부[1] 종속성과 상호 작용하는 방식을 분석하기 위한 요청 및 응답 기록
기술
MockServer는 Netty를 사용하여 빌드되었으며 Java로 작성되었습니다.별도의 스레드에 포함된 서버로 실행되거나 독립 실행형 Java Virtual Machine으로 실행됩니다.
MockServer는 여러 가지 방법으로 사용할 수 있습니다.
- Apache Maven 빌드 주기의 일부로 Apache Maven 플러그인을 통해
- Junit 또는 TestNG 테스트에서 @Before 또는 @After 메서드의 API를 통해 프로그래밍할 수 있습니다.
- JUNit 테스트에서 @Rule 주석이 달린 필드를 통해 JUNit @Rule 사용
- 명령줄에서 테스트 환경의 독립 실행형 프로세스로 사용
- 도커 사용 환경에서 도커 컨테이너로 사용할 수 있습니다.
- 기존 Vert.x 환경의 일부로 Vert.x 모듈로
- 기존 웹 서버에 배포 가능한 WAR로
- grunt.js 빌드 주기의 일부로 grunt.js 플러그인으로
- 모든 Node.js[1] 코드에서 Node.js(npm) 모듈로 지정됩니다.
- 기능 테스트를 위한 PHP Behat (computer_science) 컨텍스트로
MockServer는 다음과 같이 사용할 수 있습니다.
- 완전한 독립형 Netty 웹 서버
- Java Enterprise Edition 웹 서버에서 실행되는 배포 가능한 WAR
- 완전히 봉입된 도커 컨테이너
- Vert에서 실행되는 Vert.x 모듈x[1]