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

TestNG—是否有一种轻量级(不是dataprovider,不是XML)方法在@Test和@BeforeMethods之间传递参数?

滕学义
2023-03-14

我正在尝试将我的测试连接到外部测试管理系统,以便他们可以向它报告结果。因此,每个测试方法都链接到测试数据库中的一个键。

如果我有一个@Test方法,我可以用其中的键设置一个变量,但如果我使用@BeforeMethod,这对我没有帮助。是否有一种简单的方法可以为每个@测试提供这一个参数,并且@BeforeMethod可以为每个@测试获得相同的参数?

我正在尝试:

@BeforeMethod
def startBrowser(Object[] testArgs) {
    println "@BeforeMethod: testArgs are $testArgs"
}

@Test
def test(String testKey = "QA-123") {
    println "@Test: The testKey is $testKey"
}

但是当我这样做时,我得到的输出看起来像:

@BeforeMethod: testArgs are []
@Test: The testKey is QA-123

这种方法是否有明显的错误?我的maven pom说我正在使用TestNG 6.9.10,所以我认为应该激活该功能(据我所知,它是TestNG自5.9以来的一部分)。

@BeforeMethod位于不同的文件中,因为它位于包含@Test的测试类的超类中,但我认为这不会有什么不同。

是因为我使用了@Test方法的默认参数吗?我试图避免使用某种类型的数据提供者或参数,因为这些数据提供者或参数似乎太重,而且面向不同的事情,比如用许多不同的数据迭代运行相同的@测试。我想做的就是定义一段特定于@测试方法的数据,然后让@BeforeMethod知道它是什么。

编辑:这似乎是由于我试图使用默认参数造成的。如果我尝试使用一个非常笨重的@DataProvider,它会起作用:

@DataProvider(name = "demo")
Object[][] key() {
    return [["QA-123"]]
}


@Test(dataProvider = "demo")
void test(String zephyrKey){
    ...
}

这是有效的,但它是...可怕的。我不能为每个测试方法创建DataProvider——这不仅很麻烦,而且对DataProvider的定义感觉完全错误。有没有更好的方法将这段静态数据从测试方法传递给之前的方法?

共有1个答案

庞彬
2023-03-14

您可以使用一个可用的@Test注释属性,如testName或description,并在您的@BeforeMethod中访问相同的属性。有其他优雅的方法可以做到这一点,但这大致就是我为我们拥有的测试框架向JIRA更新结果所做的。

@BeforeMethod
public void setup(final Method method) {
    final String zephyrID = method.getAnnotation(Test.class).testName();
}

@Test(testName = "zephyr_id_001")
public void test1(){
  //My test code
}

编辑:我确实检查了是否可以添加自定义注释属性,但无法这样做:TestNG-将自定义属性添加到@Test annotation

 类似资料:
  • 是否有办法在静态编程语言和Android中捆绑函数引用,以便可以从其他片段调用函数?例如,我的片段工厂方法如下所示: 我希望能够将我的tryAgainFunction保存在包中,以便进一步检索。 非常感谢! 编辑 最后,最合适的解决方案是使用热键的答案,然后在onViewCreated中使用传递的函数初始化监听器。完整代码如下: 谢谢大家的帮助!

  • 我试图通过动态输入要从中提取数据的工作表的名称,以这种方式重用现有的数据提供程序,将Excel文件中的数据加载到我的测试框架中。 示例:我正在从Login凭据表加载数据,该表代表成功登录测试的数据。第二个测试是失败的登录测试,它从InvalidLogin凭据表加载数据。第三个测试从第三个表UserInformation等中提取数据。我所遵循的udemy课程并没有真正涵盖这个主题,我觉得整个事情的实

  • 我不熟悉使用selenium和java实现页面对象模型自动化。我使用页面对象模型,将每个页面作为一个类,并将该页面中的操作作为方法。使用excel保存读取的测试数据。我有一个测试,可以使用各种参数来搜索客户,如客户编号、政策编号、姓氏、名字、WebReference、电子邮件等等。。。。。。现在,我必须在方法签名中提供所有参数,否则测试将失败,并出现数据提供程序不匹配错误。我有一个GetData方

  • 问题内容: 我使用了。 是否可以将两个数据提供程序逐步赋予 相同的 测试功能? 我可以将两个提供程序合而为一,但这不是我想要的。 我需要(与本示例不同)独立生成数据。 我想让两个提供商都接受相同的测试。这可能吗? 问题答案: 否,但是没有什么可以阻止您将这两个数据提供程序合并为一个,并指定其中一个作为您的数据提供程序:

  • 我需要向TestNG数据提供程序传递10多个参数,代码如下所示。。。 有谁能告诉我,如果我们需要使用DataProvider传递10个以上的参数,我们应该采取什么方法?是否有其他方法来声明测试方法的参数?

  • 问题内容: 只是一个关于如何在Java中传递参数的快速问题… 在这种情况下,stdout和stderr(用作tidy()中的参数)的值是否会更改为新的StringBuffer(buffer.substring(i))?我的假设是,它们将作为对象变量(对象指针)始终按值传递吗? 问题答案: 您错报了这里发生的事情-对象引用按值传递(创建了引用的副本),因此调用tidy时 不会 修改stdout和st