API 테스트에서 길을 잃었을 때 어떻게해야합니까?

(2020 년 5 월 12 일)

아직 테스트를 작성하고 있지 않다면 시작해야합니다. 테스트는 코드의 품질을 향상시키고 버그를 줄이며 아마도 디자인과 품질에 대해 더 많이 생각하게 만들 것입니다. 실제로 가장 어려운 일은 작성해야 할 테스트 유형을 시작하고 파악하는 것입니다.

검색을 시작하면 단위, 통합, 수용, 기능, 시스템, 연기, e2e… 일부 리소스는 100 \% 커버리지가 필요하다고 말하고 일부 리소스는 전체 커버리지가 코드가 완전히 테스트되었음을 ​​의미하지 않는다고 말합니다. 사용할 테스트 유형을 결정하더라도 앱에서 특정 로직을 테스트하는 방법을 결정하기 어려울 수 있습니다.

포기하지 마세요! 우리는 그 과정에서 배운 몇 가지 팁을 가지고 있으며 이것이 당신의 삶을 더 편하게 만들어 줄 것입니다.

기능 테스트만으로 모든 것을 테스트하려고하지 마세요

이것이 가장 큰 실수입니다. 개발자는 테스트에서 수행합니다. 그럼 먼저이 점을 분명히하겠습니다.

REST Api의 기능 테스트는 한 엔드 포인트에서 요청을 보내고 그 응답을 주장하는 것을 의미합니다. 경로에 도메인 로직이 갈 수있는 여러 케이스가있는 경우 모든 케이스가 작동하는지 확인하기 위해 각 케이스에 대해 별도의 테스트를 작성해야합니다.

이것은 매우 작은 앱에서도 작동 할 수 있지만 앱이 커지면 유지 관리가 매우 어려워지고 매우 느려질 것입니다. 언젠가는 실제로 앱에서 작업하는 것보다 테스트를 수정하고 유지하는 데 더 많은 시간을 낭비하기 시작할 것입니다. 그것은 테스트에 관한 것이 아닙니다. 어려운 방법을 배웠습니다.

테스트 피라미드

테스트 피라미드는 각 레이어에 얼마나 많은 테스트를 작성해야하는지 알려주는 그래프입니다.

하위 레이어 더 빠르기 때문에 단위 및 통합 테스트를 최대한 많이 다루어야합니다. 높은 수준을 얻을수록 더 적은 수의 테스트를 받아야합니다. 개별 레이어에 대해 다른 이름이 지정되지만 그 뒤에있는 논리는 동일합니다.

테스트 피라미드

단위 테스트

그러니 처음부터 시작하겠습니다 — 단위 테스트. 정의는 다음과 같습니다.

단위 테스트는 소프트웨어의 개별 단위 / 구성 요소를 테스트하는 소프트웨어 테스트 수준입니다. 목적은 소프트웨어의 각 개별 단위가 예상대로 작동하는지 확인하는 것입니다. 단위는 모든 소프트웨어에서 테스트 할 수있는 가장 작은 부분입니다.

즉, 각 메서드를 분리하여 테스트하고 다른 모든 메서드를 모의 처리해야합니다.

아닙니다. 단위 테스트는 바로 당신입니다!

단위 테스트는 코드가 작동하는지 확인하는 데 유용 할뿐만 아니라 일부 리팩토링을 수행하게합니다. 작성하기 쉬워야합니다. 특정 코드를 테스트하는 데 어려움을 겪는다면 코드가 잘못 작성되었으며 리팩토링되어야 함을 의미합니다. SOLID 원칙 이 도움이 될 것입니다. SOLID는 깨끗하고 우아하며 읽기 쉬운 코드를 작성하기위한 일련의 설계 원칙입니다. 견고한 코드를 작성하는 경우 단위 테스트는 케이크 조각이 될 것입니다.

기본적으로 단위 테스트를 사용하면 코드에서 분리 된 각 메서드가 제대로 작동하는지 확인할 수 있습니다. 그것은 모든 코드가 예상대로 작동한다는 것을 의미합니다. 별로. 또한 개별 구성 요소가 함께 제대로 작동하는지 확인해야합니다. 이것이 바로 통합 테스트가 이루어지는 곳입니다.

통합 테스트

통합 테스트는 개별 소프트웨어 모듈이 하나의 그룹으로 결합되고 테스트되는 소프트웨어 테스트의 단계입니다.

단위 테스트가 충분하지 않은 경우 데이터베이스 쿼리가 좋은 예입니다. 건축업자. 단위 테스트에서는 쿼리에서 원하는 조건을 호출했는지 확인할 수 있지만 쿼리가 더 복잡한 경우 실제로 데이터베이스를 호출 할 때까지 사용한 조건이 예상 결과를 반환할지 확신 할 수 없습니다. 따라서 여기에서 테스트 데이터베이스에서 쿼리를 실행하고 예상 결과를 확인하는 통합 테스트가 필요합니다.

통합 테스트가 필요한 경우 :

  • 3rd와의 올바른 통합 확인 파티 라이브러리 또는 API
  • 단위 테스트가 예상대로 함께 작동하는 둘 이상의 모듈 확인

기능 테스트

기능 테스트는 일부 애플리케이션의 전체 기능 테스트로 정의됩니다.

