¿Cuál es el enfoque correcto para las pruebas de integración de una API construida en ASP.NET MVC?

Estoy creando una API que usa OAuth2. Probé con éxito todas las piezas individuales, pero ahora necesito hacer algunas pruebas de integración. Básicamente, quiero poder inspeccionar las respuestas http del servidor para asegurarme de que todo funcione correctamente. Idealmente, me gustaría poder poner en marcha el servidor de desarrollo web en Visual Studio para alojar el sitio y luego hacerle un montón de solicitudes e inspeccionar los resultados.

¿Cuál es el mejor enfoque para hacer esto y qué herramientas debería usar?

preguntado el 16 de mayo de 11 a las 18:05

2 Respuestas

Le recomendaría que implemente su aplicación en un servidor de ensayo (tal vez incluso como parte del proceso de compilación para que esto sea una acción de clic de un solo botón) y luego active las solicitudes del cliente HTTP contra este servidor, de la misma manera que un cliente .NET real se supone que usa tu API.

contestado el 16 de mayo de 11 a las 22:05

Cree un servidor de integración continua

  1. instalar TeamCity
  2. instalar Ruby
  3. instalar Albacora

Haga que un script rake haga lo siguiente: 1. extraiga archivos del control de código fuente 2. compile localmente 3. implemente api en iis locales 4. ejecute pruebas de integración contra api localhost

Esto empezó a sonar familiar. Ver aquí

Aquí hay un ejemplo de mis pruebas de integración de API. Avísame si quieres más detalles.

Estoy usando mspec.

Lo ejecuto aganst localhost, nuestro servidor de ensayo y nuestro servidor de producción (un conjunto limitado de pruebas) para asegurarme de que todas las conexiones http estén funcionando.

public class _GET_no_criteria : specs_for_endpoint_test
{
    Establish context = () =>
    {
        Uri = C.Endpoint;
        Querystring = "";
        ExecuteJsonGetRequest();

        SetValidId();
    };

    It should_have_status_code_200_ok =()=>
        IsHttp_200OK();

    It should_have_categories = () =>
    {
        responseText.ShouldNotBeEmpty();
        PutsAll(responseText);
    };
}

De la clase base

 public static void ExecuteGetRequest(string contentType)
        {
            httpcontext = HttpContext.Current;
            request = (HttpWebRequest)WebRequest.Create(BaseUri + Uri + Querystring);
            request.Method = C.HTTP_GET;          
            request.ContentType = contentType;
            request.Headers[C.AUTHORIZATION] = token;

            // GetResponse reaises an exception on http status code 400
            // We can pull response out of the exception and continue on our way            
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                response = (HttpWebResponse) ex.Response;
            }

            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                responseText = reader.ReadToEnd();
                reader.Close();
            } 
        }

        public static void ExecuteJsonGetRequest()
        {
            ExecuteGetRequest(C.CONTENT_JSON);
        }

Respondido 13 Abr '17, 15:04

Nunca he usado mspec. ¿Maneja la implementación automática del sitio o la activación de un servidor web o algo así? ¿O sigue siendo un proceso manual? - Miqueas

mspec es solo una envoltura de nunit. no es realmente necesario. No estaba seguro de si tu pregunta era sobre cómo hacer una prueba unitaria. si está más interesado en el proceso de automatización, podría publicar una respuesta diferente. Básicamente, la API se implementa en una URL en el servidor de compilación y las pruebas unitarias se pueden ejecutar en el host local. - Jason Watts

Definitivamente aprecio la respuesta y voy a revisar mspec, pero estoy buscando obtener más información sobre cómo automatizar la implementación y ejecutar pruebas en su contra. - Miqueas

Tengo un marco que ayuda a probar las solicitudes GET, POST, PUT y DELETE. Es una base de llamadas de la que heredan todas las pruebas de integración (pruebas unitarias). - Jason Watts

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.