2017-03-12 1 views
1

간단한 프론트 엔드 - 백엔드 (REST API) 아키텍처로 웹 응용 프로그램을 작성하고 싶습니다. 테스트를 작성하는 방법과 위치를 분명히하지 못합니다.프론트 엔드/백엔드 애플리케이션에 대한 테스트를 작성하는 곳은 어디입니까?

프런트 엔드 : API 응답을 조롱하고 UX/UI 만 테스트해야하나요? 백엔드 : 여기서 API 호출 테스트를 작성하고 결국 클래스에 대한 자세한 세분화 된 단위 테스트를 작성해야합니까?

하지만 이런 식으로 프론트 엔드 테스트가 실제 API 응답을 인식하지 못하는 것 같습니다 (백엔드와 독립적으로 조롱하고 있기 때문입니다). 다른면에서 API 응답을 모의하지 않고 백엔드에서 실제 응답을 사용하면 프론트 엔드 클라이언트가 원하는 데이터를 얻기 위해 DB를 어떻게 준비 할 수 있습니까?

- UX/UI 테스트 : 프론트 엔드가 모의 답변 세트로 작업 중임 - API 테스트 : API가 주어진 답을 정확하게 제공합니다. 데이터 - 통합 테스트 : 프론트 엔드는 실제로 백엔드에 일련의 데이터 (누가 생성 했습니까?)를 호출하여 작동합니다.

가능한 한 고통없이 만들 수있는 프레임 워크 또는 도구가 있습니까? 나를 매우 복잡

어떤 제안을 환영

답변

4

글쎄, 당신은 기본적으로 옳다 (API 사양 변경 만약 내가 테스트를 많이 다시 작성해야합니다)에 는 것 같습니다. 이 시나리오에는 백엔드 로직, 프론트 엔드 동작 및 통합의 세 가지 테스트 유형이 있습니다. 현실을 분할하자 : 당신은 주로 애플리케이션의 비즈니스 로직을 테스트하는

백엔드를 테스트합니다. 그러나 전체 응용 프로그램 스택 (도메인, 응용 프로그램 계층, 인프라, 프레젠테이션)을 테스트해야합니다. 이 레이어는 단위 테스트와 통합 테스팅과 사용자의 관점에서의 순수 블랙 박스 테스트를 필요로합니다. 그러나 이것은이 복잡한 문제입니다. 정답은 극도로 길다. 응용 프로그램 테스트와 관련된 몇 가지 기술에 관심이있는 경우 다른 스레드를 시작하십시오. 프론트 엔드 응용 프로그램은 API 올바른 방법으로 사용하는 경우 여기

프런트 엔드 동작

당신이 테스트합니다. 백엔드 계층을 조롱하고 대부분 단위 테스트를 작성합니다. 이제 알았 듯이 실제 API 계약과 관련하여 몇 가지 문제가있을 수 있습니다. 그러나 그러한 종류의 문제를 완화 할 수있는 방법이 있습니다. 첫째, 다음 솔루션 중 하나에 대한 링크는 https://github.com/spring-cloud/spring-cloud-contract입니다. 자, 몇 가지 설명. 아이디어는 간단합니다. API 계약은 소비자가 주도합니다. 귀하의 경우, 그것은 프런트 엔드 애플 리케이션 것입니다. 프론트 엔드 팀은 백엔드 팀과 협력하여 클라이언트의 모든 요구를 충족하는 합리적인 API를 만듭니다. 따라서 프론트 엔드 테스트는 "실제 API"를 사용하도록 보장됩니다. 클라이언트 테스트가 변경되면 계약이 변경되므로 백엔드는 새로운 요구 사항을 리팩터링해야합니다.

사이드 노트 - 실제로 구체적인 프레임 워크를 사용할 필요는 없습니다. 당신은 당신의 팀에 어떤 훈련을 적용한다면 같은 방법론을 따를 수 있습니다. 소비자가 먼저 계약을 정의한다는 것을 기억하십시오.

통합은 일부 통합 E2E 테스트를 필요

이 모든 설정이 올바르게 작동하는지 확인합니다 테스트합니다. 백엔드 앱의 실제 테스트 인스턴스를 설정합니다.그런 다음 가짜 모형 응답 대신 실제 서버를 사용하여 통합 테스트를 수행합니다. 그러나 다른 레이어에서 동일한 테스트를 복제 할 필요는 없습니다. 모든 것이 제대로 통합되었는지 테스트하고 싶습니다. 따라서 실제 논리를 테스트하지 마십시오. 몇 가지 오류 시나리오를 선택하고 사용자의 관점에서 이러한 테스트를 수행하면됩니다. 따라서 사용자는 백엔드 앱의 상태에 대해 아무 것도 생각하지 않고 사용자 상호 작용을 시뮬레이션합니다. 새로운 제품 추가, 제품 수정, 업데이트 된 제품 가져 오기 또는 단일 인증 지점 확인. 이러한 종류의 테스트는 실제로 비즈니스 로직을 테스트하는 것이 아니라 실제 API 테스트 서버가 프론트 엔드 애플리케이션과 올바르게 통신하는 경우에만 수행됩니다.

관련 문제