当前位置: 首页 > 知识库问答 >
问题:

如何为功能测试的每个示例创建测试夹具

羊慈
2023-03-14

我是斯卡拉诺布。

我目前尝试使用specs2为基于Play(Scala)的web应用程序创建功能测试。示例本身很简单,即:

class SignInSpec extends PlaySpecification {

  // bring the workflow steps in scope and instrument browser with them    
  import utils.WorkflowSteps.AuthSteps

  "An activated user".should {
    "be able to sign in to the admin console" in new WithDbData(webDriver = WebDriverFactory(FIREFOX)) {

      // this should be: browser.signIn(testData.manager)
      // with the manager already persisted in the database
      browser.signIn(Manager(None, "me@home.com", "12341234", "John", "Doe", List("admin")))
    }
  }
}

我想实现的是为每个示例提供一组定义的测试数据,其中一些数据已经保留在数据库中。因此,我需要围绕每个示例进行设置和拆卸方法,以准备TestData用例类,用适当的数据填充它并保留其中的一些数据,以便该示例可以从定义的数据库状态开始。最终,我想要一个插件机制,其中插件为一组示例定义了测试数据(将其视为贷款模式的应用)。

到目前为止我所做的:

  • 我试图使用一些 Around 的味道,但我不知道如何将数据输入到示例中,因为我必须添加一个额外的返回值。
  • 我尝试了 specs2 的 ForEach 上下文,但这与 Play 的 WithBrowser 冲突
  • 我玩了隐式vals,但我再次不知道如何向使用DelayedInit从构造函数转换为函数调用参数的块添加隐式参数

任何想法如何着手实现以下目标?

  • 从使用单个参数调用示例的附加特征或类扩展规范或示例TestData
  • 这个额外的trait或类应该能够准备测试数据并保留其中的一部分
  • 这个附加的trait或类应该与NevBrowser
  • 兼容

共有2个答案

相旭
2023-03-14

一种解决办法可以是:

 case class TestData(manager: Manager) extends WithDbData(webDriver = WebDriverFactory(FIREFOX))


 class SignInSpec extends PlaySpecification with ForEach[TestData] {

   // bring the workflow steps in scope and instrument browser with them    
   import utils.WorkflowSteps.AuthSteps

   "An activated user".should {
     "be able to sign in to the admin console" in { data: TestData =>
        import data._

        browser.signIn(manager)
     }
   }

   def foreach[R : AsResult](f: TestData => R): Result = ???
 }

这是以<code>导入数据为代价的_,但这也避免了以前解决方案的双重嵌套。

秦滨海
2023-03-14

一种方法是使用所谓的“贷款固定装置”:

     def withTestData(test: TestData => Unit) = {
       val data = setupTestData() 
       try { 
         test(data)
       } finally {
         destroyTestData(data)
       }
     }



    "An activated user" should "be able to sign in to the admin console" in withTestData { data =>
       new WithDbData(webDriver = WebDriverFactory(FIREFOX)) {
         browser.signIn(data.manager)
       }
     }

等等..

 类似资料:
  • 根据以下链接:https://stackoverflow.com/a/20056622/1623597 https://stackoverflow.com/a/15640575/1623597TestNG不会在每个方法测试中创建新实例。 我有spring boot应用程序。我需要编写集成测试(控制器、服务、存储库)。有时为了创建新的测试用例,我需要数据库中的一些实体。为了忘记数据库中任何预定义的实

  • 我的要求如下: > 我有几个.feature文件。我想创建所有这些特性文件通用的测试数据。一旦创建了测试数据,场景将从特性文件运行。 我还想要一些信息后,测试数据创建回来。例如,我创建的数据的ID。所以我可以使用这些信息来调用API,在我的场景中添加有效负载。 null 现在我已经在test-data-details.feature文件中拥有了测试数据对象。在包含测试场景的特性文件的后台部分,我将

  • 主要内容:功能测试的目标功能测试是软件测试的一个分支,旨在验证软件应用程序的功能,而不管功能是否根据需求规范运行。通过给出适当的输入值,确定输出并使用预期输出验证实际输出来测试每个功能。 功能测试包括通过GUI(图形用户界面),API(应用程序接口),安全性,数据库,客户端应用程序,服务器应用程序和应用程序功能进行测试。黑盒测试方法用于功能测试,其中测试内部逻辑的工作而不窥视内部代码。 功能测试的目标 功能测试的目标是检

  • 功能测试从用户的角度验证场景。它类似于验收测试。 但是它不是通过 HTTP 进行通信,而是填充环境,如(填充)POST 和 GET 参数, 然后直接在代码里执行 Application 实例。 功能测试通常比验收测试快,并且在失败时提供详细的堆栈跟踪。 根据老司机的经验,功能测试应该是首选的,除非有专门的 Web 服务器设置 或者由 JavaScript 构建的复杂 UI。 功能测试是借助于具有良

  • 我试图将测试用例导入到JIRA与Zephar Testcase导入器:我按照Zephar网站上的教程,这是我在日志中得到的消息: 2015年10月26日星期一16:23:58 CETfile:///Users/Sam/Downloads/AOTCDM10-地理标记。xlsx规范化成功。。!2015年10月26日星期一16:23:58 CET AOTCMD 10-地理标记。xlsx导入成功。。! 但

  • 主要内容:为什么进行非功能性测试,在非功能测试下测试的参数,非功能测试的优点,非功能测试的缺点非功能测试是一种软件测试,用于测试非功能性参数,例如:软件的可靠性,负载测试,性能和责任。非功能测试的主要目的是根据非功能参数测试软件系统的读取速度。在功能测试之前,从未测试过非功能测试的参数。 非功能性测试作为功能测试也非常重要,因为它在客户满意度中起着至关重要的作用。 例如,非功能性测试将测试有多少人可以同时在任何软件上工作。 为什么进行非功能性测试 功能和非功能测试对于新开发的软件都是强制性