Cypress로 API를 테스트하는 방법

오늘의 "Pinches of Cypress"에서 Cypress.io를 사용하여 API를 테스트하는 방법에 대해 알아보십시오.



설명을 위해 API 테스트 연구를 돕기 위해 에서 만든 프로젝트인 ServeRest 을 사용할 것입니다.

이 게시물은 GET 요청에만 초점을 맞출 것입니다.

ServeRest의 기능 중 일부는 사용자, 제품 및 카트 검색입니다.

사용자 검색 테스트부터 시작하겠습니다.

describe('GET users', () => {
  it('correctly gets users', () => {
    cy.request({
      method: 'GET',
      url: 'http://localhost:3000/usuarios'
    }).then((response) => {
      expect(response.status).to.equal(200);
      expect(response.body.usuarios[0].nome).to.equal('Fulano da Silva')
      expect(response.body.usuarios[0].email).to.equal('[email protected]')
    })
  })
})


Note: the endpoints and body responses from ServeRest are in Portuguese. Sorry about that!



위의 코드 조각에서 볼 수 있듯이 응답 상태가 성공적인지( 200 ) 확인하는 것 외에도 응답 본문의 구조를 확인하여 PT의 이름( nome -BR) 및 반환된 첫 번째 사용자의 이메일은 예상대로입니다.

이제 첫 번째 제품이 아닌 두 개 이상의 제품을 확인하려는 제품 검색 테스트를 살펴보겠습니다.

describe('GET products', () => {
  it('correctly gets products', () => {
    const expectedResult = [
      {
        name: 'Logitech MX Vertical',
        description: 'Mouse',
        price: 470,
        quantity: 382
      },
      {
        name: 'Samsung 60 polegadas',
        description: 'TV',
        price: 5240,
        quantity: 49977
      }
    ]

    cy.request({
      method: 'GET',
      url: 'http://localhost:3000/produtos'
    }).then((response) => {
      expect(response.status).to.equal(200);
      response.body.produtos.forEach((product, index) => {
        expect(product.nome).to.equal(expectedResult[index].name)
        expect(product.descricao).to.equal(expectedResult[index].description)
        expect(product.preco).to.equal(expectedResult[index].price)
        expect(product.quantidade).to.equal(expectedResult[index].quantity)
      })
    })
  })
})


위의 예에서 예상 결과로 배열을 정의합니다(이는 고정 장치에서 올 수도 있지만 다른 게시물에서 이에 대해 설명하겠습니다).

배열에는 이름, 설명, 가격 및 수량 속성(PT-BR의 nome, descricao, precoquantidade)이 있는 두 개의 개체가 포함됩니다.

마지막으로 GET 엔드포인트에 /products 요청을 하고 요청이 반환되면 응답의 성공 상태를 확인하고 응답 본문에 반환된 모든 제품을 반복합니다(JavaScript 사용 forEach 기능) name , description , pricequantity가 예상 결과와 일치하는지 확인합니다.

마지막 예로서 특정 총 수량을 queryString으로 전달하여 장바구니를 검색하는 테스트를 살펴보겠습니다.

describe('GET carts', () => {
  it('correctly gets carts by total quantity', () => {
    cy.request({
      method: 'GET',
      url: 'http://localhost:3000/carrinhos?quantidadeTotal=3'
    }).then((response) => {
      expect(response.status).to.equal(200);
      expect(response.body.carrinhos.length).to.equal(1)
    })
  })
})


위의 테스트에서는 물론 성공 상태와 함께 응답 본문( length 속성 사용)에서 카트 배열에 하나의 카트만 반환되었는지 확인합니다. 😉

위의 세 가지 테스트를 로컬에서 실행하면 모두 통과했으며 단 146ms 만에 통과했습니다. 🚀


계속해서 피드백을 수집하고 다음 포스트를 위한 백로그를 작성하고 있습니다. 향후 콘텐츠에서 다루었으면 하는 내용을 댓글로 남겨주세요.


이 게시물은 원래 Talking About Testing 블로그에 포르투갈어로 게시되었습니다.


Cypress를 사용한 테스트 자동화에 대해 배우고 싶습니까? Udemy에서 내 온라인 과정을 알아보십시오.


Spoiler: in 2021, there will be an API testing with Cypress course at the Talking About Testing school. Stay tuned!

좋은 웹페이지 즐겨찾기