【发布时间】:2015-02-25 13:48:46
【问题描述】:
我有一个 Selenium 测试,它是在 Spock 框架的帮助下执行的。一般来说,它看起来像这样:
class SeleniumSpec extends Specification {
URL remoteAddress // Address of SE grid
Capabilities caps // Desired capabilities
WebDriver driver // Web driver
def setup() {
driver = new RemoteWebDriver(remoteAddress, caps)
}
def "some test" () {
expect:
driver.findElement(By.cssSelector("p.someParagraph")).text == 'Some text'
}
// other tests go here ...
}
这里的重点是,我的规范描述了某些组件的行为(在大多数情况下 - 网页视图/页面)。因此,这些方法有望实现一些与业务相关的逻辑(例如“单击按钮并期望在另一个字段中显示消息);但我想测试的另一件事是确保所有浏览器(功能)中的行为完全相同。
为了在“理想”世界中实现这一点,我想有一种机制来指定,应该多次使用特定的测试类,但使用一些不同的参数。但就目前而言,我看到了仅将数据集应用于单一方法的能力。
我只提出了几个实现这一点的想法(根据我目前对 Spock 框架的了解):
- 使用驱动程序列表并对所有列表成员执行每个操作。因此,对“驱动程序”的每次调用都将替换为“驱动程序。每个 {它}”调用。另一方面,这种方法很难准确地发现哪些驱动程序未通过测试。
- 使用方法参数和数据集在每次迭代时启动 Web 驱动程序的新副本。根据 Spock 的理念,这种方法似乎更合乎逻辑,但每次都需要执行大量的驱动程序和 Web 应用程序初始化操作。它还取消了执行“逐步”测试的能力,因为在测试方法之间不会保留驱动程序的状态。
- 这些方法的组合,当驱动程序保存在一个映射中,并且每个测试调用都有要使用的驱动程序的确切名称时。
如果有人遇到这种情况并可能提出想法,我将不胜感激,如何正确组织测试过程。有人还可以发现其他方法,或上述方法的优缺点。考虑另一种测试工具也是一种选择。
【问题讨论】: