我正在寻找使用JUnit在selenium中编写测试用例的最佳实践。
如果某些测试使用的是开关,或者是否应将其拆分为不同的测试用例以避免测试中的条件或使用条件为“好” ?为什么?
编辑: 我需要知道你是否有选择拆分使用if&的测试用例。切换到较小的测试以避免使用它们中的条件,您是否愿意拆分它或者您可以使用junit selenium测试中的条件吗?
谢谢: - )
答案 0 :(得分:3)
这可能会有所帮助......
测试应该是简单的。快速。独立。和IDEMPOTENT
如果您有一个较大的switch
语句或if
阶梯,那么是。你应该将它们分成不同的测试。请考虑以下事项:(这是使用getting-started-with-selenium框架)
@Test @Config(url="http://someurl.com", browser = Browser.CHROME)
public void myLongTest() {
setText("#username", "some_username")
.setText("#password", "some_password")
.click("#btn-login")
.store("some_variable", getText("#element");
// some_variable will be "a" | "b" | "c"
switch ((String) get("some_variable")) {
case "a":
click("#a")
.validatePresent("#something");
break;
case "b":
click("#b")
.validatePresent("#something-else");
break;
case "c":
click("#c")
.validatePresent("#something-else-else");
break;
}
}
而不是长时间的测试,你可以将其分成三个不同的测试用例,每个测试用例一个,传统标准会很好,因为测试会更快。
@Test @Config(url="http://someurl.com", browser = Browser.CHROME)
public void myShortTest_CaseA() {
setText("#username", "some_username")
.setText("#password", "some_password")
.click("#btn-login")
.click("#a")
.validatePresent("#something");
}
@Test @Config(url="http://someurl.com", browser = Browser.CHROME)
public void myShortTest_CaseB() {
setText("#username", "some_username")
.setText("#password", "some_password")
.click("#btn-login")
.click("#b")
.validatePresent("#something-else");
}
@Test @Config(url="http://someurl.com", browser = Browser.CHROME)
public void myShortTest_CaseA() {
setText("#username", "some_username")
.setText("#password", "some_password")
.click("#btn-login")
.click("#c")
.validatePresent("#something-else-else");
}
答案 1 :(得分:1)
测试用例不应该有条件,因为你应该知道输入apriori。我不能想到的唯一条件是,如果你的测试用例应该可以在不同的环境中移植,那么根据它正在执行的环境,你会在其中有分支。但是,即使在这种情况下,它也应该测试程序的一个方面(例如,在Selenium中,您可以编写一个测试来单击按钮并检查其效果)。要测试几个方面,请编写几个测试用例。