跳过specflow步骤并继续执行hooks中的以下步骤

问题描述 投票:0回答:2

我希望忽略一个随机步骤(根据某些条件),并且应执行所有其他以下步骤而不是跳过。为此,我需要在前面的步骤挂钩中执行此操作,如果它匹配某些条件,则应忽略当前步骤,并应执行其他后续步骤。

我尝试使用assert.pass或assert.ignore,但它只是结束了这个场景。我希望测试继续进行,同时忽略具体步骤。

结果。我想要一个可用于多个客户端的动态场景。现在,某些客户不需要执行所有步骤。根据我想要跳过一些步骤并转到 nsxt 步骤的客户端。

例如:

Scenario: add number 
    Given im on calculator
    When i add number 5 
    And number 6 
    And number 5 
    Then output result

Examples:
    | Client |
    | test1  |
    | test2  |

对于客户端 2,我可能希望能够为客户端 1 运行步骤添加数字 5 字节,但不能这样做。在之前的步骤中添加了条件以检查客户端和步骤文本,但无法跳到下一步以获得结果

c# selenium-webdriver automation hook specflow
2个回答
0
投票

我有想法,但它不能解决每个随机步骤的问题。 如果您确切知道哪里可能失败,则将 try catch 块放入此步骤。 在 catch 中放置一个断点。 一旦调试并遇到失败,请使用 Visual Studio - 在 Assert.Fail 之后的行中“设置下一个语句”来跳过此错误。 这是伪代码:

try
{
     <your step code>
}
catch  (Exception ex) 
{
    <put breakpoint here>
    <log.print(ex);>
    <skip here the Assert.Fail (... )>
}

0
投票

我认为“跳过步骤”是一个有效的要求,特别是对于设置步骤,当定义适当的客户端暂时不合理时。

举个例子 - 我有带有“后台”步骤的功能,可以在内部创建被测系统(SUT)。这些场景将运行后台步骤,然后运行其通常的测试步骤。现在,我们需要使用外部 SUT 运行相同的场景,以实现错误重现、错误修复等。
跳过那些在本地创建/设置 SUT 的步骤并继续执行其他步骤(假设有一个外部 SUT)似乎更快更容易。

我在以下人员的帮助下实现了这一目标:

  1. 添加关键字,例如
    [LocalSetup]
    在小黄瓜步骤中需要跳过。
  2. 创建
    BeforeTest
    Hook,注入
    ScenarioContext
  3. 在钩子中使用
    ScenarioContext.StepContext
    来查找步骤是否标记为
    [LocalSetup]
    并检查某些条件,然后将跳过/不跳过决策保存在 StepContext 字典中。例如
    StepContext["SkipSetup"] = true
  4. 修改步骤实现,添加对 StepContext 的初始检查并立即返回 if 。
if (scenarioContext.StepContext.ContainsKey("SkipSetup") && scenarioContext.StepContext["SkipSetup"]) 
{ 
    Log.Warning($"Skipping step xyz"); 
    return;
}

适用于 Specflow 3.9.40
希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.