1

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

我的场景是这样的:
场景:测试与我的服务器的连接给
定获取服务器 ipaddress
当我按下连接时
,我应该连接

当我说“获取服务器 ipaddress”时,我可以读取命令行参数。是否可以??

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

4

3 回答 3

0

Specflow 没有提供任何机制来做到这一点。

虽然我可以理解您为什么认为您想要这样做,但请仔细考虑通过将您的测试链接到外部依赖项(例如您要连接的服务)会发生什么。虽然您已经为自己构建了一种自动化一组测试的方法,但它们失败的原因有很多。例如,服务器未运行,配置无效,甚至客户端和服务器的版本存在差异。

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

但如果你真的想继续

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

于 2013-06-25T13:42:24.503 回答
0

我会使用 .net 配置系统 - 将您的服务器连接字符串放入 connectionstrings 设置元素中(或者如果您反对将非数据库的内容放在那里,请使用 appsettings)并从您的设置中读取。如果您想为不同的环境使用不同的配置文件,请使用配置转换来创建不同的配置。这将允许您保留项目中的所有内容,而不必依赖于为您的应用程序设置环境变量。您可以使用命令行转换执行工具脚本创建转换后的配置文件。

我做了一些类似的事情,将配置文件与我的规格打网页来切换我为 selenium webdriver 使用的驱动程序,最后只是用不同的配置文件多次复制我的规格程序集,这样我就可以从不同的目录运行以执行不同的浏览器。你可以做一些类似的事情来连接到不同的机器,或者只是吐出不同的配置文件并将它们交换进你的执行目录(或者当你想要执行不同的东西时手动更改配置)。

您还应该得到强制性的“该场景并不是真正的 bdd 场景,应该更多地是关于业务能力的故事,而不是您所拥有的技术场景,以便按照预期的方式使用像 specflow 这样的 bdd 工具”声明一个完整的答案。

于 2013-07-15T13:05:39.673 回答
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 对象检索。然后使用该参数的值来检索上面的正确测试数据文件。

“<environment>-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;
于 2021-08-11T13:41:51.213 回答