REST API에 대한 자동화 된 테스트 스위트를 작성하고 싶습니다. 새로운 서비스를 완료함에 따라 이전에 생성 된 모든 서비스가 예상대로 작동하는지 확인하고자합니다. 이를 수행하는 데 사용할 최고의 도구에 대한 제안이 있습니까? 한 번에 하나의 서비스를 테스트 할 수있는 Apigee와 같은 도구가 있다는 것을 알고 있지만 버튼 클릭으로 모든 서비스를 테스트 할 수있는 방법을 찾고 싶습니다.
REST API에 대한 자동화 된 테스트 스위트를 작성하고 싶습니다. 새로운 서비스를 완료함에 따라 이전에 생성 된 모든 서비스가 예상대로 작동하는지 확인하고자합니다. 이를 수행하는 데 사용할 최고의 도구에 대한 제안이 있습니까? 한 번에 하나의 서비스를 테스트 할 수있는 Apigee와 같은 도구가 있다는 것을 알고 있지만 버튼 클릭으로 모든 서비스를 테스트 할 수있는 방법을 찾고 싶습니다.
답변:
제 작업에서 우리는 최근에 우리가 구축 한 RESTful API를 테스트하기 위해 Java로 작성된 몇 가지 테스트 스위트를 모았습니다. 우리 서비스는 그들이 의존하는 다른 RESTful API를 호출 할 수 있습니다. 우리는 그것을 두 개의 스위트 룸으로 나눴습니다.
나는 이것을하는 것이 좋습니다. 그것은 우리에게 정말 잘 작동했습니다. 주요 장점은 다음과 같습니다.
이 제품군을 사용하려면 피어 서비스에서 데이터를 설정해야합니다. 즉, 일반적으로 테스트를 작성하는 데 더 많은 시간이 걸립니다. 가능한 한 많이 REST 클라이언트를 사용하여 피어 서비스에서 데이터 설정을 수행합니다.
이 제품군의 테스트는 일반적으로 작성하는 데 더 오래 걸리므로 Suite 1에 대부분의 커버리지를 넣습니다. Suite 1의 모의 작업이 실제 서비스와 매우 유사하게 작동하지 않을 수 있으므로이 제품군에는 여전히 명확한 가치가 있습니다.
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();
필자는 동료 중 한 명과 협력하여 다음과 같은 이유로 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}
기능 및 자동화 테스트를 위해 SOAP UI 를 사용했습니다 . SOAP UI를 사용하면 버튼 클릭만으로 테스트를 실행할 수 있습니다. Ted Young이 만든 스프링 컨트롤러 테스트 페이지 도 있습니다 . 이 기사를 사용하여 애플리케이션에서 Rest 단위 테스트를 만들었습니다.
API에 대한 자동화 된 테스트를 수행 할 때의 문제 중 하나는 많은 도구에서 테스트 스위트를 실행하기 전에 API 서버를 가동하고 실행해야한다는 것입니다. 완전 자동화 된 테스트 환경에서 API를 실행하고 쿼리 할 수있는 단위 테스트 프레임 워크를 갖는 것은 실질적인 이점이 될 수 있습니다.
Node.JS / Express로 구현 된 API에 적합한 옵션은 자동화 된 테스트에 mocha를 사용하는 것입니다. 단위 테스트 외에도 API에 대한 기능 테스트를 쉽게 작성하고 여러 테스트 스위트로 구분합니다. 로컬 테스트 환경에서 API 서버를 자동으로 시작하고 로컬 테스트 데이터베이스를 설정할 수 있습니다. make, npm 및 빌드 서버를 사용하여 "make test"대상과 코드 조각이 저장소에 제출 될 때마다 전체 테스트 스위트를 실행하는 증분 빌드를 만들 수 있습니다. 정말 까다로운 개발자를 위해 코드베이스의 어떤 부분이 테스트에 포함되는지 여부를 보여주는 멋진 HTML 코드 커버리지 보고서도 생성합니다. 이것이 흥미로울 것 같으면 여기에 모든 기술 세부 정보를 제공 하는 블로그 게시물 이 있습니다.
노드를 사용하지 않는 경우 언어에 대한 사실상의 단위 테스트 프레임 워크가 무엇이든 (jUnit, cucumber / capybara 등)-로컬 테스트 환경에서 서버 회전 및 HTTP 쿼리 실행에 대한 지원을 확인하십시오. 대규모 프로젝트 인 경우 자동화 된 API 테스트 및 지속적인 통합 작업을 수행하려는 노력은 매우 빠르게 성과를 거둘 것입니다.
도움이되기를 바랍니다.
편안한 서비스를 테스트하기위한 jave DSL 인 REST Assured를 기반으로 많은 자동화 사례를 구현했습니다. https://code.google.com/p/rest-assured/
구문은 간단하며 json 및 xml을 지원합니다. https://code.google.com/p/rest-assured/wiki/Usage
그 전에 SOAPUI를 사용해 보았고 무료 버전에서 몇 가지 문제가있었습니다. 게다가 케이스는 확장하고 재사용하기 어려운 xml 파일에 있습니다.
Rest Assured 라이브러리를 사용할 수도 있습니다. 샘플 스크립트가 포함 된 데모는 http://artoftesting.com/automationTesting/restAPIAutomationGetRequest.html을 참조하십시오.
분당 최대 한 번 API 테스트 자동화는 RightAPI를 통해 사용할 수있는 서비스 입니다. 테스트 시나리오를 만들고 실행합니다. 이러한 테스트가 예상대로 수행되면 일정을 잡을 수 있습니다. 인증이 필요한 시나리오를 위해 테스트를 함께 '체인'할 수 있습니다. 예를 들어 Twitter에 OAuth 요청을하는 테스트를 수행 한 다음 다른 테스트에서 사용할 수있는 공유 토큰을 만들 수 있습니다. 또한 테스트에는 http 상태 코드를 확인하기 위해 첨부 된 유효성 검사 기준이 있거나 자바 스크립트 또는 스키마 유효성 검사를 사용하여 응답에 대한 자세한 검사도 포함될 수 있습니다. 테스트가 예약되면 특정 테스트가 유효성 검사에 실패하거나 응답 시간 또는 응답 크기에 대해 설정된 범위를 벗어나는 즉시 알림을받을 수 있습니다.
TestNG 및 Apache HTTP 클래스를 사용하여 자체 REST API 테스트 프레임 워크를 구축했으며 2 년 동안 Selenium에서 작업 한 후이 개념을 개발했습니다.
Selenium 클래스 대신 Apache HTTP 클래스를 사용해야한다는 점을 제외하면 모든 것이 동일합니다.
시도해보세요. 정말 귀엽고 훌륭합니다. 테스트 프레임 워크를 최대한의 가능성에 맞게 맞춤 설정할 수있는 모든 권한이 있습니다.