REST Api에 대한 자동화 된 테스트 [닫힘]


84

REST API에 대한 자동화 된 테스트 스위트를 작성하고 싶습니다. 새로운 서비스를 완료함에 따라 이전에 생성 된 모든 서비스가 예상대로 작동하는지 확인하고자합니다. 이를 수행하는 데 사용할 최고의 도구에 대한 제안이 있습니까? 한 번에 하나의 서비스를 테스트 할 수있는 Apigee와 같은 도구가 있다는 것을 알고 있지만 버튼 클릭으로 모든 서비스를 테스트 할 수있는 방법을 찾고 싶습니다.


2
당신은 줄 수 vREST을 시도합니다. 단위 테스트와 모의가 모두 있습니다.
Jangid

1
JMeter는 REST API 테스트를위한 최고의 도구입니다. JMeter를 사용하여 REST API를 테스트하는 몇 가지 세부 단계를 찾는 사람들을 위해이 주석을 추가합니다. testautomationguru.com/how-to-test-rest-api-using-jmeter
vins

그냥 완벽하고 REST API를 테스트를위한 가장 강력한 도구 - 아무것도 FRISBY 없잖아
Piyush Chordia

2
JMeter는 REST API의 기본 기능 테스트를위한 끔찍한 UI가 있다는 것은 말할 것도없고 과잉입니다. 성능 / 부하 테스트를위한 것입니다.
Kevin M

2
JMeter는 부하 테스트에 더 중점을두고 있습니다. 최상의 옵션을 찾으려면 12 개의 훌륭한 웹 서비스 테스트 도구 를 확인해야합니다 . 이 목록의 일부 도구 (예 : SOAPUI 또는 HttpMaster )는 REST API 엔드 포인트에 대해 꽤 괜찮은 자동화 지원을 제공합니다.
Joxi

답변:


36

제 작업에서 우리는 최근에 우리가 구축 한 RESTful API를 테스트하기 위해 Java로 작성된 몇 가지 테스트 스위트를 모았습니다. 우리 서비스는 그들이 의존하는 다른 RESTful API를 호출 할 수 있습니다. 우리는 그것을 두 개의 스위트 룸으로 나눴습니다.


  • Suite 1-각 서비스를 개별적으로 테스트
    • restito 를 사용하여 API가 의존하는 모든 피어 서비스를 모의합니다 . 다른 대안으로는 rest-driver , wiremockbetamax가 있습니다.
    • 테스트중인 서비스와 모의가 모두 단일 JVM에서 실행되는지 테스트합니다.
    • Jetty에서 서비스 시작

나는 이것을하는 것이 좋습니다. 그것은 우리에게 정말 잘 작동했습니다. 주요 장점은 다음과 같습니다.

  • 피어 서비스는 모의 처리되므로 복잡한 데이터 설정을 수행 할 필요가 없습니다. Mockito를 사용하는 단위 테스트의 클래스에서 하듯이 각 테스트 전에 restito를 사용하여 피어 서비스의 동작 방식을 정의하기 만하면됩니다.
  • 모의 피어 서비스가 호출되었는지 물어볼 수 있습니다. 실제 피어 서비스에서는 이러한 어설 션을 쉽게 수행 할 수 없습니다.
  • 모의 서비스가 미리 준비된 메모리 내 응답을 제공하므로이 제품군은 매우 빠릅니다. 따라서 제품군을 실행하는 데 시간이 걸리지 않고 좋은 커버리지를 얻을 수 있습니다.
  • 이 제품군은 자체 JVM에 격리되어 있기 때문에 안정적이고 반복 가능하므로 제품군이 실행되고 테스트가 실패하는 동시에 다른 제품군 / 사람들이 공유 환경을 비웃는 것에 대해 걱정할 필요가 없습니다.

  • 스위트 2-완전한 종단 간
    • Suite는 여러 시스템에 배포 된 전체 환경에서 실행됩니다.
    • 환경의 Tomcat에 배포 된 API
    • 피어 서비스는 실제 '실시간'전체 배포입니다.

이 제품군을 사용하려면 피어 서비스에서 데이터를 설정해야합니다. 즉, 일반적으로 테스트를 작성하는 데 더 많은 시간이 걸립니다. 가능한 한 많이 REST 클라이언트를 사용하여 피어 서비스에서 데이터 설정을 수행합니다.

