如何将参数传递给specflow运行器?

时间:2019-02-13 16:47:12

标签: c# continuous-integration arguments cucumber specflow

强制性免责声明:我是Specflow和C#的新手。谢谢您的理解。

我目前正在将一个黄瓜测试框架从Java转换为C#。

我当前的设置是这个。我有一个环境文件,其中定义了多个环境(dev,qa,prod等)。每个环境都有唯一的ID。我以前在Java框架中所做的就是通过Maven命令行调用传递要使用的环境的ID,而我的框架将负责其余的工作(使用System.getProperties("propertyName")读取ID,找到该文件并读取该变量(如果有该特定ID)。这将使我可以将测试框架插入Jenkins,并通过使用命令行传递不同的ID来进行不同的构建以在不同的环境中运行。

现在,我在查找如何使用specflow进行管理方面遇到了一些麻烦。我的意思是,我可以轻松读取文件,但我仍在努力解决的问题是如何将要使用的环境ID传递给specflow,以便可以从框架中获取它。这也是考虑到我计划将其上传到TFS,以便可以从那里启动测试(类似于在Jenkins中所做的测试)。

这里的目的是避免手动交换多个环境文件。

在不可能的情况下,有什么好的选择吗?

谢谢。

编辑:好的,所以我的一些同事建议我使用测试设置。在我的本地解决方案中,我可以为所需的每个环境生成1个文件。然后,在TFS中,我可以用覆盖值填充构建,这将很好用。

因此,我创建了一个dev.runsettings文件,并根据收集的内容,使用以下内容访问它的内容:

using Microsoft.VisualStudio.TestTools.UnitTesting;

TestContext context = ScenarioContext.Current.ScenarioContainer.Resolve<TestContext>();

我以[BeforeScenario]方法运行它。但是,它将引发异常。

Impossible to create an instance of Microsoft.VisualStudio.TestTools.UnitTesting.TestContext, because it is an abstract class

我在specflow的github上找到了关于此问题的thread,似乎应该解决了这个问题,但是我仍然遇到错误。

有什么想法吗?

EDIT2:好的,所以我最终意识到,由于我使用的是Nunit 3,因此不需要使用Microsoft.VisualStudio.TestTools.UnitTesting库,可以直接使用Nunit.framework库。这导致我遇到了新问题。我的TestContext.Parameters未填充。我已验证我的运行设置文件有效,并且已在VS 2017测试菜单中选中并检查了该文件。但是,这些参数不会在TestContext中读取并可用。我环顾了一下(整天都在处理整个问题),根据我发现的内容,它应该可以工作。而且我不知道为什么不这样做。

0 个答案:

没有答案