Me doy cuenta de que esta es una tarea no trivial, pero ¿hay alguna manera de probar la regresión del diseño y el diseño de una aplicación web? He encontrado que es sencillo para la prueba unitaria y la funcionalidad de prueba de regresión, tanto del lado del servidor como del lado del cliente. Sin embargo, un problema frustrante con el que me he encontrado son los cambios de CSS realizados para solucionar un problema de diseño que rompe el diseño y el estilo en una página diferente. La única forma en que sé cómo detectar esto es ver manualmente cada página en una aplicación y compararla con mis propias expectativas, pero obviamente esto puede ser oneroso y costoso cuando una aplicación puede tener docenas de páginas. ¿Ha habido alguna investigación que utilice el procesamiento de imágenes u otras técnicas para detectar este tipo de problemas automáticamente?Pruebas de regresión para estilo y diseño de aplicaciones web
Respuesta
En realidad, una de las gemas escondidas de Selenium es que puedes usarla para tomar capturas de pantalla del navegador. Luego, utilizando una técnica como se describe aquí (http://www.bryancook.net/2009/10/find-differences-between-images-c.html) puede resaltar las diferencias entre las instantáneas anteriores.
Este ejemplo muestra cómo tomar una captura de pantalla de la página de inicio y luego crear una imagen diferente. Con un poco de retoque adicional, puede usar la misma técnica para contar los píxeles que son diferentes.
[Test]
public void CompareHomePageToPrevious()
{
string fileName = Path.Combine(Environment.CurrentDirectory,"homepage.bmp");
var selenium = new DefaultSelenium("localhost",4444, "*chrome", "http://mywebsite");
selenium.Start();
selenium.Open("/");
selenium.CaptureEntirePageScreenshot(fileName, "");
// load current and previous captures
var current = new Bitmap(filename);
var previous = new Bitmap(_previousHomepageImage);
// find all pixels that are the same and make them pink
Bitmap diff = ImageTool.GetDifferenceImage(current,previous,Color.Pink);
diff.MakeTransparent(Color.Pink);
// save the image for viewing
// or count the number of different
}
El selenio es una opción muy interesante porque es multiplataforma y multi-navegador, lo que significa que puede capturar pantallas de diferentes navegadores. Puede utilizar esta técnica para comparar instantáneas entre compilaciones o para comparar entre navegadores.
Supongo que podría generar una captura "ideal" de cada página en su aplicación web para usar como referencia.
A continuación, genere una nueva toma de cada página después de una actualización CSS y compárela con las anteriores. Una comparación 1: 1 debería estar bien si se asegura de mantener siempre la misma resolución, etc.
Incluso podría hacerlo para que pueda decirle que si la página difiere, la otra página es realmente "mejor" que el ejemplo y para usar el 'otro' como el ejemplo para las próximas ejecuciones.
De esta manera, cuando arreglas algo, puedes ver la diferencia para una página y marcarla como mejor, y luego corregir un error en otra página mientras te aseguras de no retroceder el error que estabas tratando de corregir en primer lugar.
De hecho, vi soluciones así en mi empresa. Fue desarrollado en AutoIt, y en general estaba haciendo lo que describiste. En cuanto a decir cuál es la diferencia, después de determinar que existe una diferencia, estaba dividiendo la página en 4 áreas y comprobando si en esas áreas hay una diferencia. Lo estaba haciendo recursivamente hasta algún umbral. Al final, obtendrás un área bastante precisa donde hay una diferencia. Además, se proporciona una captura de pantalla con el área marcada. – yoosiba
Eso lo haría aún más útil :) Creo que la implementación real del algoritmo diff es bastante trivial. – Zsub
Supongo que podría usar http://code.google.com/p/browsershots/wiki/ShotFactoryStandalone (utilizado por http://browsershots.org/) en lugar de AutoIt. No he intentado aunque – user123444555621
Debe consultar Web Consistency Testing como un enfoque para hacer sus pruebas de regresión.
Usamos esas técnicas para impulsar Mogotest, que es un servicio alojado para hacer regresiones visuales automáticas y pruebas entre navegadores.
En los años posteriores a la publicación de esta respuesta, cerré el servicio de Mogotest. La mención aquí se deja como un artefacto histórico para indicar que las técnicas se usaron en un sistema de producción y no solo en forrajes académicos.
estos enlaces están borked. arregle los enlaces o elimine la respuesta – activedecay
Si se está desarrollando en rubí, eche un vistazo a la gema rspec-page-regression. Es un complemento RSpec que le permite comparar las instantáneas de página solicitadas con una imagen esperada. Funciona con Poltergeist, que es un controlador Capybara que usa PhantomJS y admite instantáneas de página de representación.
Rspec páginas regresión proporciona una matcher RSpec que le permite hacer cosas como
context "user page" do
before(:each) do
visit user_path
end
it { page.should match_expected }
context "popup help" do
before(:each) do
click_button "Help"
end
it { page.should match_expected }
end
end
Y proporciona un mecanismo para gestionar las imágenes de expectativas.
Descargo de responsabilidad: soy el autor de la gema.
Hay una manera de probar el diseño de una aplicación web utilizando Galen Framework. Esta herramienta tiene su propio lenguaje y es muy fácil de aprender y entender. Se basa en Selenium y puede ejecutar la prueba en Selenium Grid, Sauce Labs si desea probar su aplicación en diferentes navegadores.
Esta herramienta obtiene la ubicación del elemento especificado en la página y las verifica relativamente entre sí.
Ejemplo: si desea comprobar que panel de menú está por debajo de la cabecera y se extiende a la anchura de un navegador y tiene altura de 50 píxeles, puede hacerlo de esta manera:
menu
below: header 5px
width: 100% of screen/width
height: 50px
Esta herramienta puede ser también utilizado para probar diseños receptivos.
Puede encontrar documentación completa en el sitio oficial http://galenframework.com
La mejor parte es que usted puede incluso crear pruebas JAVA. Galen JavaScript API también está disponible junto con los proyectos de muestra en github.
De nuevo, la (s) prueba (s) escrita (s) una vez se pueden usar en múltiples fases del ciclo de vida de la aplicación.
- 1. Pruebas de regresión en C++
- 2. Pruebas de regresión para procedimientos almacenados de T-SQL
- 3. Herramientas de automatización de pruebas de código abierto para pruebas funcionales de aplicaciones web
- 4. ¿Diseño MVC para aplicaciones de consola?
- 5. Diseño de software y diseño de servicios web
- 6. ¿Las pruebas de regresión son el conjunto de pruebas completo o una muestra de pruebas?
- 7. pasos del proyecto de diseño de aplicaciones web/programación
- 8. Mejor manera de comenzar a aprender Diseño de aplicaciones web
- 9. Pruebas unitarias en aplicaciones web que usan bases de datos
- 10. "Interfaz web" para pruebas PHPUnit?
- 11. Pruebas de aplicaciones web con FitNesse y soapUI: ¿alguna práctica recomendada sobre administración y mantenimiento de pruebas?
- 12. ¿Hay una guía de estilo para desarrollar aplicaciones SWT?
- 13. Guardar y restaurar aplicaciones y diseño
- 14. ¿Qué herramientas se utilizan para escribir pruebas de aceptación para aplicaciones web Python (django)?
- 15. mercurial: ejecutar pruebas de regresión remotas automáticamente en cada confirmación
- 16. Aplicaciones Silverlight de estilo Metro
- 17. Mejores recursos para pruebas de UIAutomation para aplicaciones de iOS
- 18. ancho de banda y simulador de tráfico para aplicaciones web?
- 19. estilo ICS en aplicaciones Froyo y Gingerbread
- 20. ¿Qué herramientas usa para las pruebas de seguridad de aplicaciones web?
- 21. Pruebas de rendimiento Aplicaciones Flex
- 22. Diseño de aplicaciones de escritorio
- 23. la línea delgada entre aplicaciones web y aplicaciones de escritorio
- 24. Pruebas unitarias Aplicaciones Dababase
- 25. aplicaciones web para iPhone y tipos de entradas específicos
- 26. ¿Fuentes de iconos/imágenes buenos y gratuitos para aplicaciones y aplicaciones web con licencia permisiva?
- 27. Framework de servidor web para aplicaciones web de Python
- 28. Uso de SpecFlow para pruebas de regresión de extremo a extremo
- 29. Diseño de aplicaciones generales (IntentService/ContentProvider/AsyncTask)
- 30. Despliegue automatizado para aplicaciones web?
+1, esto sería útil, pero (si lo haces bien) con la gran mayoría de los cambios, romperás todas las páginas, o ninguna de ellas. – thirtydot
Sí, pero no tiene que verificar después de cada cambio, por supuesto. – Zsub