Pregunta

Estoy reuniendo algunas ideas para nuestra plataforma de prueba automatizada y he estado buscando Selenium para el corredor de prueba.

Estoy envolviendo los scripts de Selenium C # grabados en una prueba de MbUnit, que se está activando a través de la tarea de MbUnit NAnt. El cliente de prueba de Selenium se crea de la siguiente manera:

selenium = new DefaultSelenium("host", 4444, "*iexplore", "http://[url]/");

¿Cómo puedo pasar la configuración de host, puerto y url a la prueba para que sus valores puedan controlarse mediante la tarea NAnt?

Por ejemplo, puedo tener múltiples servidores Selenium RC escuchando y quiero usar el mismo código de prueba que pasa en cada dirección del servidor en lugar de incrustar la configuración dentro de las pruebas en sí mismas.

Tengo un enfoque simulado utilizando una tarea de NAnt personalizada que he escrito, pero no es la solución más elegante en este momento y me pregunté si habría una manera más fácil de lograr lo que quiero hacer.

Muchas gracias si alguien puede ayudar.

¿Fue útil?

Solución

Gracias por las respuestas hasta ahora.

Las variables de entorno podrían funcionar, sin embargo, podríamos estar ejecutando pruebas paralelas a través de un único conjunto de prueba, por lo que no quisiera que se sobrescribieran las configuraciones durante la ejecución, lo que podría romper otra prueba. Una línea de pensamiento interesante, sin embargo, gracias, creo que podría usar eso en otras áreas.

Mi solución actual implica una tarea de NAnt personalizada, compilada por encima de la tarea de MbUnit, que me permite especificar la configuración adicional de host, puerto y url como atributos. Luego se guardan como un archivo de configuración dentro del directorio de compilación y luego se leen por los ensamblajes de prueba. Esto se siente un poco " torpe " para mí como mis pruebas necesitan heredar de una clase específica. No está mal, pero me gustaría tener menos dependencias y concentrarme en las pruebas.

¡Tal vez me estoy preocupando demasiado!

Otros consejos

Tengo una clase base para todos los dispositivos de prueba que tiene el siguiente código de configuración:

    [FixtureSetUp]
    public virtual void TestFixtureSetup ()
    {
        BrowserType = (BrowserType) Enum.Parse (typeof (BrowserType),
            System.Configuration.ConfigurationManager.AppSettings["BrowserType"],
            true);
        testMachine = System.Configuration.ConfigurationManager.AppSettings["TestMachine"];
        seleniumPort = int.Parse (System.Configuration.ConfigurationManager.AppSettings["SeleniumPort"],
            System.Globalization.CultureInfo.InvariantCulture);
        seleniumSpeed = System.Configuration.ConfigurationManager.AppSettings["SeleniumSpeed"];
        browserUrl = System.Configuration.ConfigurationManager.AppSettings["BrowserUrl"];
        targetUrl = new Uri (System.Configuration.ConfigurationManager.AppSettings["TargetUrl"]);

        string browserExe;
        switch (BrowserType)
        {
            case BrowserType.InternetExplorer:
                browserExe = "*iexplore";
                break;
            case BrowserType.Firefox:
                browserExe = "*firefox";
                break;

            default:
                throw new NotSupportedException ();
        }

        selenium = new DefaultSelenium (testMachine, seleniumPort, browserExe, browserUrl);
        selenium.Start ();

        System.Console.WriteLine ("Started Selenium session (browser type={0})",
            browserType);

        // sets the speed of execution of GUI commands
        if (false == String.IsNullOrEmpty (seleniumSpeed))
            selenium.SetSpeed (seleniumSpeed);
    }

Luego, simplemente proporciono al corredor de prueba una configuración. expediente:                                                                

Para MSBuild yo uso variables de entorno, las creo en mi configuración de CC.NET y luego estarán disponibles en el script. Creo que esto también funcionaría para ti.

Cada vez que necesito integrarme con una entidad externa usando NAnt, termino usando la tarea ejecutiva o escribiendo una tarea personalizada . Dada la información que publicaste, parece que escribir la tuya sería una buena solución. Sin embargo, dices que no estás contento con ella. ¿Puede explicar un poco por qué no cree que su solución actual sea elegante ?

Actualizar

Sin saber los detalles internos , parece que lo resolviste bastante bien con una tarea personalizada. Por lo que he oído, así es como lo habría hecho.

Tal vez una nueva solución se mostrará a tiempo, pero por ahora, ¡sé ligero contigo mismo!

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