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

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

景恩
2023-03-14
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); 
}

基类:

公共类测试库{

public int var = 0;

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

void initialize() {

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

    var = 1; 

} 

}

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

预期产出:

测试:组前

Test1值:1

Test3值:0

测试:组前

Test2值:1

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

共有3个答案

陈昂熙
2023-03-14

答复:

  1. 在基类中将var设置为public全局变量

但在你的测试套件中几乎没有什么东西,

  1. 为什么需要基本类和子类设置
  2. 如果要在运行测试时使用不同的值初始化var,该怎么办

如果这两个问题的答案都是,在几次测试中获取var值,那么您可以考虑使用TestNG将参数传递给使用TestNG注释之一注释的方法的能力。

这样你的代码看起来更干净、更沉稳。您可以看看如何在TestNG中提供参数?

锺离声
2023-03-14

首先,TestNG通过子类创建一个实例,其中var为0。

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

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

耿俊彦
2023-03-14

这就是你想要的吗:

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() {

    }
}

输出:

在组之前运行
在组之前运行变量为:1的test1
在组之前运行
在变量为:1的test2
通过:test1
通过:test2

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

 类似资料:
  • 我想为基本测试数据位置设置一个全局变量,它可以在我的所有功能文件中使用。在karate-config.js中,我做了以下更改- var config={env:env,input_json_path:'com/company/project/module/testdata'} 在我的特写文件里,我试着用它- 当方法POST Then状态400时,给定路径“/MyService”和请求读取('cla

  • 我在使用GetCircleArea()方法时遇到问题。请帮忙。我坐在这里,不知道该怎么办了。 非常感谢。寻找答案!

  • 我有任务加载类别(按名称加载)和子类别中的所有产品。使用MySQL后,我创建了SQL查询: 正如你在类别名称中提到的“工具”。它工作得很好,但如果你有任何建议-你非常欢迎。在我的项目中,我正在使用Hibernate,名为Query。问题在于变量@pv。现在它未被编译,并将异常作为“意外令牌…”抛出有人知道如何在NamedQuery中使用变量吗?

  • 我在xslt中需要这个,但是xmlns:s=“{$service-uri}”没有提取: 如何提取名称空间定义中的service-uri变量?扎梅克

  • 问题内容: 考虑以下 几乎可 编译的Java 8代码: 您会注意到抛出编译器错误: 变量用户已在方法main(String [])中定义 我的问题是:为什么Lambda表达式会考虑与已经定义的Lambda表达式在同一行 初始化 的变量?我知道Lambda会在外部查找(并使用)局部变量,因此您不能将在Lambda内部使用的变量命名为与外部变量相同。但是为什么 要 定义的变量 被 认为 已经 定义?

  • 我是Gradle的新手,正在尝试通过gradle.properties文件创建一个可配置的变量。 为此,我创建了一个渐变。属性,并定义了如下生成目录: 在我的文件中,我引用了这样的变量: 这不起作用。如果我将替换为中的字符串,它会构建到正确的位置。为什么会发生这种情况? 以下是完整的build.gradle文件: