我正在尝试将我的测试挂钩到外部测试管理系统,以便他们可以向其报告结果。因此,每个测试方法都链接到测试数据库中的密钥。
如果我有一个@Test方法,我可以用其中的键设置一个变量,但如果我使用@BeforeMethod,这对我没有帮助。是否有一种简单的方法可以为每个@Test提供这一个参数,并为@BeforeMethod提供每个@Test的相同参数?
我正在尝试这个:
@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,所以我认为该功能应该被激活(据我所知,它自5.9以来一直是TestNG的一部分。)
@BeforeMethod位于一个不同的文件中,因为它位于包含@Test的测试类的超类中,但我认为这不应该有所作为。
是因为我正在使用@Test方法的默认参数吗?我试图避免使用某种DataProvider或Parameter,因为这些似乎过于沉重并且面向不同的事情,比如运行相同的@Test和许多不同的迭代数据。我想要做的就是定义一个特定于@Test方法的数据,然后让@BeforeMethod知道它是什么。
编辑:它似乎是由我尝试使用默认参数引起的。如果我尝试使用令人难以置信的笨重@DataProvider,它可以工作:
@DataProvider(name = "demo")
Object[][] key() {
return [["QA-123"]]
}
@Test(dataProvider = "demo")
void test(String zephyrKey){
...
}
这有效,但它......可怕。我无法为每一种测试方法创建DataProviders - 它不仅繁琐,而且对于DataProvider来说感觉完全错误。有没有更好的方法将这个静态数据从测试方法传递给before方法?
答案 0 :(得分:1)
您可以使用其中一个可用的@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 - Add custom attribute to @Test annotation