我正在尝试从命令行运行我的specflow测试场景,我想知道是否可以将任何命令行参数传递给我的specflow场景。
我的情况是这样的:
场景:测试与我的服务器的连接
鉴于获取服务器ipaddress
当我按连接
时
然后我应该连接
当我说“获取服务器ipaddress”时,我能够读取命令行参数。有可能??
或任何人有任何其他解决方案或建议。先感谢您。
答案 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 对象检索。然后使用该参数的值来检索上面正确的测试数据文件。
“
{
"baseUrl": "https://dev-some-endpoint.net",
}
最后,我从测试数据文件中读取值,如下所示:
var config = new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory).AddJsonFile(dataFile).Build();
var url = config.GetSection("baseUrl").Value;