热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

WhatsthebestpracticefortcreatingwebdriverinstancesinSelenium-webdriver?Oncepertestmeth

What's the best practice fort creating webdriver instances in Selenium-webdriver? Once per test method, per test class or per test run?

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

They seem to be rather (very!) expensive to spin up, but keeping it open between tests risks leaking information between test methods.

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

Or is there an alternative - is a single webdriver instance a single browser window (excluding popups), or is there a method for starting a new window/session from a given driver instance?

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

Thanks Matt

谢谢马特

2 个解决方案

#1


14  

I've found that reusing browser instances between test methods has been a huge time saver when using real browsers, e.g. Firefox. When running tests with HtmlUnitDriver, there is very little benefit.

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

Regarding the danger of indeterministic tests, it's a trade-off between totally deterministic tests and your time. Integration tests often involve trade-offs like these. If you want totally deterministic integration tests you should also be worrying about clearing the database/server state in between test runs.

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

One thing that you definitely should do if you are going to reuse browser instances is to clear/store the COOKIEs between runs.

如果要重用浏览器实例,那么你应该做的一件事就是在运行之间清除/存储COOKIE。

driver.manage().deleteAllCOOKIEs();

I do that in a tearDown() method. Also if your application stores any data on the client side you'd need to clear that (maybe via JavascriptExecutor). To your application which is under test, it should look like a completely unrelated request after doing this, which really minimizes the risk of indeterministic behaviour.

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

#2


6  

If your goal of automated integration testing is to have reproducible tests, then I would recommend a new webdriver instance for every test execution.

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

Each test should stand alone, independent from any other test or side-effects.

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

Personally the only thing I find more frustrating than a hard to reproduce bug, is a non-deterministic test that you don't trust.

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

(This becomes even more crucial for managing the test data itself, particularly when you look at tests which can modify persistent application state, like CRUD operations.)

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

Yes, additional test execution time is costly, but it is better then spending the time debugging your tests.

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

Some possible solutions to help offset this penalty is to roll your testing directly into your build process, going beyond Continuous Build to Continuous Integration approach.

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

Also try to limit the scope of your integration tests. If you have a lot of heavy integration tests, eating up execution time, try to refactor. Instead, increase the coverage of your more lightweight unit tests of the underlying service calls (where your business logic is).

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


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有