gpt4 book ai didi

eclipse - JUnit 4 中是否有与 testNG 的 @BeforeSuite 等效的东西?

转载 作者:行者123 更新时间:2023-11-28 19:47:31 24 4
gpt4 key购买 nike

我是测试自动化领域的新手,如果这是一个愚蠢的问题,请原谅我,但谷歌这次让我失望了。或者至少我读过的任何东西都让我更加困惑。

我在 Eclipse 中使用 JUnit 4 和 Selenium Webdriver。我有几个测试需要作为一个套件运行,也需要单独运行。目前,这些测试在单独运行时运行良好。在测试开始时,会向测试人员/用户显示一个输入框,首先询问他们希望在什么服务器上进行测试(这是一个成为 URL 一部分的字符串变量)以及他们希望针对什么浏览器进行测试。在套件中运行测试时,会在每个测试开始时询问用户,因为显然这已编码到他们的每个 @Before 方法中。

我如何一次接受这些值,并将它们传递给每个测试方法?

因此,如果 server = "server1"和 browser = "firefox"那么 firefox 是我希望 selenium 使用的浏览器,我希望它打开的 URL 是 http://server1.blah.com/对于以下所有测试方法。我一直使用单独的 @Before 方法的原因是因为每种测试方法所需的 URL 略有不同。即每种方法测试不同的页面,例如 server1.blah.com/something 和 server1.blah.com/somethingElse

测试运行良好,我只是不想继续输入值,因为测试方法的数量最终会非常大。

如果在 testNG 中有更简单的方法,我也可以将我的测试转换为 testNG。我认为 @BeforeSuite 注释可能有效,但现在我不确定。

非常感谢任何建议和批评(建设性的)

最佳答案

您可以在对 JUnit 4 Test invocation 的回答中调整为套件设置全局变量的解决方案。 .

基本上,您扩展 Suite 以创建 MySuite。这将创建一个可从您的测试访问的静态变量/方法。然后,在您的测试中,您检查这个变量的值。如果已设置,则使用该值。如果没有,那么你明白了。这允许您运行单个测试和一组测试,但您只会询问用户一次。

因此,您的套件将如下所示:

public class MySuite extends Suite {
public static String url;

/**
* Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>
*
* @param klass the root class
* @param builder builds runners for classes in the suite
* @throws InitializationError
*/
public MySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
// put your global setup here
MySuite.url = getUrlFromUser();
}
}

这将像这样在您的套件中使用:

@RunWith(MySuite.class)
@SuiteClasses({FooTest.class, BarTest.class, BazTest.class});

然后,在您的测试类中,您可以在@Before/@After 中做一些事情,或者更好地查看TestRule。 ,或者如果你想要之前和之后的行为,请查看 ExternalResource .外部资源看起来像这样:

public static class FooTest {
private String url;

@Rule
public ExternalResource resource= new ExternalResource() {
@Override
protected void before() throws Throwable {
url = (MySuite.url != null) ? MySuite.url : getUrlFromUser();
};

@Override
protected void after() {
// if necessary
};
};

@Test
public void testFoo() {
// something which uses resource.url
}
}

您当然可以外部化 ExternalResource 类,并在多个测试用例中使用它。

关于eclipse - JUnit 4 中是否有与 testNG 的 @BeforeSuite 等效的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com