当前位置: 首页 > 知识库问答 >
问题:

当从另一个@测试方法调用@测试结果时,如何在TestNG报告中显示@测试结果。请提出答案

方和顺
2023-03-14

我正在使用ITestListener,用于生成范围报告的范围管理器。它工作正常。我正在从另一个方法调用5@Test方法。报告(TestNG

请检查我的示例代码:建议任何其他方法来获得报告

我的TestNG XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="logixexpress" parallel="false">
    <listeners>
        <listener class-name="common.CommonITestNGListener"></listener>
    </listeners>
    <parameter name = "Browser" value = "Chrome"></parameter>
    <parameter name = "DataFile" value = "\\TestData\\Express.xlsx"></parameter>
    <parameter name = "AppRepoFile" value = "\\OR\\AppRepo.properties"></parameter>
    <test name="Express Test Execution">
        <classes>
            <class name="logixexpress.Driver">
            </class>
        </classes>
  </test> 
</suite> 

我的驱动程序脚本:

public class Driver extends commonhelper{
public static int Drvrownum  = 3;

@Test
public void ExecuteDriver() throws Exception {
for (int i = Drvrownum; i < (ExcelWS.getLastRowNum() + Drvrownum); i++) {
    String mname = GetDatafromCell("Global", Drvrownum, "ActionName");
    String EF = GetDatafromCell("Global", Drvrownum, "ExecutionFlag");
    if (EF.equalsIgnoreCase("false")) {
        Drvrownum = Drvrownum + 1;
        continue;
    }
    else {          
        switch (mname) {
        case "WorkQueue":
                WorkQueue wq = new WorkQueue();
                wq.RunWQcases();
                Drvrownum = Drvrownum + 1;
                break;                          
        case "XXX":
            System.out.println("All Iterations Completed");
            Drvrownum = Drvrownum + 1;
            return;             
        default:
            break;
           }
       }    
    }
  }

}

And my test Script:

public class WorkQueue extends commonhelper{
public static int WQrownum  = 2;
public static String EXLFilePath = scrpath + "\\TestData\\Express.xlsx";

@Test
public void RunWQcases() throws Exception {
setExcelFile(EXLFilePath, "WorkQueue");
for (int i = WQrownum; i < (ExcelWS.getLastRowNum() + WQrownum); i++) {
  String WQMname = GetDatafromCell(WQrownum, "ActionName");
  String AEF = GetDatafromCell(WQrownum, "ExecutionFlag");
  if (AEF.equalsIgnoreCase("false")) {
      WQrownum = WQrownum + 1;
      continue;
  }
  else {
      switch (WQMname) {    
      case "ExecuteWQ":
          ExecuteWQ();
          WQrownum = WQrownum + 1;
          break;        
      case "openchart":
          openchart();
          WQrownum = WQrownum + 1;
          break;                
      case "XXX":
          System.out.println("Sub Class Iterations Completed");
          WQrownum = WQrownum + 1;                  
          return;
      }
  }
 }
}

@Test
public void ExecuteWQ() throws Exception {
driver.findElement(By.linkText("Work Queue")).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Coding WQ")));
driver.findElement(By.linkText("Coding WQ")).click();     
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//table[@class='main']")));
}

@Test
public void openchart() throws Exception {
WebElement wqtable = driver.findElement(By.xpath("//table[@class='main']"));
  List<WebElement> trow = wqtable.findElements(By.tagName("tr"));
  for (int i = 0; i < trow.size(); i++) {
      boolean getrow = false;
      List<WebElement> tcol = trow.get(i).findElements(By.tagName("th"));
      System.out.println("Number of Columns = " + tcol.size());
      for (int j = 0; j < tcol.size(); j++) {
          if (tcol.get(j).getText().equalsIgnoreCase("Action")) {
              driver.findElement(By.className("grid-edit")).click();
              getrow = true;
              break;
        }
          }
      if (getrow) {
          break;
      }
  } 
  Thread.sleep(2000);
 }
}

共有2个答案

柴翰藻
2023-03-14

是的,这是对的。我想基于excel文件控制方法的执行。

有什么解决办法可以摆脱我的报告问题吗?

我编写了如下代码:我正在从TestNG XML文件中执行类“驱动程序”。我的通用助手包含@之前,@之后

是的,这是对的。我想基于excel文件控制方法的执行。有什么办法可以解决我的报告问题吗?

我编写了如下代码:我正在从TestNG XML文件中执行类“驱动程序”。我的通用助手包含@之前,@之后

public class Driver extends commonhelper{
public static int Drvrownum  = 3;

@Test
public void ExecuteDriver() throws Exception {
for (int i = Drvrownum; i < (ExcelWS.getLastRowNum() + Drvrownum); i++) {
    String mname = GetDatafromCell("Global", Drvrownum, "ActionName");
    String EF = GetDatafromCell("Global", Drvrownum, "ExecutionFlag");
    if (EF.equalsIgnoreCase("false")) {
        Drvrownum = Drvrownum + 1;
        continue;
    }
    else {          
        switch (mname) {
        case "WorkQueue":
                WorkQueue wq = new WorkQueue();
                wq.RunWQcases();
                Drvrownum = Drvrownum + 1;
                break;                          
        case "XXX":
            System.out.println("All Iterations Completed");
            Drvrownum = Drvrownum + 1;
            return;             
        default:
            break;
           }
       }    
    }
  }

}


public class WorkQueue extends commonhelper{
public static int WQrownum  = 2;
public static String EXLFilePath = scrpath + "\\TestData\\Express.xlsx";

@Test
public void RunWQcases() throws Exception {
setExcelFile(EXLFilePath, "WorkQueue");
for (int i = WQrownum; i < (ExcelWS.getLastRowNum() + WQrownum); i++) {
  String WQMname = GetDatafromCell(WQrownum, "ActionName");
  String AEF = GetDatafromCell(WQrownum, "ExecutionFlag");
  if (AEF.equalsIgnoreCase("false")) {
      WQrownum = WQrownum + 1;
      continue;
  }
  else {
      switch (WQMname) {    
      case "ExecuteWQ":
          ExecuteWQ();
          WQrownum = WQrownum + 1;
          break;        
      case "openchart":
          openchart();
          WQrownum = WQrownum + 1;
          break;                
      case "XXX":
          System.out.println("Sub Class Iterations Completed");
          WQrownum = WQrownum + 1;                  
          return;
      }
  }
 }
}

@Test
public void ExecuteWQ() throws Exception {
driver.findElement(By.linkText("Work Queue")).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Coding WQ")));
driver.findElement(By.linkText("Coding WQ")).click();     
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//table[@class='main']")));
}

@Test
public void openchart() throws Exception {
WebElement wqtable = driver.findElement(By.xpath("//table[@class='main']"));
  List<WebElement> trow = wqtable.findElements(By.tagName("tr"));
  for (int i = 0; i < trow.size(); i++) {
      boolean getrow = false;
      List<WebElement> tcol = trow.get(i).findElements(By.tagName("th"));
      System.out.println("Number of Columns = " + tcol.size());
      for (int j = 0; j < tcol.size(); j++) {
          if (tcol.get(j).getText().equalsIgnoreCase("Action")) {
              driver.findElement(By.className("grid-edit")).click();
              getrow = true;
              break;
        }
          }
      if (getrow) {
          break;
      }
  } 
  Thread.sleep(2000);
 }
}
慕容安易
2023-03-14

如果我正确理解了这个问题,那么问题是TestNG报告没有提供关于从其他方法调用的测试方法的任何信息。这个问题包括范围报告,但现在,我只回答TesNG部分,

在您的Test方法中,如果调用另一个Test方法,并且您在xml文件中只包含了调用函数,TestNG将执行这两个方法,但在执行测试时只计算1。例如,如果您编写了以下内容:

@Test
public void test1()
{
 test2()
 test3()
}

@Test
public void test2()
{
}

@Test
public void test3()
{
}

并且您在xml文件中只包含了test1方法,TestNG将只考虑执行一个测试方法,并相应地准备报告。

此外,以这种方式设计测试是一种不好的做法。在所有理想情况下,各个测试应完全独立。如果是单个流,那么您可能应该将两个测试合并。如果不是这样,并且您必须使用一个测试到另一个测试的输出,您可以看到这一点。

 类似资料:
  • 问题内容: 我有一个验收测试用例,结果是纯文本。我想使用Jenkins来显示结果,并且JUnit格式适合我。 因此,我想检查是否存在用于生成JUnit格式XML的python代码,以便可以轻松添加我的解析代码。 问题答案: 我发现一个python模块https://bitbucket.org/db_atlass/python-junit-xml-output- module/ ,看起来很适合我的需

  • 我试图使用TestNg reporter信息组合一个测试报告以包含自定义信息,但遇到了一个问题,surefire报告重复了我使用reporter.log()输出的任何内容。 如果我使用TestNg Eclipse插件运行这些报告,我会在reporter output(在TestNg测试输出中)下得到以下输出: 自定义输出在这里 自定义输出在这里 自定义输出在这里 下面是创建输出的失败重写: 我只是

  • 我的build.gradle是这样配置的: 下面是一个简单的测试: 当我执行测试时,我在控制台中看到了这一点: 但测试报告中没有任何内容: 我做错了什么?如何将JUnit 5结果集成到测试报告窗口中? 我正在使用Intellij 2016.2

  • 问题内容: 我已经调整了标准的果冻模板,以便在表格中显示当前的测试结果,但是我真的希望能够显示差异,如詹金斯自己的测试结果页面中所示。 例如: 问题答案: 为Email Ext插件而不是Jelly模板编写一个Groovy模板。在Groovy模板中,您可以访问用于构建的Build对象。然后,可以对其调用getTestResultAction以获得构建的AbstractTestResultAction

  • 问题: TestNG正在运行所有172个测试,但是它只报告了81个测试运行,没有报告一些失败(实际上有两个测试失败,但只报告了一个)。 似乎未报告的测试是有什么方法可以让TestNG正确识别这些测试并正确报告它们的结果吗?

  • 一旦configure确定了某个特征是否存在,它将如何记录这一信息?这里有四种记录方式: 定义一个C预处理器符号、在输出文件中设置一个变鼠、为将来运行configure而把结果储存到一个缓存文件中, 以及打印一条消息以便让用户知道测试的结果。 定义C预处理器符号 对一个特征的检测的常见回应是定义一个表示测试结果的C预处理器符号。这是通过调用AC—DEFINE 或者AC—DEFINE—UNQUOTE