在TestNG中执行测试

时间:2016-11-28 13:45:41

标签: java selenium testng appium

我有两次测试需要一次又一次地运行几次。

期望的场景是:"第一次测试","第二次测试","第一次测试","第二次测试"等等...

实际情况是:"首先测试","第一次测试","第二次测试","第二次测试"。

@Test (priority = 1, invocationCount = 3)
public void first() {
    System.out.println("first test");
}

@Test (priority = 2, invocationCount = 3)
public void second() {
    System.out.println("second test");
}

如何实现我想要的方案?

此处的另一个要求是,在第一次测试时,Android手机应该是第一个设备,iOS手机应该是第二个。 在第二次测试中,iOS手机应该是第一个设备,Android应该是第二个。 所以这意味着我需要使用不同的xml文件。

<test name="TwoDevices - ios first">
    <parameter name="appName" value="App2"/>
    <parameter name ="device" value="IOS/iphone6_plus"/>
    <parameter name ="secondDevice" value="ANDROID/lg4_v5"/>
    <classes>
        <class name="com.TestFactory"/>
    </classes>
</test>

3 个答案:

答案 0 :(得分:0)

使用@AfterMethod注释

尝试此操作
    @Test (invocationCount=3)
     public void first() {
     System.out.println("first test");
    }
    @AfterMethod
    public void second() {
    System.out.println("second test");
    }

答案 1 :(得分:0)

使用TestNG的depends on method属性:

@Test (priority=1,invocationCount = 3)
public void first() {
  System.out.println("first test");
}

@Test (priority=2,invocationCount = 3, dependsOnMethods = { "first" })
public void second() {
  System.out.println("second test");
}

答案 2 :(得分:0)

您可以使用a factory并运行它(而不是测试类):

public class TestFactory {
  @Factory
  public static Object[] createInstances() {
    int number = 3;
    Object[] result = new Object[number]; 
    for (int i = 0; i < number; i++) {
      result[i] = new Test();
    }
    return result;
  }
}

public class Test {
  @Test
  public void first() {
    System.out.println("first test");
  }

  @Test(dependsOnMethods="first")
  public void second() {
    System.out.println("second test");
  }
}