Pregunta

Estoy intentando integrar la ejecución de pruebas Fitnesse desde MSBuild en mi compilación nocturna en TFS.

En un intento por hacerlo autónomo, me gustaría iniciar el servidor seleniumRC solo cuando sea necesario desde el estado físico.

He visto que hay un "Dispositivo de línea de comando", pero está escrito en Java. ¿Puedo usarlo?

¿Fue útil?

Solución

Creo que quizás puedas hacerlo.Puede llamar a cualquier proceso fácilmente en MSBuild usando el tarea.Sin embargo, el problema al hacer esto es que la tarea ejecutiva esperará a que finalice el proceso de Selinium antes de continuar, lo cual no es el comportamiento que usted desea.Desea ejecutar el proceso, mantenerlo ejecutándose durante la compilación y luego eliminarlo cuando finalice la compilación.

Por lo tanto, creo que probablemente necesitará crear una tarea de MSBuild personalizada para hacer esto.Consulte la siguiente publicación para ver un ejemplo de tareas que alguien ha creado y que se ejecutarán de forma asincrónica y devolverán el control al script de compilación:

http://blog.eleutian.com/2007/03/01/AsyncExecMsBuildTask.aspx

Y para ver un ejemplo de cómo llamar a un programa Java desde MSBuild (pero en este caso de forma sincrónica), eche un vistazo a mi tarea que llama Hormiga de MSBuild aquí

http://teamprise.com/products/build/

Como parte de su tarea de MSBuild, querrá generar la identificación del proceso que creó en una propiedad de salida para que al final de su script de compilación pueda llamar a otra tarea de MSBuild personalizada que finalice el proceso.Puede hacer esto buscando la identificación del proceso pasada como una variable en MSBuild y luego llamando Proceso.Matar método es decir

Process process = Process.GetProcessById(ProcessId);
process.Kill();

Dicho esto, deberá tener cuidado para asegurarse de que su tarea de eliminación siempre se ejecute en MSBuild asegurándose de que se incluya durante las rutas de error, etc., en la compilación.Probablemente podría hacer las cosas un poco más resistentes haciendo que la tarea inicial de Selenium RC busque otros procesos de SeleniumRC y eliminándolos antes de iniciar uno nuevo; de esa manera, si un proceso no se cierra correctamente por alguna razón, solo se ejecutará hasta la próxima construcción.

De todos modos, mi respuesta parece mucho trabajo, así que espero que a alguien se le ocurra una manera más fácil.Es posible que pueda crear el proceso seleniumRC en el inicio del conjunto de pruebas de las pruebas de FitNesse y eliminarlo en el desmontaje del conjunto, o puede escribir una tarea personalizada que amplíe sus tareas de corredor de FitNesse y active seleiniumRC de forma asincrónica antes. ejecutar el proceso de prueba y luego finalizarlo.

Buena suerte,

Martín.

Otros consejos

¡Gracias por tus respuestas!

Así es como lo he hecho hasta ahora.

Hice un dispositivo de ajuste (muy simple) que inicia un proceso con la línea de comando proporcionada, en mi caso startSelenium.bat.El dispositivo devuelve el ProcessID para que pueda almacenarlo en mi contexto de fitness y cerrar esa sesión más tarde.

Ahora puedo crear una página SuiteSetUp en mi prueba de condición física que se ve así.

|EjecutarCommandFixture|

|Línea de comando|¿Ejecutar comando?|

|C:\Proyectos...\startSeleniumRC.bat|>>seleniumprocess|

y un SuiteTearDown como este

|EjecutarCommandFixture|

| ProcessID | StopCommand? |

Funciona para mi.Ningún RC de selenio se inicia a petición de mi prueba de aptitud física.

¿Qué tal escribir una aplicación .NET simple que realice un Process.Start ("línea de comando selenumRC") que se ejecuta mediante el script de compilación?

Si no está demasiado lejos en la ruta del Selenio;¿Puedo sugerirle que consulte herramientas de automatización de navegadores .NET similares?específicamente WatiN o ArtOfTest.Las "pilas" en estos son completamente .NET, por lo que ejecutarlas en diferentes máquinas es mucho más fácil.

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