3

我正在使用 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!");
}
4

3 回答 3

4

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

截屏

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

@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();

}

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

@QAFTestStep(description="login using {user} and {password}")
public void login(String userName, String pwd) {
    //your code here
}

在testNG测试中调用这个方法,你会在report中找到step。teststep 的另一个好处是您可以在 bdd 中也使用描述来调用此步骤。

于 2016-10-27T04:37:03.403 回答
1

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

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

因此,您可以设计您的 TestNG 类,如此处所示 - 您的时间跟踪也可以完成。

@Test(description = "Login to Oasis")
public void step1(){

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

}

@Test(dependsOnMethods="step1", description = "Open Advanced Search Form")
public void step2(){

    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!");

}

@Test(dependsOnMethods="step2", description = "Open Collection Filter Dialog")
public void step3(){

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

}
于 2016-10-26T21:43:23.253 回答
0

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

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

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

  1. 让您的 API 实用程序通过Reporter.log调用每个方法时单独记录时间(这意味着您将在所有实用程序方法中进行代码更改以捕获开始和结束时间以计算所用时间)。
  2. 您使用 AOP,其中您通过注释定义切入点并让您的 AOP 拦截器负责记录时间。您可以在此处参考更多信息。
于 2016-10-31T05:26:00.510 回答