无法在@Test方法中使用@BeforeGroup中定义的变量

时间:2016-10-07 06:33:44

标签: java testng

I have 3 `@Test` methods in three different classes that extends one base class.

测试1:

@Test(groups = "group1")
public void test1() {
    System.out.println("Test1 value : " + var); 
}

测试2:

@Test(groups = "group2",dependsOnGroups={"group1"})
public void test2() {
    System.out.println("Test2 value : " + var); 
}

测试3:

@Test
public void test3() {
    System.out.println("Test3 value : " + var); 
}

基类:

公共类TestBase {

public int var = 0;

@BeforeGroups(value = { "group1", "group2" })

void initialize() {

    System.out.println("Before group");

    var = 1; 

} 

}

我需要在{test1()'和'test2()'之前执行initialize()方法。变量var的值仅用于这些方法。

预期产出:

测试:在小组之前

Test1值:1

Test3值:0

测试:在小组之前

Test2值:1

但是使用上面的代码,test2中var的值也是0。 如何修复代码以初始化属于组group1和group2的方法的变量?

3 个答案:

答案 0 :(得分:1)

这就是你想要的:

package practise;

import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;

class TestBase {
    public int var = 0;

    @BeforeGroups(value = { "group1", "group2" })
    void initialize() {
        System.out.println("Running Before group");
        var = 1;
    }
}

/**
 * @author mrunal
 *
 */
public class SO39910848 extends TestBase {

    @Test(groups = "group1")
    public void test1() {
        System.out.println("Running test1 with value of var as: " + var);
    }

    @Test(groups = "group2",dependsOnGroups={"group1"})
    public void test2() {
        System.out.println("Running test2 with value of var as: " + var);
    }

    public void test3() {

    }
}

输出:

  

在组之前运行
运行test1,其值为var:1
运行   在组之前运行test2,其值为var:1
通过:test1   
通过:test2

     

===============================================      
默认测试

     

测试运行:2,失败:0,跳过:0

     

===============================================
默认套件
总测试运行:2,故障:0,跳过:0

答案 1 :(得分:1)

首先,TestNG按子类创建一个实例,var为0。

然后,它只在它之前创建的一个实例上调用@BeforeGroups一次。

如果TestNG按预期工作,您应该在某处找到var=1。 如果您希望在所有实例中共享值,则可以使用static var,或者更好地使用测试上下文:http://testng.org/doc/documentation-main.html#native-dependency-injectionhttp://testng.org/javadocs/org/testng/ITestContext.html

答案 2 :(得分:0)

答案:

  1. 在基类中将var设为public个全局变量。
  2. 为您var方法中的@BeforeGroups分配值。
  3. 在子类中访问var
  4. 但是您的测试套件上的设置很少,

    1. 为什么需要基础和子类设置?
    2. 如果要在运行测试时使用不同的值初始化var,该怎么办?
    3. 如果两个问题的答案都是,为了在少数测试中获得var值,那么您可以考虑使用TestNG将参数传递给使用{{{{1}之一注释的方法的功能1}}注释。

      通过这种方式,您的代码看起来会更清晰,更清晰。您可以查看How to supply parameters in TestNG?