Automatisierte Tests für REST-API [geschlossen]


84

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. Irgendwelche Vorschläge zu den besten Tools, um dies zu erreichen? Ich weiß, dass es Tools wie Apigee gibt, mit denen Sie jeweils einen Dienst testen können, aber wir möchten eine Möglichkeit finden, alle Dienste mit einem Klick auf eine Schaltfläche zu testen.


2
Sie könnten vREST ausprobieren. Es hat sowohl Unit-Tests als auch Mocks.
Jangid

1
JMeter ist das beste Tool zum Testen von REST-APIs - Hinzufügen dieses Kommentars für Personen, die nach detaillierten Schritten zum Testen einer REST-API mit JMeter suchen. testautomationguru.com/how-to-test-rest-api-using-jmeter
vins

Nichts geht über FRISBY - Nur das perfekte und leistungsstärkste Tool für REST-API-Tests
Piyush Chordia

2
JMeter ist übertrieben, ganz zu schweigen von einer schrecklichen Benutzeroberfläche, die nur für grundlegende Funktionstests einer REST-API geeignet ist. Es ist für Leistungs- / Lasttests gedacht.
Kevin M

2
JMeter konzentriert sich mehr auf Lasttests. Vielleicht sollten Sie 12 Great Web Service Testing Tools überprüfen , um die beste Option zu finden. Einige der Tools aus dieser Liste, z. B. SOAPUI oder HttpMaster , bieten eine recht gute Automatisierungsunterstützung für REST-API-Endpunkte.
Joxi

Antworten:


36

Bei meiner Arbeit haben wir kürzlich einige in Java geschriebene Testsuiten zusammengestellt, um einige von uns erstellte RESTful-APIs zu testen. Unsere Services können andere RESTful-APIs aufrufen, von denen sie abhängen. Wir haben es in zwei Suiten aufgeteilt.


  • Suite 1 - Testen jedes Dienstes für sich
    • Verspotten Sie alle Peer-Services, von denen die API abhängig ist . Andere Alternativen sind Rest-Driver , Wiremock und Betamax .
    • Testet den Service, den wir testen, und die Mocks werden alle in einer einzigen JVM ausgeführt
    • Startet den Dienst in Jetty

Ich würde es auf jeden Fall empfehlen. Es hat wirklich gut für uns funktioniert. Die Hauptvorteile sind:

  • Peer-Services werden verspottet, sodass Sie keine komplizierten Daten einrichten müssen. Vor jedem Test definieren Sie mit restito einfach, wie sich Peer-Services verhalten sollen, genau wie bei Klassen in Unit-Tests mit Mockito.
  • Sie können die verspotteten Peer-Dienste fragen, ob sie angerufen wurden. Mit echten Peer-Diensten können Sie diese Behauptungen nicht so einfach ausführen.
  • Die Suite ist superschnell, da verspottete Dienste vordefinierte In-Memory-Antworten bereitstellen. So können wir eine gute Abdeckung erhalten, ohne dass die Suite ein Alter braucht, um zu laufen.
  • Die Suite ist zuverlässig und wiederholbar, da sie in ihrer eigenen JVM isoliert ist. Sie müssen sich also keine Sorgen machen, dass andere Suiten / Personen gleichzeitig mit der Ausführung der Suite in einer gemeinsam genutzten Umgebung herumspielen und Tests fehlschlagen.

  • Suite 2 - Full End to End
    • Suite wird in einer vollständigen Umgebung ausgeführt, die auf mehreren Computern bereitgestellt wird
    • Auf Tomcat in der Umgebung bereitgestellte API
    • Peer-Services sind echte Live-Bereitstellungen

Für diese Suite müssen wir Daten in Peer-Diensten einrichten, was bedeutet, dass das Schreiben von Tests im Allgemeinen mehr Zeit in Anspruch nimmt. So oft wie möglich verwenden wir REST-Clients, um Daten in Peer-Services einzurichten.

Das Schreiben von Tests in dieser Suite dauert normalerweise länger, daher legen wir den größten Teil unserer Berichterstattung in Suite 1 ab. Allerdings ist diese Suite immer noch von klarem Wert, da sich unsere Verspottungen in Suite 1 möglicherweise nicht ganz wie die tatsächlichen Dienste verhalten.



25

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: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();

Ich habe diesen Artikel gewählt, ich habe ihn in meiner täglichen Arbeit verwendet und jetzt werden alle Frisbies herumgeworfen. Ich habe ungefähr das gleiche auf meinem Blog geteilt: cubicrace.com/2016/04/frisby-rest-api-automation-framework.html
Piyush Chordia


Frisby ist einfach zu starten und leistungsstark genug, um auch erweiterte API-Flows zu testen. Leider lässt die Berichtsausgabe zu wünschen übrig. Die Fehlermeldungen, wenn die API ausfällt, sind fast unbrauchbar. Was seltsam ist, da die Ausgabe beim manuellen Ausführen der Tests recht gut ist. Es ist Schande.
Kasper Holdum

