Pruebas automatizadas para REST Api [cerrado]

84

Me gustaría escribir un conjunto de pruebas automatizado para una API REST. A medida que completamos nuevos servicios, nos gustaría verificar para asegurarnos de que todos los servicios creados anteriormente estén funcionando como se esperaba. ¿Alguna sugerencia sobre las mejores herramientas a utilizar para lograr esto? Sé que existen herramientas como Apigee que le permiten probar 1 servicio a la vez, pero nos gustaría encontrar una forma de probar todos los servicios con el clic de un botón.

Prasad
fuente
2
Podrías probar vREST . Tiene pruebas unitarias y simulacros.
Jangid
1
JMeter es la mejor herramienta para las pruebas de API REST: agregando este comentario para las personas que buscan algunos pasos detallados para probar una API REST utilizando JMeter. testautomationguru.com/how-to-test-rest-api-using-jmeter
vins
Nada supera a FRISBY - Simplemente la herramienta perfecta y más poderosa para las pruebas de API REST
Piyush Chordia
2
JMeter es exagerado, sin mencionar que tiene una interfaz de usuario horrible, solo para pruebas funcionales básicas de una API REST. Está diseñado para pruebas de rendimiento / carga.
Kevin M
2
JMeter se centra más en las pruebas de carga, tal vez debería consultar 12 Great Web Service Testing Tools para encontrar la mejor opción. Algunas de las herramientas de esta lista, por ejemplo SOAPUI o HttpMaster , tienen un soporte de automatización bastante decente para los puntos finales de la API REST.
Joxi

Respuestas:

36

En mi trabajo, hemos reunido recientemente un par de suites de prueba escritas en Java para probar algunas API RESTful que construimos. Nuestros servicios pueden invocar otras API RESTful de las que dependen. Lo dividimos en dos suites.


  • Suite 1: prueba de cada servicio de forma aislada
    • Simula cualquier servicio de pares de la API depende del uso de restito . Otras alternativas incluyen descanso del conductor , wiremock y Betamax .
    • Prueba el servicio que estamos probando y todos los simulacros se ejecutan en una sola JVM
    • Lanza el servicio en Jetty

Definitivamente recomendaría hacer esto. Nos ha funcionado muy bien. Las principales ventajas son:

  • Los servicios de pares se burlan, por lo que no es necesario realizar ninguna configuración de datos complicada. Antes de cada prueba, simplemente use restito para definir cómo desea que se comporten los servicios de pares, tal como lo haría con las clases en las pruebas unitarias con Mockito.
  • Puede preguntar a los servicios de pares simulados si fueron llamados. No puede hacer estas afirmaciones tan fácilmente con servicios de pares reales.
  • La suite es súper rápida ya que los servicios simulados brindan respuestas en memoria predefinidas. Para que podamos obtener una buena cobertura sin que la suite tarde una eternidad en ejecutarse.
  • La suite es confiable y repetible ya que está aislada en su propia JVM, por lo que no hay necesidad de preocuparse de que otras suites / personas jueguen con un entorno compartido al mismo tiempo que la suite se ejecuta y hace que las pruebas fallen.

  • Suite 2 - Completo de extremo a extremo
    • Suite se ejecuta en un entorno completo implementado en varias máquinas.
    • API implementada en Tomcat en el entorno
    • Los servicios de pares son implementaciones completas reales 'como en vivo'

Esta suite requiere que realicemos la configuración de datos en servicios de pares, lo que significa que las pruebas generalmente toman más tiempo para escribir. En la medida de lo posible, utilizamos clientes REST para realizar la configuración de datos en servicios de pares.

Las pruebas en esta suite suelen tardar más en redactarse, por lo que colocamos la mayor parte de nuestra cobertura en la Suite 1. Dicho esto, todavía hay un valor claro en esta suite, ya que nuestras simulaciones en la Suite 1 pueden no comportarse como los servicios reales.


theon
fuente
25

Frisby es un marco de prueba de API REST construido en node.js y Jasmine que hace que probar los puntos finales de API sea fácil, rápido y divertido. http://frisbyjs.com

Ejemplo:

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();
chx007
fuente
Voté este artículo, lo usé en mi trabajo diario y ahora todos los frisbies se están tirando. Lo mismo he compartido en mi blog: cubicrace.com/2016/04/frisby-rest-api-automation-framework.html
Piyush Chordia
2
Frisby ha muerto github.com/vlucas/frisby/issues/347
Ernst Ernst
Frisby es fácil de comenzar y lo suficientemente potente como para probar incluso los flujos de API avanzados. Lamentablemente, la salida del informe deja mucho que desear. Los mensajes de error cuando la API está fallando es casi inútil. Lo cual es extraño dado que el resultado cuando ejecuta manualmente las pruebas es bastante bueno. Es una pena.
Kasper Holdum
1
En caso de que alguien tropiece con esto de la manera que yo lo hice, Frisby no parece estar muerto todavía, como se señaló anteriormente. El git tiene actualizaciones recientes. github.com/vlucas/frisby
S.Huston
21

