You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多次执行同一SpecFlow步骤时,如何用ScenarioContext存储多记录ID?

解决SpecFlow场景中存储多个Record ID的问题

你的问题核心在于每次执行创建记录的步骤时,都用单个值覆盖了ScenarioContext里的Record Ref,导致最后只能保留最后一条记录的ID。要在同一场景内收集所有生成的记录ID,我们只需要把存储的对象从单个字符串改成列表即可,具体实现如下:

1. 修改Given步骤定义,存储记录ID到列表

我们需要先检查ScenarioContext中是否已经存在存储记录ID的列表,如果没有就初始化一个,然后每次生成新的recordRef时添加到列表里:

[Given(@"""(.*)"" is created a record")]
public void GivenIsCreatedARecord(string username)
{
    // 生成唯一recordRef的逻辑
    var recordRef = <<some Logic>>;

    // 检查ScenarioContext中是否已有RecordRefs列表,没有则初始化
    if (!ScenarioContext.Current.ContainsKey("RecordRefs"))
    {
        ScenarioContext.Current["RecordRefs"] = new List<string>();
    }

    // 将新生成的recordRef添加到列表中
    var recordRefList = (List<string>)ScenarioContext.Current["RecordRefs"];
    recordRefList.Add(recordRef);
}

2. 编写Then步骤,获取所有记录ID进行校验

接下来在验证步骤中,我们可以从ScenarioContext取出这个列表,然后完成所有ID的校验逻辑:

[Then(@"admin is able to check all the record IDs")]
public void ThenAdminIsAbleToCheckAllTheRecordIDs()
{
    // 取出存储的所有recordRef列表
    var recordRefList = (List<string>)ScenarioContext.Current["RecordRefs"];

    // 这里编写你的校验逻辑,比如检查列表数量是否符合预期、每个ID是否有效等
    // 示例:验证列表长度等于场景中创建记录的次数
    Assert.IsTrue(recordRefList.Count > 0, "没有生成任何记录ID");
    
    // 遍历列表验证每个ID的有效性
    foreach (var refId in recordRefList)
    {
        Assert.IsFalse(string.IsNullOrEmpty(refId), $"记录ID {refId} 无效");
        // 其他自定义校验逻辑...
    }
}

3. 原Feature文件无需修改

你的两个Feature场景可以保持原样,因为步骤定义已经适配了多记录的情况:

Feature 1: 不同用户创建记录

Scenario: Record Creation for different Users
    Given "User 1" is created a record
    And "User 2" is created a record
    And "User 3" is created a record
    Then admin is able to check all the record IDs

Feature 2: 访客用户创建记录

Scenario: Record Creation for guest User
    Given "guest User 1" is created a record
    Then admin is able to check all the record IDs

额外提示

  • 如果需要关联用户名和对应的recordRef,也可以把存储对象改成Dictionary<string, string>,键是用户名,值是对应的recordRef,这样后续校验时可以精准定位到每个用户的记录。
  • 注意在场景执行完毕后,ScenarioContext会自动清空,所以不用担心不同场景之间的数据干扰。

内容的提问来源于stack exchange,提问作者Subburaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:41:39