Pergunta

Estou juntando algumas idéias para nossa plataforma de testes automatizados e foram olhando para Selenium para o corredor de teste.

Estou embrulhar os scripts gravados selênio C #, em um teste MbUnit, que está sendo acionado através da tarefa MbUnit NAnt. O cliente de teste de selênio é criado da seguinte forma:

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

Como posso passar as configurações da máquina, porta e URL no teste para que seus valores podem ser controlados via a tarefa NAnt?

Por exemplo, eu posso ter vários servidores Selenium RC ouvindo e eu quero usar o mesmo código de teste passando em cada endereço de servidor em vez de incorporar as configurações dentro dos próprios testes.

Eu tenho uma abordagem zombou-se utilizando uma tarefa NAnt costume que tenho escrito, mas não é a solução mais elegante no presente e eu me perguntava se havia uma maneira mais fácil de realizar o que eu quero fazer.

Muito obrigado se alguém pode ajudar.

Foi útil?

Solução

Obrigado pelas respostas até agora.

As variáveis ??de ambiente poderia funcionar, no entanto, poderíamos estar executando testes paralelos através de um único teste de montagem para que eu não gostaria que as configurações sejam substituídos durante a execução, o que poderia quebrar outro teste. interessante linha de pensamento, porém, obrigado, eu acho que eu poderia usar isso em outras áreas.

Minha solução atual envolve um costume NAnt construir tarefa no topo da tarefa MbUnit, o que me permite especificar o host, porta, configurações de URL adicionais como atributos. Estes são, então, salvo como um arquivo de configuração dentro do diretório de compilação e então ler em pelas assembléias de teste. Este se sente um "desajeitado" bit para mim como meus testes precisa herdar de uma classe específica. Não muito ruim, mas eu gostaria de ter menos dependências e se concentrar no teste.

Talvez eu estou preocupando demais !!

Outras dicas

Eu tenho uma classe base para todos os dispositivos de teste que tem a seguinte código de configuração:

    [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);
    }

Eu, então, simplesmente fornecer o corredor de teste com uma configuração. Arquivo:

Para MSBuild I variáveis ??de ambiente uso, eu crio as pessoas na minha CC.NET de configuração, em seguida, eles estariam disponíveis no script. Eu acho que isso iria trabalhar para você também.

Sempre que eu preciso para se integrar com uma entidade externa usando NAnt I quer acabar usando a tarefa exec ou escrevendo uma tarefa costume . Dada a informação que você postou parece que escrever o seu próprio seria de fato uma boa solução, no entanto você indicar que você não está feliz com ele. Você pode elaborar um pouco sobre por que você não acho que você solução atual é uma elegante um?

Atualização

Não sabendo Interno detalhes parece que você já resolveu isso muito bem com uma tarefa personalizada. Pelo que tenho ouvido, é assim que eu teria feito isso.

Talvez uma nova solução irá mostrar-se no tempo, mas por enquanto a luz em si mesmo!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top