외부 API 테스트를 수행하는 방법 (블랙 박스)


14

공급 업체의 API를 사용한다고 가정하면 API가 예상대로 작동하는지 확인하는 방법은 무엇입니까?

저의 주요 관심사는 때때로 벤더가 코드 변경 사항을 푸시하고 API를 중단하는 것입니다. 우리는 지속적으로 테스트 할 수있는 일종의 자동 소프트웨어를 원합니다. 이것을 다루는 방법?


언어에 따라 도움이되는 도구가있을 수 있습니다 (Pex for C # 라이브러리 / API라고 생각합니다).
Steven Evers

답변:


10

짧은 대답 : 타사 공급 업체 API 용 테스트 스위트가 필요하므로이를 개발해야합니다.

다른 사람이 당신을 위해 그것을 기대하지 말고 올바른 테스트를 자동으로 생성하는 "마법의 탄환"을 기대하지 마십시오.

추가로 시도 할 수있는 것들 :

  • 공급 업체에 새 릴리스마다 "최신 변경 사항"목록을 제공하는지 문의하십시오.
  • 고객에게 API 호환성에 대한 관심을 물어보고 이것이 중요한 기능임을 알려줍니다.
  • API가 쉽게 테스트 할 수없는 부품에 대해 특정 테스트 후크, 로깅 출력 등을 제공하는지 확인하십시오.
  • 중요한 API 호출을 자체 로깅 코드로 랩핑하고 API의 입력 및 관련 출력을 로그 파일에 작성하면 예기치 않은 상황이 발생하면 디버깅이 쉬워집니다.
  • 사전 및 사후 조건을 확인하기 위해 API 호출에 어설 션을 추가하십시오. 따라서 새로운 API 릴리스가 애플리케이션 내에서 예기치 않은 동작을 표시하면 오류 메시지가 표시됩니다.

이러한 것들이 효과가 있든 없든, 공급 업체는 누구이며 어떤 종류의 API를 염두에 두어야합니다. 파일과 같은 검사 가능한 출력을 생성하는 API는 API 호출의 성공 여부를 결정하기 위해 사물의 동작을 관찰해야하는 물리적 장치를 제어하는 ​​API보다 테스트하기가 훨씬 쉽습니다.


나는 전적으로 동의하지만, 질문자는 테스트 장치에 대한 경험이 없으며 그들과 함께 일하는 계획을 모른다고 생각합니다. 의미 : 임계점 찾기, 테스트 단위 쓰기, 모든 테스트 실행, 디버그, 새로운 중요 포인트 찾기, 새 단위 쓰기, 모든 API 변경 후 마지막 4 단계 반복.
Gangnus

@ 강 너스 : IMHO OP는 단위 테스트에 대한 그의 이전 경험에 대해 아무 것도 말하지 않았습니다. 그가 그것에 문제가 있다면, 나는 그가 더 구체적인 질문을하는 것을 알고 있다고 확신합니다. 또한, 여기서 주제는 "단위 테스트"가 아니라 "자동 통합 테스트"입니다. 그것들은 전형적으로 예를 들어 TDD 스타일 방식의 단위 테스트와는 다른 방식을 요구한다.
Doc Brown

그렇습니다. 그러나 테스트 단위를 언급하지 않고 "API가 예상대로 작동하는지 확인하는 방법"을 묻는다면 "그것이 나에게 보인다"고합니다. 자동화 된 통합 테스트에 관해서는 높은 확률로도이를 알지 못하고 단지 "일부 자동 소프트웨어"에 대해서만 언급했습니다. 당신은 사람들과 당신과 같은 지식을 기다리고 있지만,이 주제에서 프로그래머 (나를 포함하여)의 99 %는 훨씬 덜 알고 있습니다. 90 %가 훨씬 더 적습니다.
Gangnus

0

포스터의 문구를 기반으로 테스트하는 것 이상의 의미가 있습니다. IMO. API에 대한 단위 테스트를 작성하고 모든 것이 예상대로 작동하는지 확인한 후에는 타사 API를 모니터링하여 사용자보다 먼저 문제를 파악해야합니다. 그것은 타사 API의 실제 위험입니다. 코드가 아니며 API에서 얼마나 많은 테스트를 수행했는지 또는 언제 또는 언제 변경되는지 제어 할 수 없습니다.

(면책 조항 : 여기에 사용 된 제품 이름) soapUI를 사용하여 API 테스트를 작성하는 경우 해당 테스트를 AlertSite에서 운영 모니터로 재사용하여 API가 예상대로 계속 작동하는지 확인할 수 있습니다. 테스트에 실패하면 사용자가 전화를 걸어 앱이 작동하지 않는다고 불평하기 전에 알림을받을 수 있습니다.


0

관심있는 영역 (사용하려는 기능)에 대한 학습 테스트를 구현하십시오. 학습 테스트는 개발자가 API의 공개 계약에 대해 작성하는 통합 테스트입니다. API의 소스 코드가 사용 가능하더라도 내부 구현 세부 사항에 대해 테스트를 작성해서는 안됩니다. 이런 종류의 학습 테스트는 두 가지 목적에 기여합니다.

  1. 타사 API에 대한 이해도를 크게 향상시킵니다.
  2. 테스트는 청구 된 새 버전이 실제로 이전 버전과 호환되는지 여부를 확인하는 데 도움이됩니다.

0

이 문제에 대한 두 가지 접근 방식이 있습니다 ...

앱이 실제 사용자 트래픽으로 프로덕션 환경에 있습니다.

실제 트래픽이 있고 외부 API에 의존하는 앱이 프로덕션 환경에있는 경우 외부 API가 알리지 않고 변경을 수행 할 때 최대한 빨리 알 수 있도록 면밀히 모니터링하고 적절한 임계 값을 선택할 수 있습니다.

항상 다음 사항을 고려해야합니다.

  • 시간이 지남에 따라 API의 변화
  • API 공급 업체에 버그가있을 수 있습니다
  • API 공급 업체 테스트 키트에는 버그가 있거나 모든 프로덕션 API 기능을 완전히 포함하지 못할 수 있습니다.

앱이 설치되어 있으며 버전 / 릴리스가 계획되어 있습니다.

이 경우 실패 유예 기간이 있습니다. 실시간 사용자는 외부 API 변경 사항을 즉시 적용하지 않습니다.

내 생각에 이것은 더 쉬운 작업입니다. 외부 API를 호출하는 애플리케이션에 실제 트랜잭션 / http / 요청을 작성하고 실패가 없는지 확인하는 테스트 (전체 엔드 투 엔드 테스트)를 작성하십시오. 테스트 키트 없음 실제 거래를 조롱하지 않습니다.

이 작업이 완료된 후 24 시간마다, 1 분마다 실행하도록 선택할 수 있습니다.

좋은 습관:

  • 모든 것을 자동화
  • 외부 API 공급 업체에서 빠르게 연락 할 수있는 사람이 있어야합니다.
  • 맹목적으로 공급 업체 테스트를 신뢰하지 마십시오
  • 빠른 실패-서비스가 외부 API에 크게 의존하는 경우 서비스가 중단되지 않도록하십시오. 빨리 실패하고 적절한 오류 메시지를 반환

도구 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.