Domanda

Sto mettendo insieme alcune idee per la nostra piattaforma di test automatizzata e ho cercato Selenium per il test runner.

Sto avvolgendo gli script Selenium C # registrati in un test MbUnit, che viene attivato tramite l'attività MbUnit NAnt. Il client di test Selenium è creato come segue:

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

Come posso passare le impostazioni dell'host, della porta e dell'URL nel test in modo che i loro valori possano essere controllati tramite l'attività NAnt?

Ad esempio, potrei avere più server Selenium RC in ascolto e voglio usare lo stesso codice di test passando in ciascun indirizzo del server invece di incorporare le impostazioni all'interno dei test stessi.

Ho un approccio deriso usando un'attività NAnt personalizzata che ho scritto ma al momento non è la soluzione più elegante e mi chiedevo se ci fosse un modo più semplice per realizzare ciò che volevo fare.

Mille grazie se qualcuno può aiutarti.

È stato utile?

Soluzione

Grazie per le risposte finora.

Le variabili di ambiente potrebbero funzionare, tuttavia, potremmo eseguire test paralleli tramite un singolo assieme di test, quindi non vorrei che le impostazioni venissero sovrascritte durante l'esecuzione, il che potrebbe interrompere un altro test. Interessante linea di pensiero, però, grazie, credo di poterlo usare in altre aree.

La mia attuale soluzione prevede un'attività NAnt personalizzata costruita sopra l'attività MbUnit, che mi consente di specificare le impostazioni aggiuntive dell'host, della porta e dell'URL come attributi. Questi vengono quindi salvati come file di configurazione nella directory di build e quindi letti dagli assembly di test. Questo sembra un po '"goffo". per me poiché i miei test devono ereditare da una classe specifica. Non male, ma mi piacerebbe avere meno dipendenze e concentrarmi sui test.

Forse mi sto preoccupando troppo !!

Altri suggerimenti

Ho una classe base per tutti gli apparecchi di prova che ha il seguente codice di installazione:

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

Fornisco quindi semplicemente al test runner una configurazione. file:                                                                

Per MSBuild utilizzo le variabili di ambiente, le creo nella mia configurazione CC.NET, quindi sarebbero disponibili nello script. Penso che funzionerebbe anche per te.

Ogni volta che devo integrarmi con un'entità esterna utilizzando NAnt, finisco per usare task exec o scrivendo task personalizzato . Date le informazioni che hai pubblicato, sembrerebbe che scrivere le tue sarebbe davvero una buona soluzione, tuttavia dichiari di non esserne soddisfatto. Puoi spiegarci un po 'perché non pensi che la tua soluzione attuale sia elegante ?

Aggiornamento

Non conoscendo i dettagli interni sembra che tu l'abbia risolto abbastanza bene con un'attività personalizzata. Da quello che ho sentito, è così che l'avrei fatto.

Forse una nuova soluzione si mostrerà in tempo, ma per ora sii leggero su te stesso!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top