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

TestNG-从TestNG xml多次运行相同的测试方法

凌鹏程
2023-03-14

考虑一个场景,我在测试一个索赔系统。我想提交报价并检查账单总额。一天两次或两次以上的索赔应该能为我赢得奖金。所以我需要在1次索赔后检查总金额,在2次索赔后再次检查,然后在删除一次索赔后再次检查,依此类推。执行如下-

  1. 登录
  2. 增加1项索赔
  3. 计算应收总额
  4. 增加1个索赔
  5. 计算应收总额
  6. 删除索赔
  7. 计算应收总额
  8. 注销

我的TestNG. xml看起来像这样-

<test>
    <classes>
        <class name="Quotes">
            <methods>
                <include name="fLogin" />
                <include name="fAddQuotes" />
                <include name="fCheckTotal" />
                <include name="fAddQuotes" />
                <include name="fCheckTotal" />
                <include name="fRemoveQuotes" />
                <include name="fCheckTotal" />
                <include name="fLogout" />
            </methods>
        </class>
    </classes>
</test>

如前所述,需要在同一测试中多次调用函数“fCheckTotal”。我希望能够在两者之间推送可变数量的add/remove函数。

但是testNG只执行重复方法(fAddQuotes、fCheckTotal)的第一次出现。

实际上xml正在这样做-

  1. 登录

我怎样才能解决这个问题?

共有3个答案

姜泰宁
2023-03-14

如果您使用的是TestNG,则需要使用invocationCount:

@Test(invocationCount=4)

注意:4是要运行方法的次数。

郤瀚
2023-03-14

我认为,@bob in对您评论中提到的问题的回答最为相关。(https://stackoverflow.com/a/16259647/1431434)

您不能依赖testNG进行流控制。

若你们想让你们的方法以某种特定的顺序执行,你们必须使用dependsOn属性,如下所示,否则你们可能会遇到下面的问题

https://stackoverflow.com/a/16259647/1431434

@Test
public void Test1() {

}

@Test (dependsOnMethods={"Test1"})
public void Test2() {

}

@Test (dependsOnMethods={"Test2"})
public void Test3() {

}

所以第一种方法可以是

定义login、changeLocation、FirstClaim、SecondClaim等组(使fAddQuotes和fCheckTotal成为FirstClaim和SecondClaim组的一部分),您可以将这些组与dependsOn标记一起使用。从可维护性的角度来看,这可能会造成长期的痛苦

其他方法和更好的方法是

与其用测试注释定义所有给定的方法,不如将它们作为支持方法,只对测试端到端流的方法使用注释。

例如

 flogin(){}
 fAddQuotes(){}
 fCheckTotal(){}
 fRemoveQuotes(){}
 fLogout(){}


 @Test
 void Login()
 {
    fLogin()
    Assert
 }

 @Test
 void testAddQuote()
 {
    fLogin()
    fAddQuotes(){}
    fCheckTotal(){}  
 }
 @Test
 void testMultipleAddQuote()
 {
    fLogin()
    fAddQuotes(){}
    fCheckTotal(){}
    fChangeLocation(){}  
    fAddQuotes(){}
    fCheckTotal(){}
 }

我希望这会有帮助。

华子昂
2023-03-14

我也面临着同样的问题,我找到了解决办法。

修改XML,如下所示。因此,让每个类都作为测试运行。这对我有用。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" verbose="1">
  <test name="Test">
      <classes>
       <class name="com.DemoOne"/>
       </classes>
   </test> <!-- Test -->
   <test name="Test1">
      <classes>
        <class name="com.DemoTwo"/>
       </classes>
  </test> <!-- Test -->
  <test name="Test2">
       <classes>
        <class name="com.DemoOne"/>
       </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->
 类似资料:
  • 我有一个 TestNG 测试套件运行良好,除了一件事:我不能两次运行相同的测试。我想运行两次测试的原因是,我正在测试将用户登录/注销的 Web 服务,并且我想验证登录是否有效,然后注销是否有效,然后再次登录它们,以便后续测试(需要用户登录)可以继续。 下面是我的testng.xml的相关部分: 如您所见,“appUserLogintest”被调用了两次。但是,当我调试它时,我可以清楚地看到它只在第

  • 例如: 数据提供程序1:dataA 数据提供程序2:dataB,dataC 数据提供程序3:dataD、dataE、dataG 所以我的测试需要一个数据提供者。但是我希望它根据测试组为不同的测试类型选择不同的数据提供者。例如,如果我正在运行“smoke”组,那么我希望使用数据提供者1;如果我正在运行“sanity”组,那么我希望运行数据提供者1和数据提供者2;如果我正在运行“regression”

  • 我有一个使用testng API动态创建testng.xml文件的项目,因此使用java的main函数,我的项目按预期工作,但是如果我使用'run as->maven build'通过maven运行我的项目,看起来只有BeforeSuite和BeforeTest类在运行,而实际的测试并没有运行。以下是我的pom.xml文件: 最后,这是StackTrace: 我想知道我错过了什么。

  • 这是驱动程序类,它将为每个测试方法创建驱动程序实例。

  • 我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。

  • 作为测试的一部分,我想多次执行一组测试方法。< br >我使用TestNG来指定我的测试。我在testng.xml文件中指定的测试如下: 执行此测试后,我看到重复的方法没有被执行。它只执行测试直到“更改位置”。任何人都可以提出任何其他解决方案或原因,为什么这不起作用? 请注意,我不想使用不同的数据集多次执行这些方法。因此,按照我在网上找到的几篇帖子中的建议使用数据提供者对我没有帮助。因为我遵循严格