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

本文关键字:编码 UI 测试 执行 环境 | 更新日期: 2023-09-27 18:18:27

现在我的编码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文件,并使测试在数据驱动的场景中依次访问它们。但即使这样似乎也不是我所需要的,因为如果一个环境失败了,那么整个测试就会崩溃。我认为环境变量是一种建议,但这需要为每个环境创建一个测试代理,修改它们的注册表,并在每个环境上运行测试。如果这是需要的,那么当然,但这似乎是一个巨大的虚拟机带宽用于字符串的集合。

在一个理想的世界里,我想把这些URL模型与测试设置、MTM环境或构建之类的东西联系起来。我想为每个域执行一组测试,并分别报告。

总之,参数化这些测试的最佳方法是什么?有没有一种方法,不涉及排队新构建,或删除配置文件?数据驱动测试是答案吗?我的解决方案结构是否不正确?这似乎应该是一个常见的场景,但是我的谷歌并没有让我找到。

感谢大家的帮助。

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

这里的答案是数据驱动测试,不幸的是,即使有"比大多数更好"的选项,也没有完全的灵丹妙药。

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

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

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