Question

I am putting together some ideas for our automated testing platform and have been looking at Selenium for the test runner.

I am wrapping the recorded Selenium C# scripts in an MbUnit test, which is being triggered via the MbUnit NAnt task. The Selenium test client is created as follows:

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

How can I pass the host, port and url settings into the test so their values can be controlled via the NAnt task?

For example, I may have multiple Selenium RC servers listening and I want to use the same test code passing in each server address instead of embedding the settings within the tests themselves.

I have an approach mocked up using a custom NAnt task I have written but it is not the most elegant solution at present and I wondered if there was an easier way to accomplish what I want to do.

Many thanks if anyone can help.

Was it helpful?

Solution

Thanks for the responses so far.

Environment variables could work, however, we could be running parallel tests via a single test assembly so I wouldn't want settings to be overwritten during execution, which could break another test. Interesting line of thought though, thanks, I reckon I could use that in other areas.

My current solution involves a custom NAnt task build on top of the MbUnit task, which allows me to specify the additional host, port, url settings as attributes. These are then saved as a config file within the build directory and then read in by the test assemblies. This feels a bit "clunky" to me as my tests need to inherit from a specific class. Not too bad but I'd like to have less dependencies and concentrate on the testing.

Maybe I am worrying too much!!

OTHER TIPS

I have a base class for all test fixtures which has the following setup code:

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

I then simply supply the test runner with a config. file:

For MSBuild I use environment variables, I create those in my CC.NET config then they would be available in the script. I think this would work for you too.

Anytime I need to integrate with an external entity using NAnt I either end up using the exec task or writing a custom task. Given the information you posted it would seem that writing your own would indeed be a good solution, However you state you're not happy with it. Can you elaborate a bit on why you don't think you current solution is an elegant one?

Update

Not knowing internal details it seems like you've solved it pretty well with a custom task. From what I've heard, that's how I would have done it.

Maybe a new solution will show itself in time, but for now be light on yourself!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top