Colaboré con uno de mis compañeros de trabajo para iniciar el marco PyRestTest por este motivo: https://github.com/svanoort/pyresttest

Aunque puede trabajar con las pruebas en Python, el formato de prueba normal es YAML.

Conjunto de pruebas de muestra para una aplicación REST básica: verifica que las API respondan correctamente, verificando los códigos de estado HTTP, aunque también puede hacer que examinen los cuerpos de respuesta:

---
- 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}
BobMcGee
fuente
Con la autenticación, agrega a continuación a cada prueba referida desde github.com/svanoort/pyresttest/blob/master/quickstart.md con encabezados a continuación; - auth_username: "foobar" - auth_password: "secreto" - esperado_status: [200]
agfe2
2

Uno de los problemas de realizar pruebas automatizadas para las API es que muchas de las herramientas requieren que tenga el servidor de API en funcionamiento antes de ejecutar su conjunto de pruebas. Puede ser una ventaja real tener un marco de pruebas unitarias que sea capaz de ejecutar y consultar las API en un entorno de prueba totalmente automatizado.

Una opción que es buena para las API implementadas con Node.JS / Express es usar mocha para pruebas automatizadas. Además de las pruebas unitarias, es fácil escribir pruebas funcionales contra las API, separadas en diferentes conjuntos de pruebas. Puede iniciar el servidor API automáticamente en el entorno de prueba local y configurar una base de datos de prueba local. Con make, npm y un servidor de compilación, puede crear un destino "make test" y una compilación incremental que ejecutará todo el conjunto de pruebas cada vez que se envíe un fragmento de código a su repositorio. Para el desarrollador verdaderamente exigente, incluso generará un buen informe de cobertura de código HTML que le mostrará qué partes de su código base están cubiertas por pruebas o no. Si esto suena interesante, aquí hay una publicación de blog que proporciona todos los detalles técnicos.

Si no está utilizando el nodo, entonces cualquiera que sea el marco de prueba unitario de facto para el idioma (jUnit, pepino / capibara, etc.), observe su soporte para activar servidores en el entorno de prueba local y ejecutar las consultas HTTP. Si se trata de un proyecto grande, el esfuerzo por obtener pruebas API automatizadas y un trabajo de integración continuo dará sus frutos con bastante rapidez.

Espero que ayude.

Darren
fuente
2

Runscope es un servicio basado en la nube que puede monitorear las API web mediante un conjunto de pruebas. Las pruebas se pueden programar y / o ejecutar mediante web hooks parametrizados. Las pruebas también se pueden ejecutar desde centros de datos de todo el mundo para garantizar que los tiempos de respuesta sean aceptables para la base de clientes global.

El nivel gratuito de Runscope admite hasta 10.000 solicitudes por mes.

Descargo de responsabilidad: soy un defensor de los desarrolladores de Runscope.

Darrel Miller
fuente
0

La automatización de pruebas de API, hasta una vez por minuto, es un servicio disponible a través de theRightAPI . Usted crea sus escenarios de prueba y los ejecuta. Una vez que esas pruebas hacen lo que espera que hagan, puede programarlas. Las pruebas se pueden 'encadenar' juntas para escenarios que requieren autenticación. Por ejemplo, puede tener una prueba que realice una solicitud OAuth a Twitter y cree un token compartido que luego pueda ser utilizado por cualquier otra prueba. Las pruebas también pueden tener criterios de validación adjuntos para garantizar códigos de estado http, o incluso una inspección detallada de las respuestas utilizando javascript o validación de esquema. Una vez que se programan las pruebas, puede hacer que las alertas le notifiquen tan pronto como una prueba en particular falle la validación o se comporte fuera de los rangos establecidos para el tiempo de respuesta o el tamaño de la respuesta.

Roger
fuente
El enlace parece estar roto.
Rao
0

He usado las clases HTTP TestNG y Apache para construir mi propio marco de prueba de API REST, desarrollé este concepto después de trabajar en Selenium durante dos años.

Todo es igual, excepto que debe usar clases HTTP de Apache en lugar de clases de Selenium.

pruébalo, es realmente lindo y bueno, tienes todo el poder para personalizar tu marco de prueba a todas tus posibilidades.

Karthic.K
fuente