【问题标题】:C# Running concurrent requests using WebTestRequestC# 使用 WebTestRequest 运行并发请求
【发布时间】:2015-02-27 15:24:47
【问题描述】:

使用 Web 性能测试 API 编写编码的 Web 测试时。您能否编写同时发送请求的测试,即并发请求,即负载测试的一个用户触发并发 Web 请求?

编辑:添加额外信息

我发现将请求添加到另一个请求的dependentRequest 属性意味着dependentRequests 是同时运行的。旁白:为什么围绕此功能的 microsoft 文档如此简明?

场景 1:假设我有两个 Web 请求

public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
    var request1 = new WebTestRequest("request1Uri");
    var request2 = new WebTestRequest("request2Uri");

    yield return request1;
    yield return request2;
}

以上顺序运行,如果我想同时运行它们(request1 和 request2),我必须添加第三个请求并像下面那样运行它,它可以工作,但想知道是否有更清洁(不创建第三个请求)方式?因为添加不需要的请求会影响结果。

public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
    var request1 = new WebTestRequest("request1Uri");
    var request2 = new WebTestRequest("request2Uri");
    var request3 = new WebTestRequest("request3Uri");
    request3.DependentRequests.AddRange(new[] { request2, request1 });

    yield return request3;      
}

场景 2:据我所知,我的意思是,依赖请求只是“一个深度”

public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
    var request1 = new WebTestRequest("request1Uri");
    var request2 = new WebTestRequest("request2Uri");
    var request3 = new WebTestRequest("request3Uri");
    var request4 = new WebTestRequest("request4Uri");
    var request5 = new WebTestRequest("request5Uri");

    request3.DependentRequests.AddRange(new[] { request2, request1 });
    request5.DependentRequests.AddRange(new[] { request4, request3 });

    yield return request5;      
}

相同
public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
    var request1 = new WebTestRequest("request1Uri");
    var request2 = new WebTestRequest("request2Uri");
    var request3 = new WebTestRequest("request3Uri");
    var request4 = new WebTestRequest("request4Uri");
    var request5 = new WebTestRequest("request5Uri");

    request5.DependentRequests.AddRange(new[] { request2, request1, request4, request3 });

    yield return request5;      
}

如果我想要第一个示例(在场景 2 中)的预期行为,我该如何使用 webTest api 来实现?

【问题讨论】:

  • 我相信这就是处理依赖请求的方式。在 Web 性能测试的 PreRequest 插件中,您可以添加/删除相关请求。
  • @AdrianHHH 你是对的,这就是依赖请求的工作方式,但是如果你只有两个必须同时运行的请求,那么你是否必须创建第三个“假”请求,点它在说google.com并将2个“真实”请求添加为依赖请求?编写这个场景的正确方法是什么?

标签: c# visual-studio-2012 testing load-testing coded-ui-tests


【解决方案1】:

根据我的经验。使用 WebTestRequest 的相关请求属性是一种使用 microsoft 的 Web 性能测试 API 来同时发出请求的方法。

对于场景 1,我没有找到比问题中已有的更好的方法。

对于场景 2,我做了类似于下面的操作以足够接近我想要的行为

public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
    var request1 = new WebTestRequest("request1Uri");
    var request2 = new WebTestRequest("request2Uri");
    var request3 = new WebTestRequest("request3Uri");
    var request4 = new WebTestRequest("request4Uri");
    var request5 = new WebTestRequest("request5Uri");
    var request6 = new WebTestRequest("request6Uri");

    request6.DependentRequests.AddRange(new[] { request2, request1 });
    request5.DependentRequests.AddRange(new[] { request4, request3 });

    yield return request5;      
    yield return request6;
}

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2011-08-06
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多