3

我有一个 Visual Studio 2010 负载测试,其中包含许多 Web 性能测试。运行 Web 性能测试需要您登录到被测网站。因此,负载测试包含一个初始化步骤 - 一个小型 Web 性能测试,它进行登录,并使用插件缓存如此获得的 cookie。'真正的' web 性能测试 - 真正完成工作的测试也都有一个插件,可以读取缓存的 cookie 并将其添加到测试中,以便每个测试都能正常运行:

public override void PreWebTest(object sender, PreWebTestEventArgs e)
{
    if (CookieCache.Cookies != null) // CookieCache is a static class of mine
        e.WebTest.Context.CookieContainer.Add(CookieCache.Cookies);

问题是,虽然这一切在我运行负载测试时工作得很好,但这意味着我不能单独运行任何 Web 性能测试,因为如果负载测试初始化​​程序没有运行,那么就没有 cookie,所以 Web性能测试将不会登录并且会失败。

这种情况有什么推荐的解决方案吗?换句话说,如果 Web 性能测试需要登录,有没有办法让它在单独运行时以及作为负载测试的一部分时运行?

单独运行每个 Web 性能测试的明显方法是让它首先调用登录测试,但我不能这样做,因为这对于负载测试来说是不正确的行为(每个用户只应该登录一次) ,就在负载测试开始时)。

4

3 回答 3

5

解决方案是将登录测试添加到您的个人 Web 性能测试中(通过“插入对 Web 测试的调用”),但通过“上下文参数存在”条件规则来寻找上下文参数$LoadTestUserContext的缺失。仅当 Web 测试在负载测试中运行时,该参数才存在。

这样,无论是在负载测试中还是负载测试之外,您都只会获得一次登录。

于 2012-05-09T07:05:03.207 回答
1

为什么不尝试使用 PreRequest 函数而不是 PreWebTestFunction

Public Overrides Sub PreRequest(sender As Object, e As PreRequestEventArgs)
  MyBase.PreRequest(sender, e)
  Dim cookie As System.Net.Cookie = New System.Net.Cookie(...)
  e.Request.Cookies.Add(cookie)

这样负载测试和 Web 测试都可以工作。

于 2015-01-20T05:21:15.270 回答
0

我不熟悉 Visual Studio 2010 负载测试,但听起来您需要与 NUnit 等效的方法SetUpTearDown对所有测试运行一次的方法,无论您选择了单个测试还是程序集中的所有测试。

稍作搜索就意味着等价的是InitandTerm测试。

1)右键单击负载测试中的场景节点并选择编辑测试组合...

2) 在编辑测试组合对话框中,查看表格底部。您将看到 2 个复选框。一个用于初始化测试,一个用于学期测试。

init 测试将在每个用户之前运行,而 term 测试将在用户完成时运行。为了确保术语测试运行,您还需要设置负载测试的冷却时间。冷却时间是运行设置节点上的一个属性。此设置使测试有机会在持续时间完成时流出。您可以将其设置为 5 分钟。冷却时间不一定要持续 5 分钟。当所有学期测试完成时,它将结束。如果这需要 20 秒,那么这就是负载测试完成的时间。

于 2012-04-20T08:25:04.710 回答