NAnt、MbUnit、CruiseControl、Selenium - 将设置传递给测试程序集

Posted

技术标签:

【中文标题】NAnt、MbUnit、CruiseControl、Selenium - 将设置传递给测试程序集【英文标题】:NAnt, MbUnit, CruiseControl, Selenium - passing settings to the test assembly 【发布时间】:2010-09-19 09:49:09 【问题描述】:

我正在为我们的自动化测试平台整合一些想法,并且一直在寻找 Selenium 的测试运行器。

我将记录的 Selenium C# 脚本包装在 MbUnit 测试中,该测试通过 MbUnit NAnt 任务触发。 Selenium 测试客户端创建如下:

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

如何将主机、端口和 url 设置传递到测试中,以便可以通过 NAnt 任务控制它们的值?

例如,我可能有多个 Selenium RC 服务器在监听,我想使用相同的测试代码在每个服务器地址中传递,而不是在测试本身中嵌入设置。

我有一个使用我编写的自定义 NAnt 任务模拟的方法,但它不是目前最优雅的解决方案,我想知道是否有更简单的方法来完成我想做的事情。

如果有人能提供帮助,非常感谢。

【问题讨论】:

【参考方案1】:

感谢到目前为止的回复。

环境变量可以工作,但是,我们可以通过单个测试程序集运行并行测试,因此我不希望在执行期间覆盖设置,这可能会破坏另一个测试。不过有趣的思路,谢谢,我想我可以在其他领域使用它。

我当前的解决方案涉及在 MbUnit 任务之上构建的自定义 NAnt 任务,它允许我将其他主机、端口、url 设置指定为属性。然后将它们保存为构建目录中的配置文件,然后由测试程序集读入。这对我来说有点“笨拙”,因为我的测试需要从特定的类继承。还不错,但我希望减少依赖并专注于测试。

也许是我担心太多了!!

【讨论】:

【参考方案2】:

我有一个用于所有测试装置的基类,它具有以下设置代码:

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

然后我简单地为测试运行器提供一个配置。文件:

【讨论】:

【参考方案3】:

对于 MSBuild,我使用环境变量,我在我的 CC.NET 配置中创建它们,然后它们将在脚本中可用。我想这对你也有用。

【讨论】:

【参考方案4】:

每当我需要使用 NAnt 与外部实体集成时,我要么最终使用 exec 任务,要么编写 自定义任务。鉴于您发布的信息,您自己编写似乎确实是一个很好的解决方案,但是您表示您对此不满意。您能否详细说明一下为什么您认为您当前的解决方案不是优雅

更新

不知道 internal 细节,您似乎已经通过自定义任务很好地解决了它。据我所知,我会这样做。

也许一个新的解决方案会及时出现,但现在要对自己轻描淡写!

【讨论】:

以上是关于NAnt、MbUnit、CruiseControl、Selenium - 将设置传递给测试程序集的主要内容,如果未能解决你的问题,请参考以下文章

我应该从 nant 切换到 msbuild 吗?

在 CruiseControl 仪表板中显示 HTML 报告

NAnt 和双平台构建 - 在 Windows 和 Mono/Linux 上构建的最佳方式

让 MSBuild 和 CruiseControl .NET 构建和部署 VS2010 数据库项目

Cruise Control .Net 服务器无法检测在 Starteam 上所做的修改

MbUnit:在所有夹具运行后运行代码