unit test net mvc ejemplo asp asp.net-mvc testing ab-testing

test - ¿Cuál es la mejor/más limpia forma de implementar pruebas AB en asp.net mvc?



unit testing mvc controller (6)

¿Cuál es la mejor y más limpia forma de implementar pruebas AB en asp.net mvc? Es decir, cuando realizamos nuevos cambios en un sitio web asp.net mvc, queremos probar los nuevos html / css / js con un determinado subconjunto de visitantes (definidos en cookie, id de inicio de sesión, etc.) y luego analizar algunas métricas ( tiempo de respuesta de página, número de páginas visitadas, $$$ en ventas, etc.) después para medir el nivel de éxito de los cambios.

Estoy buscando una manera limpia de implementar una forma de elegir qué vista (html / css / js, etc.) renderizar usando asp.net mvc.


¿ Experimentos de contenido de Google ? Es una solución basada en Javascript que no requiere nada de tu back-end.

  1. Incluyes el Javascript de Google en tu página
  2. La secuencia de comandos sustituye aleatoriamente los elementos en su página según lo definido por su prueba A / B
  3. El sitio de Google muestra un buen desglose de los resultados ...

Creo que no hay una solución lista para usar para esto y tendrás que improvisar.

Intenta anular tu funcionalidad actual en puntos bien definidos sin romperla. Dibuje explícitamente un borde donde vivan su código regular y el código de prueba AB.

La inversión del principio de control también podría ayudar mucho aquí (es decir, la fábrica controladora podría proporcionar un controlador derivado en lugar del original). Para vistas y vistas parciales, puede cambiar viewengine para que intente buscar ''MyPartialViewAB.ascx'' en lugar de ''MyPartialView.ascx''.

Y podría ser una buena idea echar un vistazo a los contadores de rendimiento (en caso de que no lo haya hecho).


Hay un marco de prueba A / B específicamente para ASP.NET MVC. Este es un software de código abierto que escribí cuando, al igual que usted, no encontró una herramienta gratuita que funciona bien con ASP.NET MVC y no requiere mucha configuración.


Si está utilizando el motor de vista de chispa, probablemente podría hacerlo con una variación del filtro de tema ( http://sparkviewengine.com/documentation/viewlocations#Extendingfilepatternswithdescriptorfilters ). Para cada nuevo visitante al sitio, determine si desea que vean la versión existente o nueva del sitio y configure una cookie. Cree un filtro de descriptor que busque la presencia de la cookie y modifique la ubicación de la vista para buscar en la carpeta que contiene las vistas modificadas. Si existe una vista alternativa, el motor Spark lo renderizará automáticamente en lugar de la vista "normal", de lo contrario generará la vista normal.

Si está utilizando el WFVE normal, la forma más sencilla de gestionar esto sería definir una carpeta en Vistas donde vivan sus alternativas de visualización. Cuando desee proporcionar una vista alternativa, colóquela en una ubicación que coincida con su posición dentro de la carpeta de Vistas normal pero enraizada en la carpeta de alternativas, por ejemplo, para proporcionar una alternativa a Views / Users / login.aspx coloque su nueva vista en Views / Alternative / Users / login.aspx.

Con una convención establecida para ubicar sus vistas alternativas, puede extender el WebFormViewEngine y sobrecargar CreatePartialView / CreateView para inspeccionar algún aspecto del ControllerContext para determinar si se renderiza la vista predeterminada o sobrecargada y se modifica la ruta, por ejemplo, cambiando ... / Vistas / Usuarios / login.aspx a ... / Vistas / Alternativa / Usuarios / login.aspx.


Sugiero que use Modos de visualización para lograr las pruebas A / B.

Pero los modos de visualización solo admiten problemas simples de forma predeterminada.

Si ya implementa Modos de visualización en algún otro escenario. Puedes considerar DisplayModeMatrix (solo google it). Le ayuda a usar modos de visualización más eficientes.

https://www.nuget.org/packages/DisplayModeMatrix/

Con los modos de pantalla puede simplemente eliminar / cambiar el nombre de las vistas después de la prueba A / B para limpiar su proyecto.


Visite FairlyCertain ( http://www.fairtutor.com/fairlycertain/ ) cuando tenga la oportunidad. Es una biblioteca .NET A / B que prácticamente puede incluir en su proyecto y comenzar a escribir pruebas.

A diferencia de las bibliotecas Javascript de Google y VisualWebsiteOptimizer, todo sucede en el servidor para que no sufra ningún rendimiento, experiencia de usuario o problemas de SEO. Lo he usado en mis cosas por un tiempo y funciona bastante bien.