是否有任何注释可以生成从自动测试执行每个步骤所需的时间

时间:2016-10-26 21:12:25

标签: java selenium-webdriver annotations testng qaf

我正在使用TestNG来执行此测试。执行此测试后,我将获得执行整个测试所需的总时间。现在要求是我需要记录从该测试开始执行的每个步骤所花费的时间。 以下是我的自动化测试。这有3个步骤。

@Test(priority = 1, description = "Login to Oasis")
public void verifyFilter(){
//Step#1
    navMenu = loginToApplication(username, password);
    Assert.assertTrue(navMenu.isDisplayed(getWebDriverInstance()), "Login Failed!!!");

//Step#2
    advancedSearchForm = navMenu.clickSearchAllTitles();
    if (!advancedSearchForm.isDisplayed(getWebDriverInstance())) {
        SimpleSearchFormElement simpleSearchForm = new SimpleSearchFormElement(getWebDriverInstance());
        advancedSearchForm = simpleSearchForm.openAdvancedSearchForm();
    }
Assert.assertTrue(advancedSearchForm.isDisplayed(getWebDriverInstance()), "Advanced Search Form is not displayed!");
//Step#3
    collectionFilterDialog = advancedSearchForm.openCollectionFilterDialog();
    boolean flag = collectionFilterDialog.isCollectionSelectableListDisplayed();
    Assert.assertTrue(flag, "Collection Filer dialog is not displayed!");
}

3 个答案:

答案 0 :(得分:4)

我正在使用QAF进行测试自动化,其内置的报告生成每个步骤执行所需的时间并显示在报告中。我发现QAF是最简单的详细报道方式。

Screenshot

使用QAF,您的代码可能如下所示

popupwindow.setFocusable(true);

以上方式是飞行步骤声明。另一种定义步骤的方法:

@Test(priority = 1, description = "Login to Oasis")
public void verifyFilter(){
//Step#1
    CommonStep.startTransaction("Step#1: name of the step");

    navMenu = loginToApplication(username, password);
    Assert.assertTrue(navMenu.isDisplayed(getWebDriverInstance()), "Login Failed!!!");

    CommonStep.stopTransaction();

    //Step#2
    CommonStep.startTransaction("Step#2: name of the step");

    advancedSearchForm = navMenu.clickSearchAllTitles();
    if (!advancedSearchForm.isDisplayed(getWebDriverInstance())) {
        SimpleSearchFormElement simpleSearchForm = new SimpleSearchFormElement(getWebDriverInstance());
        advancedSearchForm = simpleSearchForm.openAdvancedSearchForm();
    }
    Assert.assertTrue(advancedSearchForm.isDisplayed(getWebDriverInstance()), "Advanced Search Form is not displayed!");
        CommonStep.stopTransaction();

//Step#3
    CommonStep.startTransaction("Step#3: name of the step");

    collectionFilterDialog = advancedSearchForm.openCollectionFilterDialog();
    boolean flag = collectionFilterDialog.isCollectionSelectableListDisplayed();
    Assert.assertTrue(flag, "Collection Filer dialog is not displayed!");

    CommonStep.stopTransaction();

}

在testNG测试中调用此方法,您将在报告中找到步骤。 teststep的另一个好处是你可以使用description来调用bdd中的这一步。

答案 1 :(得分:1)

TestNG是一个单元测试框架。对于单元测试,使用@Test注释的每个方法都是一个测试。

但对于QA自动化工程师,我认为这是一个步骤。也就是说,该类是一个端到端的测试。所有测试方法都将是测试/工作流程的步骤。

因此,您可以按照此处所示设计TestNG课程 - 您也可以完成时间跟踪。

#Demo1 a:hover {
  background-color:#FF0000;
}

答案 2 :(得分:0)

我很想知道是否需要找出每个动作的执行时间?它服务的是什么。如果您仍然需要这样做,我建议您利用下面的内容

对于基于UI的自动化测试,您可以使用EventFiringWebDriver。这个Selenium实现为您提供了插入钩子以监听Selenium动作产生的各种不同事件的能力。因此,您应该能够构建一个时间记录器,它实现一个WebDriverEventListener,您可以将其EventFiringWebDriver连接到Reporter,并在内部调用Reporter.log()Reporter.log是一个TestNG类)。您可以在我的博文here中阅读有关窃听webdriver事件的更多信息。

对于基于非UI的自动化测试,您可以考虑以下两个之一

  1. 每当调用每个方法时,让API实用程序通过{{1}}单独记录时间(这意味着您将在所有实用程序方法中进行代码更改以捕获开始和结束时间以计算时间取)。
  2. 您使用AOP,其中您通过注释定义切入点,并让您的AOP拦截器负责记录时间。您可以参考更多相关信息here