REST Api에 대한 자동 테스트
REST API에 대한 자동화 된 테스트 스위트를 작성하고 싶습니다. 새로운 서비스를 완료함에 따라 이전에 생성 된 모든 서비스가 예상대로 작동하는지 확인하고자합니다. 이를 수행하는 데 사용할 최고의 도구에 대한 제안이 있습니까? 한 번에 하나의 서비스를 테스트 할 수있는 Apigee와 같은 도구가 있다는 것을 알고 있지만 버튼 클릭으로 모든 서비스를 테스트 할 수있는 방법을 찾고 싶습니다.
제 작업에서 우리는 최근에 우리가 구축 한 RESTful API를 테스트하기 위해 Java로 작성된 몇 가지 테스트 스위트를 모았습니다. 우리 서비스는 그들이 의존하는 다른 RESTful API를 호출 할 수 있습니다. 우리는 그것을 두 개의 스위트 룸으로 나누었습니다.
- Suite 1-각 서비스를 개별적으로 테스트
- restito 를 사용하여 API가 의존하는 모든 피어 서비스를 모의합니다 . 다른 대안으로는 rest-driver , wiremock 및 betamax가 있습니다.
- 테스트중인 서비스와 모의가 모두 단일 JVM에서 실행되는지 테스트합니다.
- Jetty에서 서비스 시작
나는 이것을하는 것이 좋습니다. 그것은 우리에게 정말 잘 작동했습니다. 주요 장점은 다음과 같습니다.
- 피어 서비스는 모의 처리되므로 복잡한 데이터 설정을 수행 할 필요가 없습니다. Mockito를 사용하는 단위 테스트의 클래스에서 하듯이 각 테스트 전에 restito를 사용하여 피어 서비스의 동작 방식을 정의하기 만하면됩니다.
- 모의 피어 서비스가 호출되었는지 물어볼 수 있습니다. 실제 피어 서비스에서는 이러한 어설 션을 쉽게 수행 할 수 없습니다.
- 모의 서비스가 미리 준비된 메모리 내 응답을 제공하므로이 제품군은 매우 빠릅니다. 따라서 우리는 제품군이 실행되는 데 오래 걸리지 않고 좋은 범위를 얻을 수 있습니다.
- 이 제품군은 자체 JVM에 격리되어 있기 때문에 안정적이고 반복 가능하므로 제품군이 실행되고 테스트가 실패하는 동시에 다른 제품군 / 사람들이 공유 환경을 비웃는 것에 대해 걱정할 필요가 없습니다.
- 스위트 2-완전한 종단 간
- Suite는 여러 시스템에 배포 된 전체 환경에서 실행됩니다.
- 환경의 Tomcat에 배포 된 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}
I used SOAP UI for functional and automated testing. SOAP UI allows you to run the tests on the click of a button. There is also a spring controllers testing page created by Ted Young. I used this article to create Rest unit tests in our application.
One of the problems of doing automated testing for APIs is that many of the tools require you to have the API server up and running before you run your test suite. It can be a real advantage to have a unit testing framework that is capable of running and querying the APIs in a fully automated test environment.
An option that's good for APIs implemented with Node.JS / Express is to use mocha for automated testing. In addition to unit tests, its easy to write functional tests against the APIs, separated into different test suites. You can start up the API server automatically in the local test environment and set up a local test database. Using make, npm, and a build server, you can create a "make test" target and an incremental build that will run the entire test suite every time a piece of code is submitted to your repository. For the truly fastidious developer, it will even generate a nice HTML code-coverage report showing you which parts of your code base are covered by tests or not. If this sounds interesting, here's a blog post that provides all the technical details.
If you're not using node, then whatever the defacto unit testing framework for the language is (jUnit, cucumber/capybara, etc) - look at its support for spinning up servers in the local test environment and running the HTTP queries. If it's a large project, the effort to get automated API testing and continual integration working will pay off pretty quickly.
Hope that helps.
Runscope is a cloud based service that can monitor Web APIs using a set of tests. Tests can be , scheduled and/or run via parameterized web hooks. Tests can also be executed from data centers around the world to ensure response times are acceptable to global client base.
The free tier of Runscope supports up to 10K requests per month.
Disclaimer: I am a developer advocate for Runscope.
I implemented many automation cases based on REST Assured , a jave DSL for testing restful service. https://code.google.com/p/rest-assured/
The syntax is easy, it supports json and xml. https://code.google.com/p/rest-assured/wiki/Usage
Before that, I tried SOAPUI and had some issues with the free version. Plus the cases are in xml files which hard to extend and reuse, simply I don't like
You can also use Rest Assured library. For a demo with sample script, refer to http://artoftesting.com/automationTesting/restAPIAutomationGetRequest.html
API test automation, up to once per minute, is a service available through theRightAPI. You create your test scenarios, and execute them. Once those tests do what you expect them to, you can then schedule them. Tests can be 'chained' together for scenarios that require authentication. For example, you can have a test that make an OAuth request to Twitter, and creates a shared token that can then be used by any other test. Tests can also have validation criteria attached to ensure http status codes, or even detailed inspection of the responses using javascript or schema validation. Once tests are scheduled, you can then have alerts notify you as soon as a particular test fails validation, or is behaving out of established ranges for response time or response size.
I have used TestNG and Apache HTTP classes to build my own REST API test framework, I developed this concept after working in Selenium for two years.
Everything is same, except you should use Apache HTTP classes instead of Selenium classes.
give a try, its really cute and good, you've all the power to customize your test framework to your fullest possibilities.
참고URL : https://stackoverflow.com/questions/12135309/automated-testing-for-rest-api
'developer tip' 카테고리의 다른 글
계수를 사용한 C 추가 (0) | 2020.10.08 |
---|---|
고정 크기 부동 소수점 유형 (0) | 2020.10.08 |
REST-본문에 ID를 넣을까요? (0) | 2020.10.08 |
Maven 종속성을 전역 적으로 제외하는 방법이 있습니까? (0) | 2020.10.08 |
페이지를 다시로드하지 않고 양식 제출 (0) | 2020.10.07 |