【问题标题】:Java Selenium Junit Maven: Way to parametrize tests?Java Selenium Junit Maven:参数化测试的方法?
【发布时间】:2023-03-20 20:41:01
【问题描述】:
我有一个在我们创建的大量网站上运行的测试套件。大多数站点的工作方式相同,因此我可以在所有站点上运行所有测试,而不是有很多重复的代码。
我现在有几个测试,我只想在几个站点上运行,有没有办法只在 URL 用于站点 A、B 或 C 时运行这些测试?
对于我在属性文件中读取的每个站点,其中包含测试中所需的 url 和其他信息,是否有可能有一个属性 ignoreTests= 后跟要忽略的测试,然后当我读取属性文件中的@Before 部分的测试我可以设置每个 @Test 读入被忽略。
【问题讨论】:
标签:
java
maven
junit
selenium-webdriver
【解决方案1】:
您在此处询问的所有内容都可以通过 TestNG 而不是 Junit 获得。
测试用例的参数化在this 好教程中有描述。
至于测试用例的选择性运行,我认为分组会很有用,here 是教程。
一般来说 TestNG hase greate documentation 我推荐你阅读。
如果您无法切换到 TestNG,请查看 this 教程,了解 Junit 中的测试参数化。
Here 是关于 Junit 测试分组的。
【解决方案2】:
Junit 使用 Assume 动态忽略测试。
使用@Before 方法将URL 写入字段。您可以使用 Assume 进行基于 URL 的测试。如果 URL 不是“firstValidUrl”或“secondValidUrl”,则忽略以下测试。
org.junit.Assume.assumeTrue(url.equals("firstValidUrl") || url.equals("secondValidUrl"));
您可以使用Hamcrest 获得更好的声明:
org.junit.Assume.assumeTrue(url, org.hamcrest.Matchers.isIn("firstValidUrl", "secondValidUrl"));
使用静态导入和 Hamcrest:
assumeTrue(url, isIn("firstValidUrl", "secondValidUrl");
【解决方案3】:
是的,您可以使用 JUnit 进行参数化,但您需要确保您使用的是 JUNit 4.11 或更高版本。 JUNit 在此之前没有参数化。 JUnit 具有几乎与 TestNG 完全一样的数据提供者和注释,使用二维对象数组(列表)。