是否可以将C#添加到Coded UI数据源或UIMap.uitest文件?

时间:2013-11-08 19:30:18

标签: c# automation coded-ui-tests qa

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

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

例如:

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

如果无法做到这一点,可以将C#输入UIMap.uitest吗?当我输入代码时,测试将代码选为字符串。我可以将C#代码输入设计器文件,但1)这将经常被覆盖2)这不允许我做多个选项。

我很感激帮助!

3 个答案:

答案 0 :(得分: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();
        }
    }

现在在CodedUiTestTestMethod1中使用现在为RecordedMethod1创建的重载

 this.UIMap.RecordedMethod1(DateTime.Now.AddDays(-90));

答案 1 :(得分: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轻松计算迭代次数。

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

答案 2 :(得分: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();

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

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

我希望这有帮助!