使用testng.xml运行测试用例时获取错误取决于不存在的组

时间:2017-07-16 00:45:16

标签: selenium-webdriver testng

运行具有属性dependsOnGroupsis的类在运行个人作为TestNG时工作正常,但在使用testng.xml文件运行它们时获得以下错误

我无法弄清楚为什么会出现这个错误,可能是某些依赖需要添加在我可能缺少的testing.xml文件中。任何人的帮助将不胜感激。提前致谢

 [TestNG] Running:
      C:\Workspace\ZionsWorkspace\Zions_Bancs_Automation\testng.xml

org.testng.TestNGException: 
DependencyMap::Method "LoanApprovalTest.testLoanApprova(java.util.Hashtable)[pri:0, instance:com.zions.release1.Sanity.LoanTestCases.LoanApprovalTest@3884b2]" depends on nonexistent group "CreateLoanAccountTest.testCreateLoanAccount"
    at org.testng.DependencyMap.getMethodsThatBelongTo(DependencyMap.java:46)
    at org.testng.TestRunner.createDynamicGraph(TestRunner.java:1074)
    at org.testng.TestRunner.privateRun(TestRunner.java:734)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

第1课:

        public class CreateLoanAccountTest extends AbstractBaseTestCase{

            private CreateLoanAccountProcess createLoanAccountProcess =  null;

            @Test(dataProvider="createLoanAccountTest" , dataProviderClass = DataProviderForSanitTest.class , groups={"CreateLoanAccountTest.testCreateLoanAccount"})
            public void testCreateLoanAccount(Hashtable<String, String> TestDataTable){


            }

        }

第2课:

        public class LoanApprovalTest extends AbstractBaseTestCase {

                  @Test(dataProvider="loanApprovalTest" , dataProviderClass = DataProviderForSanitTest.class , dependsOnGroups={"CreateLoanAccountTest.testCreateLoanAccount"}) 
                   public void testLoanApprova(Hashtable<String, String> TestDataTable){

                   }

        }

的testng.xml

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
        <!-- parallel="methods" To Execute the classess Parallel -->
        <suite name="Suite"  >
          <test name="Test">

        <class name="com.zions.release1.Sanity.LoanTestCases.LoanApprovalTest"/>
               <class name="com.zions.release1.Sanity.LoanTestCases.AmendLoanAccountTest"/>
            </classes>
          </test> <!-- Test -->
        </suite> <!-- Suite -->

2 个答案:

答案 0 :(得分:0)

虽然我在tests.xml文件中包含了依赖类,但它开始工作,但它们运行的​​顺序并不是预期的。

贷款批准取决于贷款创建,贷款修订是独立的测试用例

执行顺序是: 创建贷款帐户, 贷款修正案, 日志审批

预计会有 贷款创造, 贷款批准, 贷款修正案

我无法理解为什么会这样。任何人都可以解释执行顺序,同时保持测试文件中的类与那些具有dependsongroups属性的类。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<!-- parallel="methods" To Execute the classess Parallel -->
<suite name="Suite"  >
  <test name="Test">


    <classes>


  <class name="com.zions.release1.Sanity.LoanTestCases.CreateLoanAccountTest"/>
       <class name="com.zions.release1.Sanity.LoanTestCases.LoanApprovalTest"/>
       <class name="com.zions.release1.Sanity.LoanTestCases.AmendLoanAccountTest" />
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

答案 1 :(得分:0)

如果您只担心执行订单,则必须进行2次更改: 1.在testng.xml文件中,您必须添加:

test name="Test" **preserve-order="true"**

这将确保testng.xml文件中提到的测试类的执行顺序。请点击此链接了解更多详情http://www.seleniumeasy.com/testng-tutorials/preserve-order-in-testng

  1. 如果您想确保课程中的优先顺序,您必须执行以下操作:
  2.   

    @Test(优先级= 1)           public void Test1(){}

         

    @Test(优先级= 2)           public void Test2(){}

         

    @Test(优先级= 3)           public void Test3(){}

    priority鼓励执行顺序,但不保证先前的优先级已经完成。 test3可以在test2完成之前启动。如果需要保证,则声明依赖。

    与声明依赖关系的解决方案不同,即使一个测试失败,也会执行使用优先级的测试。根据{{​​3}}

    ,可以使用@Test(... alwaysRun = true ...)处理依赖关系的这个问题