1
Für den Fall, dass jemand so darüber stolpert wie ich, scheint Frisby noch nicht tot zu sein, wie oben erwähnt. Der Git hat aktuelle Updates. github.com/vlucas/frisby
S.Huston

21

Aus diesem Grund habe ich mit einem meiner Mitarbeiter 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.

Beispieltestsuite für eine grundlegende REST-App - Überprüft, ob APIs korrekt reagieren, und überprüft die HTTP-Statuscodes. Sie können jedoch auch Antwortkörper untersuchen lassen:

---
- 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}

Mit der Authentifizierung fügen Sie unten zu jedem Test, auf den unter github.com/svanoort/pyresttest/blob/master/quickstart.md verwiesen wird, die folgenden Überschriften hinzu . - auth_username: "foobar" - auth_password: "secret" - erwarteter_status: [200]
agfe2


2

Eines der Probleme beim automatisierten Testen von APIs besteht darin, dass für viele Tools der API-Server betriebsbereit sein muss, bevor Sie Ihre Testsuite ausführen. Es kann ein echter Vorteil sein, über ein Unit-Test-Framework zu verfügen, mit dem die APIs in einer vollautomatisierten Testumgebung ausgeführt und abgefragt werden können.

Eine Option, die für mit Node.JS / Express implementierte APIs gut ist, ist die Verwendung von Mokka für automatisierte Tests. Zusätzlich zu Unit-Tests ist es einfach, Funktionstests für die APIs zu schreiben, die in verschiedene Testsuiten 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 Code an Ihr Repository gesendet wird. Für den wirklich anspruchsvollen Entwickler wird sogar ein netter HTML-Code-Coverage-Bericht erstellt, der Ihnen zeigt, welche Teile Ihrer Codebasis durch Tests abgedeckt sind oder nicht. Wenn dies interessant klingt, finden Sie hier einen Blog-Beitrag mit allen technischen Details.

Wenn Sie keinen Knoten verwenden, können Sie unabhängig vom Defacto-Unit-Test-Framework für die Sprache (jUnit, cucumber / capybara usw.) die Unterstützung für das Hochfahren von Servern in der lokalen Testumgebung und das Ausführen der HTTP-Abfragen überprüfen. Wenn es sich um ein großes Projekt handelt, wird sich der Aufwand für automatisierte API-Tests und kontinuierliche Integration schnell auszahlen.

Hoffentlich hilft das.


2

Runscope ist ein Cloud-basierter Dienst, der Web-APIs mithilfe einer Reihe von Tests überwachen kann. Tests können über parametrisierte Web-Hooks geplant und / oder ausgeführt werden. Tests können auch von Rechenzentren auf der ganzen Welt ausgeführt werden, um sicherzustellen, dass die Antwortzeiten für den globalen Kundenstamm akzeptabel sind.

Die kostenlose Stufe von Runscope unterstützt bis zu 10.000 Anfragen pro Monat.

Haftungsausschluss: Ich bin ein Entwickleranwalt für Runscope.


1

Ich habe viele Automatisierungsfälle basierend auf REST Assured implementiert, einem Jave-DSL zum Testen eines erholsamen 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 einige Probleme mit der kostenlosen Version. Außerdem sind die Fälle in XML-Dateien, die schwer zu erweitern und wiederzuverwenden sind, einfach mag ich nicht



0

API-Testautomatisierung, bis zu einmal pro Minute, ist ein Dienst, der über die RightAPI verfügbar ist . Sie erstellen Ihre Testszenarien und führen sie aus. Sobald diese Tests das tun, was Sie von ihnen erwarten, können Sie sie planen. Tests können für Szenarien, die eine Authentifizierung erfordern, miteinander verkettet werden. Sie können beispielsweise einen Test durchführen lassen, der eine OAuth-Anforderung an Twitter sendet, und ein freigegebenes Token erstellen, das dann von jedem anderen Test verwendet werden kann. An Tests können auch Validierungskriterien angehängt werden, um http-Statuscodes sicherzustellen, oder sogar eine detaillierte Überprüfung der Antworten mithilfe von Javascript oder Schemaüberprüfung. Sobald Tests geplant sind, können Sie durch Warnungen benachrichtigt werden, sobald ein bestimmter Test die Validierung nicht besteht oder sich für die Antwortzeit oder die Antwortgröße außerhalb der festgelegten Bereiche verhält.


Link scheint unterbrochen zu sein.
Rao

0

Ich habe TestNG- und Apache-HTTP-Klassen verwendet, um mein eigenes REST-API-Testframework zu erstellen. Ich habe dieses Konzept entwickelt, nachdem ich zwei Jahre in Selen gearbeitet hatte.

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.