如何在测试中使用多个断言

时间:2013-07-30 21:04:27

标签: assert coded-ui-tests

我必须处理HTML页面并验证结果(添加一些文本,从组合框中选择一些项目,点击某个按钮)。

例如action1,action2和action3。

每次操作后,我都需要验证上一个操作的结果。在QTP中,我们将使用Report.Fail(通过,警告)并转到下一个操作。

在代码UI中,我使用的是

try{
  Action1;
  Assert //some kind of assert
  Action2;
  Assert //some kind of assert
  Action3;
  Assert //some kind of assert
}
Catch (exception ex)
{
  ...
  Assert.Fail()
}

这种方式有点但不完美。问题是,如果我从Assert.Fail删除catch,测试将通过!这是奇怪的(即使之前的断言导致进入catch语句)。另一方面,如果我将assert.fail保留在catch语句中,则测试将失败,但屏幕捕获不正确(屏幕捕获将由assert.fail进行,但不是之前的那些)。

所以我的第一个问题是如何使用多个断言,如果其中一个失败,请以正确方式关闭测试并将测试标记为失败?

我的第二个问题是,是否可以使用assert进行逻辑运算?让我们假设我们的条件可以是A或B(取决于或运行时的情况)。现在我该怎样检查断言条件?如果条件是A或B,它应该只通过测试。在所有其他情况下,测试应该失败。

由于

1 个答案:

答案 0 :(得分:1)

Coded UI框架代码使用[TestMethod]属性调用方法。在测试方法中,调用断言来报告测试失败,Assert抛出框架捕获的异常。该框架在捕获异常后保存图像。如果您的代码捕获到异常,那么失败不会传递给框架。如果您的代码在测试中捕获了来自不同断言的多个异常,那么框架将不会看到这些异常。因此,你看到的行为。

编码的UI通常基于在第一个条件(即第一个断言)停止测试的基础上失败。如果您希望测试检查多个项目并报告所有失败的项目,那么您需要自己编写代码。通常,您将断言调用更改为简单if测试,如果测试失败记录原因,则在测试结束时检查是否有任何测试失败。如果他们这样做,则调用Assert.Fail并传递失败原因的摘要。

要从失败点获取屏幕图像,您可以混合使用以下类型的语句:

Image img1 = UITestControl.Desktop.CaptureImage();
Image img2 = this.UIMap.UIYourApplicationsWindow.CaptureImage();
Image img3 = this.UIMap.UIYourApplicationsWindow.UISubWindow.UISubSub.CaptureImage();
... followed by:
imgX.Save( ... filename ... ); // For various X
TextContext.AddResultFile(... filename ... ) 

img.Save次调用将为每次调用创建一个文件,包括来自通过的测试的调用。 AddResultFile为失败的测试制作这些文件的副本。