이 제품군의 테스트는 일반적으로 작성하는 데 더 오래 걸리므로 Suite 1에 대부분의 커버리지를 넣습니다. Suite 1의 모의 작업이 실제 서비스와 매우 유사하게 작동하지 않을 수 있으므로이 제품군에는 여전히 명확한 가치가 있습니다.



25

Frisby는 node.js 및 Jasmine에 구축 된 REST API 테스트 프레임 워크로, API 엔드 포인트를 쉽고 빠르고 재미있게 테스트 할 수 있습니다. http://frisbyjs.com

예:

var frisby = require('../lib/frisby');

var URL = 'http://localhost:3000/';
var URL_AUTH = 'http://username:password@localhost:3000/';

frisby.globalSetup({ // globalSetup is for ALL requests
  request: {
    headers: { 'X-Auth-Token': 'fa8426a0-8eaf-4d22-8e13-7c1b16a9370c' }
  }
});

frisby.create('GET user johndoe')
  .get(URL + '/users/3.json')
  .expectStatus(200)
  .expectJSONTypes({
    id: Number,
    username: String,
    is_admin: Boolean
  })
  .expectJSON({
    id: 3,
    username: 'johndoe',
    is_admin: false
  })
  // 'afterJSON' automatically parses response body as JSON and passes it as an argument
  .afterJSON(function(user) {
    // You can use any normal jasmine-style assertions here
    expect(1+1).toEqual(2);

    // Use data from previous result in next test
    frisby.create('Update user')
      .put(URL_AUTH + '/users/' + user.id + '.json', {tags: ['jasmine', 'bdd']})
      .expectStatus(200)
    .toss();
  })
.toss();

나는이 기사에 투표했고, 나는 그것을 일상 업무에 사용했고, 이제는 그 모든 frisbies가 던져지고 있습니다. 나는 내 블로그에 거의 같은 공유 한 : cubicrace.com/2016/04/frisby-rest-api-automation-framework.html
Piyush Chordia을

2
Frisby가 사망했습니다. github.com/vlucas/frisby/issues/347
Ernst Ernst

Frisby는 시작하기 쉽고 고급 API 흐름도 테스트 할 수있을만큼 강력합니다. 안타깝게도 보고서 출력에는 많은 부분이 남아 있습니다. API가 실패 할 때 발생하는 오류 메시지는 거의 쓸모가 없습니다. 테스트를 수동으로 실행할 때 출력이 꽤 좋다는 점을 감안할 때 이상합니다. 부끄러운 일입니다.
카스퍼 Holdum

1
내가 한 방식으로 누군가가 비틀 거리는 경우 위에서 언급 한 의견처럼 frisby는 아직 죽은 것처럼 보이지 않습니다. git에는 최근 업데이트가 있습니다. github.com/vlucas/frisby
S.Huston

21

필자는 동료 중 한 명과 협력하여 다음과 같은 이유로 PyRestTest 프레임 워크를 시작했습니다. https://github.com/svanoort/pyresttest

Python에서 테스트로 작업 할 수 있지만 일반 테스트 형식은 YAML입니다.

기본 REST 앱에 대한 샘플 테스트 모음-API가 올바르게 응답하는지 확인하고 HTTP 상태 코드를 확인하지만 응답 본문도 검사 할 수 있습니다.

---
- config:
    - testset: "Tests using test app"

- test: # create entity
    - name: "Basic get"
    - url: "/api/person/"
- test: # create entity
    - name: "Get single person"
    - url: "/api/person/1/"
- test: # create entity
    - name: "Get single person"
    - url: "/api/person/1/"
    - method: 'DELETE'
- test: # create entity by PUT
    - name: "Create/update person"
    - url: "/api/person/1/"
    - method: "PUT"
    - body: '{"first_name": "Gaius","id": 1,"last_name": "Baltar","login": "gbaltar"}'
    - headers: {'Content-Type': 'application/json'}
- test: # create entity by POST
    - name: "Create person"
    - url: "/api/person/"
    - method: "POST"
    - body: '{"first_name": "Willim","last_name": "Adama","login": "theadmiral"}'
    - headers: {Content-Type: application/json}

