Portman을 사용한 API 테스트 향상

9094 단어 testawsopenapi
사양 제어 API 개발이 활발해지면서 OpenAPI 정의를 사용하여 API를 설계, 테스트, 검증할 수 있는 도구가 점점 더 많이 만들어지고 있습니다.최근에 주목한 도구는 Portman입니다. 이것은 API 테스트 라이브러리로 API의 신뢰성을 쉽게 확보하고 문서와 API 정의의 동기화를 유지할 수 있습니다.
Portman에는 시작 및 실행에 필요한 설정을 단순화하는 CLI가 있습니다.이 문서에서 우리는 Portman을 설정하고 간단한 테스트를 진행할 것이다. 이런 테스트는 우리가 API를 대상으로 실행하고자 하는 것이다.
OpenAPI 파일로만 생성되므로 How to build a serverless API in AWS without using a single Lambda에 생성된 API를 사용합니다.본문의 설명에 따라 배치하고 배치가 완료되었을 때 출력된 URL을 기록합니다.

Here's a link to GitHub repo
따라가는 경우 클론/다운로드 확인this commit

1. 포터만 설치


Portman CLI를 사용하려면 먼저npm install -g portman

2. 포터만 초기화


이제 설치가 완료되었으므로 CLI를 사용하여 초기 설정을 쉽게 준비할 수 있습니다.portman --init이것은 모든 것이 설정되어 있는지 확인하기 위해 우리에게 몇 가지 일을 하도록 제시할 것이다.다음은 내가 그것을 설치하기 위해 한 모든 선택을 볼 수 있다.

3. 기본 구성 추가


초기화 과정에서, 우리는 자신의 사용자 정의 설정을 사용하기로 선택했다.우선, 기본 설정 from here 을portman 설정에 복사합니다.portman 디렉터리에 있는 json 파일입니다.
기본 프로필은 계약 테스트만 정의합니다. 이 테스트는 모든 단점이 성공 상태(2XX)로 돌아가고 내용 유형은 OpenAPI에 정의된 상태로 돌아가며 응답은 JSON 본문이 있고 응답 본문은 OpenAPI에 정의된 내용과 일치합니다.

4. 포터만 달리기


이제 모든 것이 설정되었습니다. 설정이 끝날 때 지정한 명령을 사용하여portman을 실행할 수 있습니다.portman --cliOptionsFile portman/portman-cli.json

5. OpenAPI 사양에서 발견된 문제 해결


오류 #1 - URL이 없습니다.


현재 명령이 실행되면 OpenAPI의 첫 번째 문제가 표시됩니다.터미널의 오류를 보면 호출하려는 URL은 OpenAPI 사양에 정의된 경로만 표시됩니다.

이는 Portman이 OpenAPI의 server and base URL 섹션을 사용하여 요청을 수행하기 때문입니다.이 문제를 해결하기 위해서, 우리는 제품 오픈api로 넘어갈 것입니다.yaml 파일, 그리고 서버 부분을 이 파일에 추가합니다. URL에 대해서는 우리가 시작할 때 가져온 제품 API를 사용합니다.
최종 결과는 다음과 같아야 한다.

오류 #2 - 응답 아키텍처 불일치


포트맨을 다시 실행할 때 다음과 같은 오류가 발생했습니다.

이것은 GET /products 요청이 OpenAPI에 정의된 예상 형식으로 되돌아오지 않았음을 알려 줍니다.
OpenAPI를 살펴보면 응답 모드를 제품군으로 정의합니다.
[
  {
  }
]
응답 템플릿의 작업과 비교할 때, 이것은 제품스 그룹이 있는 대상을 되돌려줍니다. 이 그룹은 다음과 같습니다.
{
  "products": [
  ]
}
이 문제를 해결하기 위해서 응답 템플릿에서 제품 속성을 삭제하고 그룹을 간단하게 되돌려줍니다.
응답 템플릿은 다음과 같습니다.

이 점을 확인하기 위해서, 우리는 서비스를 재배치해야 한다. 서비스가 배치가 끝난 후에, 우리는Portman을 다시 운행하게 되면, 우리는 현재 모든 것이 성공적으로 운행되고 있음을 보게 될 것이다.

5. 변수 할당 및 무시


요청-응답의 값을 사용할 수 있도록portman 프로필의 assignVariables 부분을 사용하여 이 동작을 수행할 노드와 변수에 저장할 변수를 지정할 수 있습니다.
이 예에서, 우리는 모든 다른 요청에서 POST products 요청이 되돌아오는 id를 사용하기를 희망합니다.이를 실현하기 위해 저희 assignVariables 부분은 다음과 같습니다.
{
  "assignVariables": [
    {
      "openApiOperation": "POST::/products",
      "collectionVariables": [
        {
          "name": "newProductId",
          "responseBodyProp": "id"
        }
      ]
    }
  ]
}
무슨 뜻인지 한번 봅시다.
  • openApiOperation - 보트만에게 이 변수 assigment를 추가해야 하는 요청을 알려줍니다.그 구조는 [Method]:[Path]입니다.메소드 및 경로는 와일드카드일 수 있으며 복사한 기본 구성으로 돌아가면 "*::/*"를 사용합니다. 즉, 각 메소드와 각 경로에 대해 테스트를 실행합니다.
  • collectionVariables-집합 변수의 이름을 지정하여 다른 요청에서 인용할 수 있도록 하고responseBodyProp은 응답에서 값을 얻는 경로를 정의합니다.
  • 다른 요청에서 이 변수를 사용하려면 overwrites 부분을 업데이트합니다.이렇게 해야 합니다.
      {
        "overwrites": [
          {
            "openApiOperation": "*::/products/{productId}",
            "overwriteRequestPathVariables": [
              {
                "key": "productId",
                "value": "{{newProductId}}",
                "overwrite": true
              }
            ]
          }
        ]
      }
    
    이것도 맞춰달래요.
  • openApiOperation - 이 경우 HTTP 방법에 어댑터를 사용하고 덮어쓰기를 원하는 경로를 정확하게 지정합니다.
  • 덮어쓰기 요청 경로 변수
  • 키 - 이 값을 어디서 바꾸시겠습니까? 예를 들어 경로 매개 변수의 {productId}입니다.
  • 값 - 바꿀 값이 무엇입니까? 집합 변수에서 나올 수도 있고 하드 인코딩에서 나올 수도 있습니다.여기서 collectionVariables 섹션에 지정된 new ProductId를 사용합니다.
  • overwrite -portman이 요청 경로 변수의 브리 값을 덮어써야 하는지 알려 줍니다.
  • 포트맨을 다시 실행할 때, POST 요청에 대한 새로운 설명을 볼 수 있습니다. 집합 변수가 설정되어 있음을 알려 줍니다.

    만약 우리가 모든 다른 요청을 본다면, 그들은 같은 제품 id를 사용할 것입니다. 왜냐하면 우리는 어댑터를 사용하여 덮어쓰기를 지정했기 때문입니다.

    마무리


    기존 OpenAPI 정의를 사용하여 계약 테스트를 설정하는 것이 얼마나 간단한지 잘 알고 있습니다.곧 EMC API와 저희가 정의한 API 사이의 차이를 발견할 수 있습니다.
    이러한 유형의 테스트는 API에 대한 신뢰를 심어주고 문서를 쉽게 업데이트하는 데 도움이 됩니다.
    본고는 기본적인 내용만 소개하지만 대부분의 장면을 포괄하기 위해 포트맨을 사용하여 더 많은 작업을 할 수 있습니다.

    좋은 웹페이지 즐겨찾기