1

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.

4

4 に答える 4

1

これまでの回答ありがとうございます。

環境変数は機能する可能性がありますが、単一のテストアセンブリを介して並列テストを実行できるため、実行中に設定が上書きされて別のテストが失敗する可能性はありません。興味深い考え方ですが、おかげで、他の分野でもそれを使用できると思います。

私の現在のソリューションには、MbUnitタスクの上にカスタムNAntタスクを構築することが含まれています。これにより、追加のホスト、ポート、URL設定を属性として指定できます。これらはビルドディレクトリ内に設定ファイルとして保存され、テストアセンブリによって読み込まれます。テストは特定のクラスから継承する必要があるため、これは少し「不格好」に感じます。それほど悪くはありませんが、依存関係を減らし、テストに集中したいと思います。

多分心配しすぎです!!

于 2008-10-27T15:36:19.030 に答える
1

次のセットアップ コードを持つすべてのテスト フィクスチャの基本クラスがあります。

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

次に、テスト ランナーに構成を提供するだけです。ファイル:

于 2009-01-15T12:49:22.217 に答える
0

NAnt を使用して外部エンティティと統合する必要があるときはいつでも、最終的にexec タスクを使用するか、カスタム タスクを作成します。あなたが投稿した情報を考えると、自分で書くことは確かに良い解決策になるように思えますが、あなたはそれに満足していないと述べています. 現在のソリューションがエレガントなソリューションであると思わない理由について少し詳しく説明していただけますか?

アップデート

内部の詳細がわからない場合は、カスタム タスクでかなりうまく解決したようです。私が聞いた限りでは、私はそうしていたでしょう。

そのうちに新しい解決策が現れるかもしれませんが、今は自分に気をつけてください。

于 2008-10-27T15:25:07.930 に答える
0

MSBuild では、環境変数を使用します。CC.NET 構成でそれらを作成すると、スクリプトで使用できるようになります。これはあなたにも役立つと思います。

于 2008-10-27T15:26:35.773 に答える