인증을 사용하면 아래 헤더를 사용 하여 github.com/svanoort/pyresttest/blob/master/quickstart.md 에서 참조 된 각 테스트에 아래를 추가합니다 . -auth_username : "foobar"-auth_password : "secret"-expected_status : [200]
agfe2


2

API에 대한 자동화 된 테스트를 수행 할 때의 문제 중 하나는 많은 도구에서 테스트 스위트를 실행하기 전에 API 서버를 가동하고 실행해야한다는 것입니다. 완전 자동화 된 테스트 환경에서 API를 실행하고 쿼리 할 수있는 단위 테스트 프레임 워크를 갖는 것은 실질적인 이점이 될 수 있습니다.

Node.JS / Express로 구현 된 API에 적합한 옵션은 자동화 된 테스트에 mocha를 사용하는 것입니다. 단위 테스트 외에도 API에 대한 기능 테스트를 쉽게 작성하고 여러 테스트 스위트로 구분합니다. 로컬 테스트 환경에서 API 서버를 자동으로 시작하고 로컬 테스트 데이터베이스를 설정할 수 있습니다. make, npm 및 빌드 서버를 사용하여 "make test"대상과 코드 조각이 저장소에 제출 될 때마다 전체 테스트 스위트를 실행하는 증분 빌드를 만들 수 있습니다. 정말 까다로운 개발자를 위해 코드베이스의 어떤 부분이 테스트에 포함되는지 여부를 보여주는 멋진 HTML 코드 커버리지 보고서도 생성합니다. 이것이 흥미로울 것 같으면 여기에 모든 기술 세부 정보를 제공 하는 블로그 게시물 이 있습니다.

노드를 사용하지 않는 경우 언어에 대한 사실상의 단위 테스트 프레임 워크가 무엇이든 (jUnit, cucumber / capybara 등)-로컬 테스트 환경에서 서버 회전 및 HTTP 쿼리 실행에 대한 지원을 확인하십시오. 대규모 프로젝트 인 경우 자동화 된 API 테스트 및 지속적인 통합 작업을 수행하려는 노력은 매우 빠르게 성과를 거둘 것입니다.

도움이되기를 바랍니다.


2

Runscope 는 일련의 테스트를 사용하여 Web API를 모니터링 할 수있는 클라우드 기반 서비스입니다. 테스트는 매개 변수화 된 웹 후크를 통해, 예약 및 / 또는 실행할 수 있습니다. 또한 전 세계 데이터 센터에서 테스트를 실행하여 응답 시간이 글로벌 클라이언트 기반에 적합한 지 확인할 수 있습니다.

Runscope의 무료 계층은 매월 최대 10,000 개의 요청을 지원합니다.

면책 조항 : 저는 Runscope의 개발자 옹호자입니다.




0

분당 최대 한 번 API 테스트 자동화는 RightAPI를 통해 사용할 수있는 서비스 입니다. 테스트 시나리오를 만들고 실행합니다. 이러한 테스트가 예상대로 수행되면 일정을 잡을 수 있습니다. 인증이 필요한 시나리오를 위해 테스트를 함께 '체인'할 수 있습니다. 예를 들어 Twitter에 OAuth 요청을하는 테스트를 수행 한 다음 다른 테스트에서 사용할 수있는 공유 토큰을 만들 수 있습니다. 또한 테스트에는 http 상태 코드를 확인하기 위해 첨부 된 유효성 검사 기준이 있거나 자바 스크립트 또는 스키마 유효성 검사를 사용하여 응답에 대한 자세한 검사도 포함될 수 있습니다. 테스트가 예약되면 특정 테스트가 유효성 검사에 실패하거나 응답 시간 또는 응답 크기에 대해 설정된 범위를 벗어나는 즉시 알림을받을 수 있습니다.


링크가 끊어진 것 같습니다.
Rao

0

TestNG 및 Apache HTTP 클래스를 사용하여 자체 REST API 테스트 프레임 워크를 구축했으며 2 년 동안 Selenium에서 작업 한 후이 개념을 개발했습니다.

Selenium 클래스 대신 Apache HTTP 클래스를 사용해야한다는 점을 제외하면 모든 것이 동일합니다.

시도해보세요. 정말 귀엽고 훌륭합니다. 테스트 프레임 워크를 최대한의 가능성에 맞게 맞춤 설정할 수있는 모든 권한이 있습니다.


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