如何将命令行参数传递给specflow测试场景

时间:2013-06-25 10:24:34

标签: c# command-line specflow

我正在尝试从命令行运行我的specflow测试场景,我想知道是否可以将任何命令行参数传递给我的specflow场景。

我的情况是这样的:
    场景:测试与我的服务器的连接
    鉴于获取服务器ipaddress
    当我按连接
时     然后我应该连接

当我说“获取服务器ipaddress”时,我能够读取命令行参数。有可能??

或任何人有任何其他解决方案或建议。先感谢您。

3 个答案:

答案 0 :(得分:0)

Specflow不提供任何机制来执行此操作。

虽然我可以看到为什么你可能认为你想要这样做,但要小心考虑将测试链接到外部依赖项(例如要连接的服务)会发生什么。虽然您将自己构建一套自动化测试的方法,但是它们失败的原因有很多。例如,服务器没有运行,配置不是虚拟的,甚至客户端和服务器的版本也不同。

就我个人想要测试进程间通信的完全回归的情况而言,我已经在我的测试中托管了客户端和服务器,这样我就可以更轻松地控制它们启动和停止这两个部分。即使这样,与切断通信堆栈的测试相比,这些测试也非常不稳定,并且偶尔会失败。

但如果你真的想继续

所有正在运行的代码都会继承命令启动时存在的环境变量的副本。您可以在启动SpecFlow之前使用set Name=value设置它们,并在您的Given方法中使用Environment.GetVariable(variableName)获取它们。

答案 1 :(得分:0)

我将使用.net配置系统 - 将您的服务器连接字符串放入连接字符串设置元素中(或者如果您有宗教异议将非数据库放在那里,请使用appsettings)并从您的设置中读取。如果要为不同的环境使用不同的配置文件,请使用配置转换来创建不同的配置。这将允许您保留项目中的所有内容,而不必依赖于为应用程序设置环境变量。您可以使用command line transform execution tool脚本创建已转换的配置文件。

我做了类似的事情,使用配置文件,我的规格命中网页切换我用于selenium webdriver的驱动程序,并且只是使用不同的配置文件多次复制我的规格程序集,所以我可以从不同的目录运行执行不同的浏览器。你可以做类似的事情,希望连接到不同的机器,或者只是吐出不同的配置文件,然后将它们交换进执行目录(或者只是在你想要执行不同的东西时手动更改配置)。

你也应该得到强制性的“那个场景不是真正的bdd场景,应该更像是一个关于业务能力的故事,而不是你在那里使用像specflow那样的bdd工具的技术方案”的声明这是一个完整的答案。

答案 2 :(得分:0)

我知道这是一篇较旧的帖子,但我解决这个问题的方法是利用 nunit 参数(我正在使用 nUnit 运行 SpecFlow)。因此,例如,我传入一个 environment 参数(即 Dev、QA、Prod),并基于该值,包含环境特定值(即 API 基本 URL)的相关测试数据文件将发生变化。我正在使用不同的“测试数据”文件,这些文件将包含基于传入的环境参数的特定于环境的值。

用于读取该参数的代码如下所示:

// get the correct URL and user creds based on the environment passed in
var environment = TestContext.Parameters.Get("environment");
var dataFile = $"{environment}-test-data.json";

如您所见,传递的环境参数正在由 nUnit TestContext 对象检索。然后使用该参数的值来检索上面正确的测试数据文件。

-test-data.json 文件如下所示:

{
  "baseUrl": "https://dev-some-endpoint.net",
}

最后,我从测试数据文件中读取值,如下所示:

var config = new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory).AddJsonFile(dataFile).Build();
var url = config.GetSection("baseUrl").Value;