首页 文章

每个测试方法都有新的WebDriver实例?

提问于
浏览
18

在Selenium-webdriver中创建webdriver实例的最佳实践是什么?每个测试方法,每个测试类或每次测试运行一次?

它们似乎相当(非常)昂贵,但在测试之间保持开放可能会在测试方法之间泄漏信息 .

或者是否有另一种选择 - 单个webdriver实例是单个浏览器窗口(不包括弹出窗口),还是有一种从给定驱动程序实例启动新窗口/会话的方法?

谢谢马特

2 回答

  • 14

    我发现在使用真实浏览器时,在测试方法之间重复使用浏览器实例可以节省大量时间,例如: Firefox浏览器 . 使用HtmlUnitDriver运行测试时,几乎没有什么好处 .

    关于不确定性测试的危险性,它是完全确定性测试与您的时间之间的权衡 . 集成测试通常涉及这些权衡 . 如果您想要完全确定性的集成测试,您还应该担心在测试运行之间清除数据库/服务器状态 .

    如果要重用浏览器实例,您必须做的一件事是在运行之间清除/存储cookie .

    driver.manage().deleteAllCookies();
    

    我在tearDown()方法中这样做 . 此外,如果您的应用程序在客户端存储任何数据,您需要清除它(可能通过JavascriptExecutor) . 对于正在测试的应用程序,在执行此操作后,它应该看起来像一个完全不相关的请求,这确实可以最大限度地降低不确定行为的风险 .

  • 8

    如果您的自动化集成测试的目标是进行可重复的测试,那么我建议每个测试执行一个新的webdriver实例 .

    每项测试都应该独立,独立于任何其他测试或副作用 .

    就个人而言,我唯一觉得比难以复制的bug更令人沮丧的是,你不信任的非确定性测试 .

    (这对于管理测试数据本身更为重要,特别是当您查看可以修改持久应用程序状态的测试时,例如CRUD操作 . )

    是的,额外的测试执行时间是昂贵的,但最好是花时间调试测试 .

    一些可能的解决方案可以帮助抵消这种损失,将测试直接推送到构建过程中,超越持续构建到持续集成的方法 .

    还尝试限制集成测试的范围 . 如果你有很多繁重的集成测试,耗费执行时间,试着重构 . 相反,增加底层服务调用(业务逻辑所在的位置)的更轻量级单元测试的覆盖范围 .

相关问题