0

假设我有一个想要数据驱动的编码 UI 测试。

我正在测试的应用程序有一个日期字段,并且日期字段仅支持 >= 当前日期的日期。是否可以在我的数据源中添加 C# 代码,以便从 C# 代码生成日期?

例如:

 DateTime.Now.ToString("MM/dd/yyyy")
 DateTime.Now.AddDays(90).ToString("MM/dd/yyyy")

如果这不可行,是否可以将 C# 输入到 UIMap.uitest 中?当我输入代码时,测试会将代码作为字符串提取。我可以将 C# 代码输入到设计器文件中,但是 1)这会经常被覆盖,并且 2)这不允许我做多个选项。

感谢您的帮助!

4

3 回答 3

2

UIMap.uitest由两个文件支持,一个是设计器文件,您应该不理会它,因为它会再次生成。

第二个文件是UIMap.cs在 desginer 文件中生成的类的部分类。

每个生成的方法都带有一个 [Methodname]Params 类,该类包含在该特定方法中使用的属性。要引入动态数据,您可以执行以下操作。

UIMap.cs添加这个(假设你有一个 RecordedMethod1 )

    public partial class UIMap
    {
        public void RecordedMethod1(DateTime date)
        {
            RecordedMethod1Params.YourDate = date.ToString("MM/dd/yyyy");

            RecordedMethod1();
        }
    }

现在在您的CodedUiTest班级中TestMethod1使用现在为 RecordedMethod1 创建的重载

 this.UIMap.RecordedMethod1(DateTime.Now.AddDays(-90));
于 2013-11-08T19:57:19.730 回答
0

编码的 UI 测试可以是数据驱动的,这通常被认为是从数据文件(如 CSV 文件或电子表格)中获取数据。但是数据驱动的想法可以用在其他方面。您的测试需要数据驱动的一部分,但数据源是系统时钟。

当您记录部分测试并将其保存为方法时,输入的任何值都将用作类中字段的初始值,其名称基于方法名称。对于名为MyMethod类的操作方法,将是MyMethodParams. 对于检查名为MyAssertion类的方法中的断言的方法将是MyAssertionExpectedValues. 当方法运行时,它使用来自...Params...ExpectedValues类的值。这些值可以在调用方法之前被覆盖。

对于您的测试,每次执行测试都应使用不同的日期和时间,您可以编写代码,例如

MyMethodParams.DateField = DateTime.Now.AddDays(90).ToString("MM/dd/yyyy");
MyMethodParams.TimeField = DateTime.Now.ToString("HH:mm:ss.fff");
MyMethod();

如果每个测试迭代需要不同的日期,那么您可以将测试迭代编号添加到90上面使用的日期。迭代可以很容易地通过static int类的 a 来计算。

Coded UI 内容索引包含驱动 Coded UI 测试的数据和许多其他有用主题的链接。请参阅http://blogs.msdn.com/b/mathew_aniyan/archive/2013/02/18/content-index-for-coded-ui-test.aspx

于 2013-11-08T22:21:20.620 回答
0

以下是我将如何处理这个问题:

为了简单、可重复和清晰起见,创建一个包含您要测试的各种日期的数据源(例如 XML 文件)并使用它来填充测试中的方法参数会更简单。

当您运行测试时,它将针对您在数据源中获得的每个数据行重新运行。因此,如果您有 10 个日期条目,它将运行 10 次。

将以下代码放入您的 CodedUI 测试中。这将定义您的测试将从中读取的数据源 (data.xml)。

[DeploymentItem("MyTest\\data.xml"), DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\data.xml", "Entry", DataAccessMethod.Sequential), TestMethod]

data.xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8" ?>
<Data>
  <Entry>
   <Date>2013/01/01</Date>
  </Entry>
  <Entry>
   <Date>2013/03/11</Date>
  </Entry>
  <Entry>
   <Date>2013/04/11</Date>
  </Entry>
  <Entry>
   <Date>2013/06/17</Date>
  </Entry>
</Data>

在这里,您需要修改记录方法的参数以从 data.xml 数据源中读取。

this.UIMap.RecordedMethodParams.UITxtDateEditText =TestContext.DataRow["Date"].ToString();
this.UIMap.RecordedMethod();

当您在到达 RecordedMethod 时运行 CodedUI 测试时,它将为您在数据源中的每个日期条目运行一次。你可以有 1 个或 10,000 个。

我喜欢这种方法,因为它允许您在想要更改测试参数的任何时候修改简单的 XML。这也允许非熟练测试人员将测试更改为他们的要求,而无需涉足代码。

我希望这有帮助!

于 2013-11-08T22:24:50.930 回答