Ich möchte eine automatisierte Testsuite für eine REST - API schreiben. Wenn wir neue Services abschließen, möchten wir überprüfen, ob alle zuvor erstellten Services wie erwartet funktionieren. Vorschläge für die besten Werkzeuge, um dies zu erreichen? Ich kenne Tools wie Apigee, mit denen Sie jeweils 1 Service testen können, aber wir möchten alle Services mit einem Klick testen.
Bei meiner Arbeit haben wir kürzlich einige in Java geschriebene Testsuiten zusammengestellt, um einige von uns entwickelte RESTful-APIs zu testen. Unsere Services können andere RESTful-APIs aufrufen, von denen sie abhängig sind. Wir teilen es in zwei Suiten auf.
Ich würde das auf jeden Fall empfehlen. Es hat sehr gut für uns funktioniert. Die Hauptvorteile sind:
Diese Suite erfordert, dass wir Daten in Peerservices einrichten, was bedeutet, dass Tests normalerweise mehr Zeit zum Schreiben benötigen. Wir verwenden so weit wie möglich REST -Clients, um Daten in Peer-Services einzurichten.
Tests in dieser Suite dauern in der Regel länger, daher schreiben wir den größten Teil unserer Berichterstattung in Suite 1. Wenn man jedoch sagt, dass diese Suite nach wie vor einen klaren Wert hat, da sich unsere Vorbilder in Suite 1 möglicherweise nicht ganz wie die echten Services verhalten.
Frisby ist ein REST API-Testframework, das auf node.js und Jasmine basiert und das Testen von API-Endpunkten einfach, schnell und unterhaltsam macht. http://frisbyjs.com
Beispiel:
var frisby = require('../lib/frisby');
var URL = 'http://localhost:3000/';
var URL_AUTH = 'http://username:[email protected]: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();
Ich habe aus diesem Grund mit einem meiner Kollegen zusammengearbeitet, um das PyRestTest-Framework zu starten: https://github.com/svanoort/pyresttest
Obwohl Sie mit den Tests in Python arbeiten können, ist das normale Testformat in YAML.
Beispiel-Testsuite für eine einfache REST -App - Überprüft, ob die APIs ordnungsgemäß reagieren, und prüft die HTTP-Statuscodes. Sie können jedoch auch die Antworttextkörper überprüfen:
---
- 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}
Ich habe SOAP UI für funktionale und automatisierte Tests verwendet. SOAP Über die Benutzeroberfläche können Sie die Tests auf Knopfdruck ausführen. Es gibt auch eine Spring-Controller-Test Seite, die von Ted Young erstellt wurde. Ich habe diesen Artikel verwendet, um Rest Unit-Tests in unserer Anwendung zu erstellen.
Beim automatisierten Testen von APIs ist eines der Probleme, dass für viele Tools der API-Server vor dem Ausführen der Testsuite betriebsbereit sein muss. Es kann ein echter Vorteil sein, über ein Einheitentest-Framework zu verfügen, das die APIs in einer voll automatisierten Testumgebung ausführen und abfragen kann.
Eine Option, die sich für mit Node.JS/Express implementierte APIs eignet, ist die Verwendung von Mocha für automatisierte Tests. Neben Komponententests lassen sich einfach Funktionstests gegen die APIs schreiben, die in verschiedene Testreihen unterteilt sind. Sie können den API-Server automatisch in der lokalen Testumgebung starten und eine lokale Testdatenbank einrichten. Mit make, npm und einem Build-Server können Sie ein "make test" -Ziel und einen inkrementellen Build erstellen, der die gesamte Testsuite jedes Mal ausführt, wenn ein Stück Code an Ihr Repository übergeben wird. Für wirklich anspruchsvolle Entwickler wird sogar ein Nice-HTML-Code-Coverage-Bericht erstellt, der Ihnen zeigt, welche Teile Ihrer Codebasis von Tests abgedeckt werden oder nicht. Wenn dies interessant klingt, hier ein Blogbeitrag , der alle technischen Details enthält.
Wenn Sie node nicht verwenden, können Sie unabhängig von dem defacto-Einheitentestgerüst für die Sprache (jUnit, gurke/capybara usw.) die Unterstützung für das Aufstellen von Servern in der lokalen Testumgebung und das Ausführen der HTTP-Abfragen prüfen. Wenn es sich um ein großes Projekt handelt, zahlt sich der Aufwand für automatisierte API-Tests und eine kontinuierliche Integration schnell aus.
Hoffentlich hilft das.
Runscope ist ein Cloud-basierter Dienst, der Web-APIs mithilfe einer Reihe von Tests überwachen kann. Tests können über parametrisierte Web-Hooks geplant, geplant und/oder ausgeführt werden. Tests können auch in Rechenzentren auf der ganzen Welt ausgeführt werden, um sicherzustellen, dass Antwortzeiten für globale Kunden akzeptabel sind.
Die kostenlose Stufe von Runscope unterstützt bis zu 10.000 Anfragen pro Monat.
Disclaimer: Ich bin ein Entwickler von Runscope.
Sie können auch die Rest Assured-Bibliothek verwenden. Eine Demo mit Beispielskript finden Sie unter http://artoftesting.com/automationTesting/restAPIAutomationGetRequest.html
Ich habe viele Automatisierungsfälle implementiert, die auf REST Assured basieren, einem jave-DSL zum Testen des unruhigen Dienstes . https://code.google.com/p/rest-assured/
Die Syntax ist einfach und unterstützt Json und XML https://code.google.com/p/rest-assured/wiki/Usage
Vorher habe ich SOAPUI ausprobiert und hatte Probleme mit der kostenlosen Version. Plus die Fälle sind in XML-Dateien, die schwer zu erweitern und wiederzuverwenden sind, ich mag es einfach nicht
Die API-Testautomatisierung (bis zu einmal pro Minute) ist ein Dienst, der über theRightAPI verfügbar ist. Sie erstellen Ihre Testszenarien und führen sie aus. Sobald diese Tests das tun, was Sie erwarten, können Sie sie planen. Tests können für Szenarien, in denen eine Authentifizierung erforderlich ist, miteinander verkettet werden. Sie können beispielsweise einen Test erstellen, der eine OAuth-Anforderung an Twitter sendet, und ein freigegebenes Token erstellen, das dann von jedem anderen Test verwendet werden kann. Tests können auch Validierungskriterien zugeordnet werden, um HTTP-Statuscodes oder sogar eine detaillierte Überprüfung der Antworten mithilfe von Javascript oder Schema-Validierung sicherzustellen. Sobald Tests geplant sind, können Sie sich durch Warnmeldungen benachrichtigen lassen, sobald ein bestimmter Test die Überprüfung nicht bestanden hat oder sich außerhalb der festgelegten Bereiche für die Antwortzeit oder Antwortgröße verhält.
Ich habe TestNG- und Apache-HTTP-Klassen verwendet, um mein eigenes REST - API-Testframework zu erstellen.
Alles ist gleich, außer dass Sie Apache HTTP-Klassen anstelle von Selenium-Klassen verwenden sollten.
probieren Sie es aus, es ist wirklich süß und gut. Sie haben die Möglichkeit, Ihr Test-Framework an Ihre Möglichkeiten anzupassen.