当前位置: 首页 > 面试题库 >

集成(selenium)测试后回滚数据库

壤驷鸿
2023-03-14
问题内容

是否有人对从集成测试框架(如Selenium)进行的回滚数据库事务的最佳实践或首选方式有任何建议?

这是当前的情况:我们有一个.net Web项目,其中包含许多在单元测试环境中可以正常工作的单元测试-
每个测试都html" target="_blank">继承一个父类,该父类在[SetUp]中打开一个事务,并在其中回滚该事务。 [TearDown]。每次测试后,我们的单元测试数据库都恢复到原始状态。

但是,一旦进入集成环境,情况就会改变。我们的持续集成服务器会自动编译我们的提交并将其提交到测试服务器,以便该服务器始终以最新的代码运行。我们还设置了一个Selenium实例来自动化用户与站点的交互。selenium测试基本上与现有的Selenium服务器通信,并告诉服务器诸如“启动浏览器并转到http://testsite/TestPage.aspx-在id为’def’的表单字段中输入文本’
abc’-断言新页面包含文字“ xyz””

每个测试的运行方式都与我们的原始单元测试类似,但是有一个重要的例外:Selenium所做的任何更改都是在完全不同的线程/应用程序中完成的,因此我们不能(我想,我们不能,至少)在测试拆解中将它们回滚。

我们还没有找到一个很好的解决方案。现在,我们正在使用SqlCommand执行sql语句来备份数据库,然后在测试结束时,将数据库设置为单用户,删除当前的db,然后还原旧副本-
这不是理想的副本,因为这样会有效地杀死附加到数据库的应用程序,并要求我们再次重新初始化该应用程序。

这是以前已经解决的问题吗?任何建议都很棒。

谢谢!


问题答案:

每次测试之前,我们正在运行一个drop / create-table脚本。这非常快,可以确保以前的测试没有遗留任何内容。

PS:我们正在使用NHibernate,它可以动态创建此脚本并在内存中的Sqlite上运行测试,这是光速。但是,如果我们切换到SqlServer,它仍然非常快。



 类似资料:
  • 我将此文档用于集成测试:ASP.NET核心集成测试,这是我的简化集成测试: 正如您所看到的,我正在向“/API/v1/application/acceptoffer”API发送一个HTTP请求,该API更新数据库中的一些实体,如果一切正常,则返回状态代码200。 一个解决方案是使用DbContext的单例,然后将所有测试包装在事务中,但问题是SQL不支持嵌套事务,如果API也使用事务,它将引发运行

  • 在spring boot中,我试图创建我的第一个事务性测试,但trasaction不起作用。 null 我需要的是: 将数据插入事务。 从事务中读取数据。 测试返回的数据。 回滚事务。

  •  Selenium 能被选为最好集成测试、回归测试方案,是因为: 1.Selenium IDE ,一个FireFox plugin,能自动记录用户的操作,生成测试脚本。 2. 生成的测试脚本可以用Selenium Core手工执行,也能基于Selenium RC放入Java,C#,Ruby的单元测试用例中自动运行。 3. 测试用例调用实际的浏览器(如IE、FireFox)来执行测试。和有些开源方案

  • 未能配置Spring Boot进行集成测试。冷你请看一下下面的代码: 实体 存储 库 测试配置 应用程序属性 测试用例 我尝试了不同的配置(其最新版本),但一直出现相同的异常: 更奇怪的是,异常的本质是让spring boot根据实体注释自动生成模式。因此,在插入的时候,spring必须创建表,但是看起来它并没有创建。如果有人给我一个想法,我做错了什么,或者如果有人已经面临这样的问题-请让我知道。

  • 我正在使用spring test运行JUnit测试,我的代码如下所示: 我想在所有测试之前回滚处于状态的数据库。表会回滚,但id生成的顺序会随着每次测试而增加。 请帮我找到在每次测试前设置起始值顺序的方法。 我正在使用Spring、Hibernate和HsqlDb

  • 英文原文:http://emberjs.com/guides/testing/integration/ 集成测试通常用来测试应用中得重要工作流。集成测试用来模拟用户交互和确认交互结果。 设置 为了对Ember应用进行集成测试,需要在测试框架中运行应用。首先需要将根元素(root element)设置为任意一个已知将存在的元素。如果根元素在测试运行时可见的话,这对测试驱动开发非常有用,带来的帮助非常