【问题标题】:How to run specflow tests on a build Server?如何在构建服务器上运行 specflow 测试?
【发布时间】:2012-09-21 13:57:03
【问题描述】:

如何在构建服务器上使用 Nunit 2.6.1 运行 specflow 测试?

另外,您如何维护和组织这些测试,以便在构建服务器上成功运行多个自动化程序员编写单独的测试?

【问题讨论】:

  • 您使用什么构建服务器 (CI)?你读过这篇关于TeamCity Integration 的博文吗?
  • 我使用 TFS 2010 作为我们的构建服务器。
  • 您的构建管道现在如何?管道中是否还有其他类型的 nUnit 测试?

标签: c# specflow


【解决方案1】:

我现在将尝试回答您问题的第二部分:

“如何维护和组织这些测试以在构建服务器上成功运行多个自动化程序员编写单独的测试?”

这类测试极有可能变成无法维护的混乱,原因如下:

  • 步骤用于创建上下文(用于场景测试)
  • 可以从任何场景以任何顺序调用步骤

由于这两个简单的事实,很容易将此模型与过程/结构化编程进行比较。场景上下文和一些全局变量没什么区别,步骤是一些可以随时随地调用的方法。

我的团队为避免步骤文件中的大量混乱所做的工作是让它们尽可能地愚蠢。一个步骤所做的一切都是解析和调用将完成真正有意义的工作并保存当前测试的上下文的服务。我们将这些服务称为“xxxxDriver”(其中 xxxx 是我们正在处理的域对象)。

一个愚蠢的例子:

[Given("a customer named (.*)")]
public void GivenACustomer(string customerName)
{
  _customerDriver.CreateCustomer(customerName);
}


[Given("an empty schedule for the customer (.*)")]
public void GivenEmptySchedule(string customerName)
{
  var customer = _customerDriver.GetCustomer(customerName);
  _scheduleDriver.CreateForCustomer(customer);
}

“xxxxxDriver”将包含所有存储库、网络网关、存根、模拟或与相关域对象相关的任何内容。另一个重要的细节是,如果您将这些驱动程序注入到步骤文件中,specflow 将为每个场景创建一个实例,并在所有步骤文件中使用它。

这是我们发现的最好的方法,可以在维护和扩展步骤的方式上保持一定的一致性,而无需与一个大团队接触相同的代码库。另一个巨大的优势是它可以帮助我们找到类似的步骤来浏览驱动程序类中方法的用法。

specflow 代码库本身有一个明确的示例。 (查看驱动程序文件夹) https://github.com/techtalk/SpecFlow/tree/master/Tests/TechTalk.SpecFlow.Specs

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多