Pregunta

Yo sé ¿Cómo para ejecutar las pruebas funcionales / de integración en los carriles, esta pregunta se refiere a las mejores prácticas. Digamos que la autorización se realiza utilizando cuatro funciones de usuarios distintos:

  • básica
  • editor
  • admin
  • Super

Esto significa que para cada acción hay hasta cinco comportamientos diferentes posible (4 funciones + no autenticado / anónimo). Uno de los enfoques que he tomado es poner a prueba todos los papeles en cada acción, por ejemplo:

  • test_edit_by_anonymous_user
  • test_edit_by_basic_user
  • test_edit_by_editor_user
  • test_edit_by_admin_user
  • test_edit_by_super_user

Pero esto obviamente lleva a un mucho de pruebas (cada acción del controlador en el sitio necesita realmente para ser probado cinco veces). El enfoque contrario sería poner a prueba el mecanismo de autorización en forma aislada y luego autenticarse como súper antes de probar cada acción (de la configuración), y sólo una versión de prueba de cada página.

He intentado varios enfoques con diferentes grados de especificidad, pero no han sido completamente satisfecho con cualquier cosa. Me siento más cómodo cuando estoy probando más casos, pero la cantidad de código de prueba y dificultad de la abstracción ha sido un desvío. ¿Alguien tiene un acercamiento a este problema que están satisfechos con?

¿Fue útil?

Solución

En realidad depende de cómo se haya configurado el código para la comprobación de la autorización y cómo se prueba para él en acciones. Les puedo decir lo que hacemos como un ejemplo. Tenemos papeles como lo hace, y algunas páginas que requieren un inicio de sesión, algunos que requieren un papel, y algunos que tienen una salida diferente, basado en papel. Probamos cada tipo un poco diferente.

En primer lugar, ponemos a prueba de autorización y acceso al sitio por separado.

Además, hemos creado filtros para las acciones que requieren que el usuario ha iniciado sesión, y luego otros para exigir un cierto papel. Por ejemplo check_admin, check_account_owner, etc. Entonces podemos probar que los filtros funcionan por su cuenta.

A continuación, añadir los controles en el controlador comprueba que los filtros correctos están siendo llamados. Utilizamos la debería y escribimos algunas extensiones fáciles para que podamos añadir controles como:

should_filter_before_with :check_admin, :new

De esta manera estamos probando lo que necesita ser probado y no más.

Ahora, para las acciones más complejas que hacen lógica diferente dependiendo de papel, sí que las realiza esas acciones para cada papel que contiene la lógica especial. No escribimos pruebas para papeles en que la acción que va a ser filtrada o son superseries de otros papeles. Por ejemplo, si la acción añade más campos de un formulario si usted es un administrador, que prueba no administradores y administrador. No hacemos pruebas de administración y super administrador desde nuestro código para la comprobación de papel entiende que super-administradores son los administradores.

Además, para las plantillas que contienen la lógica para mostrar sólo ciertos artículos para ciertos papeles, tratamos y nos movemos ese código en ayudantes, o si común, como una barra de herramientas de administración, en los parciales. A continuación, podemos probar a los solos y no en todas las acciones que los incluye.

En resumen, la prueba sólo lo que necesita para una acción determinada. Al igual que usted no probar Rieles internos en las pruebas unitarias, si se escribe código común para las comprobaciones de funciones y probar que no es necesario para probar de nuevo en cada acción.

Otros consejos

En algunos casos se le puede pedir para probar todas las posibles funciones y niveles de autorización contra diferentes acciones - al igual que, cuando se trabaja para un banco, por ejemplo :) En este caso, tiene sentido tomar un enfoque más dinámico de la prueba. En lugar de definir cada caso de prueba, debería generar todas las combinaciones.

Hace

Unos años Ryan Davis hizo una presentación sobre la "matriz de prueba funcional", que es parte de ZenTest. Dr. . Nic hizo una valoración crítica, y al final del post encontrará enlaces actualizados en los comentarios. Esta solución fue diseñada para exactamente el problema que usted describe. También podría rodar su propia solución, mediante la ejecución de pruebas dentro de bucles anidados, por ejemplo -. La idea es básicamente el mismo

Considere una aplicación que está teniendo 2 funciones de administración y de sólo lectura Realizar pruebas a continuación:

  1. iniciar sesión con modo de sólo lectura y realizar alguna acción de cierre de sesión. Ahora mismo sistema de inicio de sesión y el mismo navegador con función de administrador y ver el comportamiento del sistema. Y viceversa.
  2. iniciar sesión con el rol de administrador y copiar el valor de la cookie y desconectarse. Ahora sesión con papel normal y editar el valor de la cookie mediante el uso de herramientas cookimanager + o editthiscookie. Y si la aplicación está funcionando como se espera, entonces es un problema. Repita el caso de prueba 2 del mismo equipo mismo navegador, misma máquina navegador diferente, diferente de la máquina
  3. si se trata de la aplicación de cliente pesado a continuación, realizar ingeniería inversa y analizar el código. Trate de cambiar la lógica de la gestión de autorización (alguien tiene que tener la experiencia de codificación para esto) recompilar el código y repita la prueba 2-3.
  4. usando la herramienta de interrupción de proxy como el conjunto de eructar analizar obtener / solicitud posterior, tanto para los papeles.

Ahora basado en el tipo de papel disponibles para su aplicación decidir casos de prueba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top