由于开发,我们的团队通过SpecFlow,Selenium和Appium为Web和桌面环境提供了产品的自动化覆盖。为了简化自动化框架,我们决定针对Web和桌面重用现有的Specflow方案。但是,某些现有的Specflow方案无法实现自动化,因为应用程序驱动程序可能存在很多问题。因此,有必要在台式机的测试运行期间使用某种Specflow @ignore标记跳过某些测试方案,但是这些方案仍应能够在网络环境中运行。我试图用谷歌搜索,但是没有发现与我的问题有关的东西。 也许你们中的一些人已经解决了这个问题,可以给我一些解决的建议吗?
yichaohao 回答:有什么方法可以使用自定义标签忽略Specflow中的适当测试
有一种方法可以利用自定义标签忽略测试,但是您将必须使用specFlow内部接口IUnitTestRuntimeProvider
并在绑定中编写逻辑以在运行时忽略测试。
在功能文件中
@ignore
Scenario: mobile scenario
Given some common step for web and mobile
在绑定类BindingClass
public static ScenarioContext _scenarioContext;
绑定类构造器
public BindingClass(ScenarioContext scenarioContext)
{
_scenarioContext = scenarioContext;
}
这是绑定
[Given(@"some common step for web and mobile")]
public void someTest(){
if (BindingClass.scenarioContext.ScenarioInfo.Tags.ToString().Contains("ignore"))
{
var unitTestRuntimeProvider = (IUnitTestRuntimeProvider)
BindingClass._scenarioContext.GetBindingInstance((typeof(IUnitTestRuntimeProvider)));
unitTestRuntimeProvider.TestIgnore("ignored");
}
else {
//initiate appium driver or webDriver
}
}
如果它在功能文件中的脚本上找到@ignore
标签,它将忽略测试。您仍然可以在场景上使用其他标签。仅当找到@ignore
时,它才会忽略测试。对于网络方案,您只需删除@ignore
Scenario: web scenario
Given some common step for web and mobile