我想弄清楚是否有可能(或者我是否有点傻。)
我有一个非常简单的Excel工作表 - 2列,一列是搜索词列表,第二列是预期URL列表。我通过selenium运行它,它将导航到谷歌,打开Excel工作表,搜索术语,如果预期的结果出现通过测试。它对表格中的三行执行此操作。都好。但是,我希望@Test每一行 - 但我无法弄清楚如何实现这一目标。
下面是测试代码,就像我说的那样我无法完成这项工作 - 目前它已经运行但是看起来像是一个有3次不同搜索的单一测试。
@Test
@Severity(SeverityLevel.CRITICAL)
public void driveDatData() throws InterruptedException, BiffException, IOException {
parameters = WebDriverSteps.currentDriver.toString();
steps.openWebPage("http://www.google.co.uk");
FileInputStream fi = new FileInputStream("C:\\temp\\sites.xls");
Workbook w = Workbook.getWorkbook(fi);
Sheet s = w.getSheet("Sheet1");
for (int i=1;i<=s.getRows(); i++)
{
if (i > 1)
{
steps.goToURL("http://www.google.co.uk");
}
steps.search(s.getCell("A" + i).getContents());
Assert.assertTrue("Check the " + s.getCell("A" + i).getContents() + " link is present", steps.checkForTextPresent(s.getCell("B" + i).getContents()));
}
}
答案 0 :(得分:0)
一些事情:
我认为将测试数据放在外部Excel工作表中是有意义的吗?否则,更常见的方法是将项目中的测试数据作为测试资源。另外我认为有各种各样的框架可以帮助您从excel文件中检索测试数据。
说完这个:
更改代码,将测试数据填充到@Before
的数据结构中,编写测试不同内容的不同@Test
。这也将测试数据的检索与实际测试分开(这在可维护性和职责方面是一件好事)。如果文件读取/性能存在问题,您可能希望使用@BeforeClass
每个测试类只执行一次。
@Before
// read file, store information into myTestData
@Test
// tests against myTestData.getX
@Test
// tests against myTestData.getY
答案 1 :(得分:0)
对于任何好的测试代码,复杂性应该是1.任何循环都应该由参数化测试替换。请查看https://github.com/junit-team/junit/wiki/Parameterized-tests。
答案 2 :(得分:0)
我建议您将 Feed4JUnit 添加到您的项目中。 它是高度可配置的,我知道的唯一一个可以通过Excel支持进行参数化JUnit和TestNG测试的库。
@RunWith(Feeder.class)
public class AddTest {
@Test
@Source("http://buildserv.mycompany.com/wiki/myproject/tests/add.xls")
public void testAdd(int param1, int param2, int expectedResult) {
int result = MyUtil.add(param1, param2);
assert result == expectedResult;
}
}
此示例直接来自Feed4Junit网站。
重要的是要注意参数是从左到右读取的。
每一行都是一个测试,每列必须有有效值,即如果一列有3行相同的值,那么它需要出现在每一行中。
答案 3 :(得分:0)
经过一些努力,设法使用@RunWith在JUnit中工作。找到了一些例子,虽然不是我想要的,却给了我足够的洞察力,让我用JUnit来解决这个问题。