在多个环境中执行编码的UI测试

时间:2015-10-20 14:34:06

标签: c# automated-tests app-config ui-automation coded-ui-tests

现在我的Coded UI测试使用他们的app.config来确定他们执行的域,它与环境有1-1关系。为了简化它:

  • www.test.com
  • www.UAT.com
  • www.prod.com

在App.config中我有类似的东西:

<configuration>
    <appSettings>
        <add key="EnvironmentURLMod" value ="test"/>

并在不同的环境中运行测试,我手动更改运行之间的值。例如,我这样打开浏览器:

browserWindow.NavigateToUrl(new Uri("http://www."
                + ConfigurationManager.AppSettings.Get("EnvironmentURLMod")
                + ".com"));
显然,这是不优雅的。我想我有一个愿景,我们会为每次运行投入一个新的app.config,但作为扰流板,这个测试将在~10个环境中运行,而不是3个,以及它可能运行的环境可能会发生变化。

我知道我可以将这些环境URL修改与另一个XML文件分离,并使测试在data-driven scenario中按顺序访问它们。但即使这似乎并不是我所需要的,因为如果一个环境失败,那么整个测试就会崩溃。我已经看到Environment Variables作为建议,但这需要为每个环境创建一个测试代理,修改他们的注册表,并对每个环境运行测试。如果这就是它所需要的,那么看起来像是一个巨大的VM带宽用于什么是字符串集合。

在理想的世界中,我想将这些URL mod绑定到测试设置,MTM环境或构建之类的东西。我想为每个域执行一系列测试并单独报告。

简而言之,参数化这些测试的最佳方法是什么?有没有一种方法不涉及排队新版本或删除配置文件?数据驱动测试的答案是什么?我是否错误地构建了解决方案?这似乎应该是一个常见的场景,但我的谷歌搜索并不能让我在那里。

任何和所有帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这里的答案是数据驱动测试,不幸的是,即使有“比大多数人更好”的选项,也没有完整的银弹。

使用任何数据源都可以在多个环境(或您能想到的任何其他变量)中迭代测试,并基本上返回3个不同的测试结果 - 每个排列或数据行一个。 然而你必须更新你的断言以显示你当前正在执行的环境,因为测试结果默认只显示“数据行0”或类似的东西。如果测试通过,您将无法确定成功运行数据行中的实际内容,除非您将此信息嵌入到操作日志中!我很幸运,我的用例自动执行此操作,因为我只使用了URL mod,但其他人可能需要自己这样做。

为了允许动态更改我们正在测试的环境,我们选择使用TestCase数据源。这具有很大的灵活性 - 可能比使用数据库或XML更多 - 但它有自己的缺点。像所有数据驱动的场景一样,您必须将测试用例ID基本上“硬编码”到测试方法上方的装饰器中(因为它被视为属性)。当我们想要更改我们使用的测试用例时,我希望我们可以将app.config放入构建放置位置,但是看起来我们将不得不在解决方案中进行查找+替换。

如果有人知道更好的方法将测试ID或连接字符串的任何其他部分与代码分离,我会在这里给你一个答案。对于其他任何人,您可以在MSDN找到更多信息。