为什么抛出新的SkipException()跳过我的所有方法?

时间:2017-10-23 11:30:21

标签: java selenium selenium-webdriver testng

为什么抛出新的SkipException()会跳过所有类的所有方法?

  1. 第一类有一个失败的方法,因此跳过该类中的其余方法,并将skipcounter设置为0.
  2. 第二类应该执行所有方法,并且所有方法都应该在第二类中传递,因为跳过计数器设置为0并且在执行第一类之后。
  3. 以下代码似乎跳过所有方法,即使第一类中只包含一个assert.fail?

    测试基地:

    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeClass;
    import org.testng.ITestResult;
    import org.testng.SkipException;
    
      public class TestBase {
            static int numb = 0;
          @BeforeMethod
          public void beforeMethod() {
              if(numb == 1) {
                    throw new SkipException("Skipping this test");
              }  
          }
    
          @AfterMethod
          public void afterMethod(ITestResult testResult) {
                if (testResult.getStatus() == ITestResult.FAILURE) {
                    numb = 1;
                }
          }
    
          @BeforeClass
          public void beforeClass() {
              TestBase.numb = 0;
          }
    

    测试1:

    import org.testng.annotations.Test;
    
    public class Test1 extends TestBase {
        @Test(priority = 1)
        public void test1() throws Exception {
            Assert.fail();
        }
    
        @Test(priority = 2)
        public void test2() throws Exception {
            System.out.println("method2");
        }
    
        @Test(priority = 3)
        public void test3() throws Exception {
            System.out.println("method3");
        }
    }
    

    的Test2:

    import org.testng.annotations.Test;
    
    public class Test2 extends TestBase {
        @Test(priority = 1)
        public void test1() throws Exception {
            System.out.println("method4");
        }
    
        @Test(priority = 2)
        public void test2() throws Exception {
            System.out.println("method5");
        }
    
        @Test(priority = 3)
        public void test3() throws Exception {
            System.out.println("method6");
        }
    }
    

    enter image description here

    控制台输出:

    ..
    ... TestNG 6.9.10 by Cédric Beust (cedric@beust.com)
    ...
    
    [TestNG] Running:
      C:\Users\Gianni.Bruno\Desktop\BuyAGiftFramework\BuyAGiftFramework\Test.xml
    
    [TestRunner] Starting executor for test BuyAGift Automation Tests with time out:2147483647 milliseconds.
    SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
    SKIPPED CONFIGURATION: @AfterMethod afterMethod
    SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
    SKIPPED CONFIGURATION: @AfterMethod afterMethod
    SKIPPED CONFIGURATION: @BeforeClass beforeClass
    SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
    SKIPPED CONFIGURATION: @AfterMethod afterMethod
    SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
    SKIPPED CONFIGURATION: @AfterMethod afterMethod
    SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
    SKIPPED CONFIGURATION: @AfterMethod afterMethod
    FAILED: test1
    junit.framework.AssertionFailedError
        at junit.framework.Assert.fail(Assert.java:47)
        at junit.framework.Assert.fail(Assert.java:53)
        at BuyAGiftFramework.test.Test1.test1(Test1.java:9)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    
    SKIPPED: test2
    SKIPPED: test3
    SKIPPED: test1
    SKIPPED: test2
    SKIPPED: test3
    
    ===============================================
        BuyAGift Automation Tests
        Tests run: 6, Failures: 1, Skips: 5
        Configuration Failures: 0, Skips: 11
    ===============================================
    
    
    ===============================================
    BuyAGift_Automation_Scripts_by_GBruno
    Total tests run: 6, Failures: 1, Skips: 5
    Configuration Failures: 0, Skips: 11
    ===============================================
    
    [TestNG] Time taken by org.testng.reporters.JUnitReportReporter@366e2eef: 14 ms
    [TestNG] Time taken by org.testng.reporters.XMLReporter@1936f0f5: 16 ms
    [TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@3f2a3a5: 32 ms
    [TestNG] Time taken by org.testng.reporters.jq.Main@614c5515: 94 ms
    [TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 16 ms
    [TestNG] Time taken by org.testng.reporters.EmailableReporter2@6537cf78: 19 ms
    

    测试执行XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <suite name="Automation_Scripts_by_GB" verbose="2" parallel="classes" thread-count="1">
    
        <test name="BuyAGift Automation Tests">
            <packages>
                <package name="BuyAGiftFramework.test.*"></package>
            </packages>
        </test>
    </suite>
    

1 个答案:

答案 0 :(得分:2)

configFailurePolicy的默认行为是“跳过”。因为如果在配置方法中出现异常,则无需运行测试。但是,如果您仍想运行测试,请将此配置更改为“继续” 可以通过更新配置

来实现

  <suite name="SuiteName" parallel="tests" thread-count="1" verbose="10" configfailurepolicy="continue">