사용자 인터페이스가있는 애플리케이션에 비해 API로 작성하는 것이 훨씬 간단합니다. API의 기능 테스트는 API 엔드 포인트에 실제 요청을 보내고 응답 형식을 검증하는 것으로 구성되어야합니다. 성공 및 오류 응답을 위해 각 경로를 테스트해야합니다.

하지만 과도하게 수행하지 마십시오. 가능한 각 오류에 대한 테스트가 필요하지 않습니다. 그것은 이미 단위 및 통합 테스트에서 다루어 져야합니다.여기에서 경로가 오류에 대해 올바른 응답 형식을 반환하는지 확인하려고합니다. 경로에 다른 역할이있는 경우 보안 오류 응답도 테스트해야합니다.

다음은 기능 테스트를 더 쉽게 작성하는 데 도움이되는 몇 가지 도구입니다.

  • PHP Matcher — 패턴에 대한 응답을 확인할 수있는 라이브러리입니다. 데이터베이스에서 실제 값을 주장하는 대신 응답의 각 필드에 대해 예상되는 패턴을 설정할 수 있습니다. 이렇게하면 테스트 데이터베이스에서 일부 문자열이나 숫자가 변경되었는지 걱정하지 않고 응답 형식과 필드 유형 만 테스트 할 수 있습니다.
  • Postman 테스트 — 프런트 엔드 팀에 매우 유용한 기능 테스트를 Postman에서 작성할 수 있습니다. API 끝점을 사용해보십시오. 대화 형 API 문서와 같습니다. Postman 테스트를 Newman 과 통합 할 수 있습니다. 명령 줄에서 테스트를 실행하고 지속적 통합 (CI) .
  • Faker — 테스트 데이터베이스 용 가짜 데이터를 생성하기위한 라이브러리

한 단계 더 나아가

이제 코드가 작동하는 것을 알았으니 성능을 확인할 수 있습니다.

부하 테스트

부하 테스트는 API가 다양한 서버에 예상대로 응답합니다.

스트레스 테스트

동시에 많은 수의 요청을받을 때 API가 예상대로 작동하는지 확인합니다.

100 \% 커버리지가 필요합니까?

100 \% 커버리지가 코드가 완전히 테스트되고 작동합니다. 이는 테스트에서 코드의 각 줄을 사용했음을 의미 할 뿐이지 만 코드 커버리지를 실행하여 코드의 일부를 다루지 않았는지 확인하는 데 도움이됩니다.

우리는 작성으로 인한 이점이 없다는 것을 알게되었습니다. getter 및 setter와 같은 간단한 메서드를 테스트합니다. 특히 대규모 프로젝트에서 작성하고 유지 관리하는 데 시간이 걸립니다.

테스트를 통해 잠재적 인 버그의 대부분을 제거 할 수는 있지만 생각하지 못했던 몇 가지 문제가 여전히 남아 있습니다. 버그가 나타나면 먼저 새 테스트로 재현 한 다음 코드를 수정하십시오. 그렇게하면 보장이 개선되고 해당 케이스를 보장 할 수 있습니다. 이는 아직 테스트가없는 기존 프로젝트를 다루는 좋은 방법이기도합니다.

다음은 코드 및 테스트의 품질을 확인하는 데 유용한 도구입니다.

  • 감염 — 돌연변이 테스트 도구입니다. 변이 테스트 는 기존 테스트의 품질을 평가합니다. 돌연변이 테스트는 프로그램을 작은 방식으로 수정하고 테스트가 실패 할 것으로 예상하며 이는 돌연변이가 죽임을 의미합니다. 통과 한 테스트마다 돌연변이가 살아 있습니다. 테스트 스위트는 그들이 죽인 돌연변이의 백분율로 측정됩니다. 돌연변이 테스트는 MSI (Mutation Score Indicator) 라는 테스트 기준을 제공합니다. MSI는 결함을 감지하는 능력 측면에서 테스트 세트의 효율성을 측정합니다. CI에 통합하고 CI가 통과하는 데 필요한 최소 MSI를 설정할 수도 있습니다.
  • PHPStan — PHPStan은 실제로 실행하지 않고 코드에서 오류를 찾는 데 중점을 둡니다. 코드에 대한 테스트를 작성하기 전에도 전체 버그 클래스를 포착합니다. 실제 줄을 실행하기 전에 코드의 각 줄의 정확성을 확인할 수 있다는 점에서 PHP를 컴파일 된 언어에 더 가깝게 이동합니다.
  • 지속적 통합 (CI) — 각 커밋에서 git에서 테스트를 실행할 수 있습니다. PR-를 실패한 테스트와 병합하는 것을 방지 할 수 있습니다.

결론

테스트 작성에 대해 발견 한 모든 것에서 길을 잃기 쉽습니다. 테스트의 주요 목표는 코드가 작동하고 유지 관리하기 쉬운 지 확인하는 것입니다. 테스트를 처음 사용하는 경우 시간이 너무 많이 걸리는 것처럼 보일 수 있지만 포기하지 마세요. 일단 파악하면 코딩 작업이 훨씬 쉽고 빨라집니다. 🙂

이 창작물은 원래 Locastic.com에 게시되었습니다 — https://locastic.com/blog/what-to-do-when- you-get-lost-in-api-testing /

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다