2012-04-18 48 views
2

我有一个Visual Studio 2010负载测试,其中包含一些Web性能测试。运行网络性能测试需要您登录到被测网站。因此,负载测试包含一个初始化步骤 - 一个小型web性能测试,它会执行登录,并使用插件来缓存如此获得的cookie。 “真正的”网络性能测试 - 实际上做的工作也是每个那些有插件,读取缓存的cookie并把它添加到测试,让每个测试运行正常:需要登录的Web性能测试:如何使它在隔离和负载测试中工作?

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); 

问题虽然这一切运行绝对正常,当我运行负载测试,这意味着我不能孤立运行任何网络性能测试,因为如果负载测试初始化​​没有运行,那么就没有cookie,所以网络性能测试将不会登录,并会失败。

有没有针对这种情况推荐的解决方案?换句话说,如果一个Web性能测试需要登录,是否有任何方法可以让它独立运行并且它是负载测试的一部分?

最显而易见的方法来运行隔离每个Web性能测试将是有它首先调用登录测试,但我不能这样做,因为那将是不正确的行为的负载测试(其中登录应该发生每个用户只有一次,就在负载测试开始时)。

回答

0

我对Visual Studio 2010负载测试不熟悉,但听起来您需要相当于NUnit的SetUpTearDown方法,这些方法对所有测试运行一次,无论您是选择单个测试还是选择了所有测试部件。

A bit of searching意味着相当于InitTerm测试。

1)在负载测试场景节点上单击右键,选择编辑测试 混合...

2)在编辑测试组合对话框,看看底部的形态。你会 看到2个复选框。一个用于初始测试,另一个用于术语测试。

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

+0

感谢您的帮助 - 非常感谢。不幸的是,你的建议基本上是我们已经在做的。正如你所说的那样,添加一个init测试意味着web性能测试可以正常工作*当它在负载测试中时*但不能解决让web性能测试始终工作的问题,而不管它是否在负载测试中。这是因为如果您在负载测试之外运行Web性能测试,那么Init测试是否特定负载测试,因此无法运行。 – PhantomDrummer 2012-04-24 08:48:35

5

的解决方案是通过对登录测试添加到您的个人网页性能测试(通过“插入电话网络测试”),但门“上下文参数存在”条件规则,以查找的没有上下文参数$ LoadTestUserContext。该参数仅在Web测试在负载测试中运行时才存在。

这样你得到的只是一个登录无论是在或外部负载测试。

0

为什么不尝试使用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测试将工作。