it-swarm.com.de

Automatisiertes Testen für REST Api

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.

78
user1492422

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.


  • Suite 1 - Testen jedes Dienstes isoliert
    • Verspotten Sie alle Peer-Dienste, deren API von restito abhängt. Andere Alternativen umfassen Rest-Driver , Wiremock und Betamax .
    • Testet den Dienst, den wir testen, und die Mocks werden alle in einer einzigen JVM ausgeführt
    • Startet den Dienst in Jetty

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

  • Peer-Dienste werden simuliert, sodass Sie keine komplizierten Dateneinstellungen vornehmen müssen. Vor jedem Test legen Sie einfach restito fest, um zu definieren, wie sich Peerservices verhalten sollen, genau wie Sie es bei Klassen in Einzeltests mit Mockito tun würden. 
  • Sie können die verspotteten Peer-Dienste fragen, ob sie angerufen wurden. Sie können diese Zusicherungen mit echten Peer-Diensten nicht so einfach durchführen.
  • Die Suite ist superschnell, da nachgeahmte Dienste vorab eingespeicherte In-Memory-Antworten liefern. So können wir eine gute Abdeckung erreichen, ohne dass die Suite ein Alter zum Ausführen braucht. 
  • Die Suite ist zuverlässig und wiederholbar, da sie in ihrer eigenen JVM isoliert ist. Sie brauchen sich also keine Sorgen zu machen, dass sich andere Suiten/Personen in einer gemeinsam genutzten Umgebung zur selben Zeit verstecken, in der die Suite ausgeführt wird, und dass Tests fehlschlagen.

  • Suite 2 - ganzes Ende bis zum Ende
    • Suite läuft mit einer vollständigen Umgebung, die auf mehreren Computern installiert ist 
    • In Tomcat in einer Umgebung implementierte API
    • Peer-Services sind echte "Live-Implementierungen" 

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. 


35
theon

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();
25
chx007

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

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.

2
Darren

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.

2
Darrel Miller

Sie können auch die Rest Assured-Bibliothek verwenden. Eine Demo mit Beispielskript finden Sie unter http://artoftesting.com/automationTesting/restAPIAutomationGetRequest.html

1
Kuldeep Rana

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

1
Max Shen

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.

0
Roger

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.

0
Karthic.K