Visual Studio 单元测试之三---压力测试

我们都知道大名鼎鼎的LoadRuner,但是很少有人知道Visual Studio自带的Test也可以做些简单的压力测试,下面我们就介绍一下如何利用Visual Studio进行压力测试。

此文是上一篇博文:Visual Studio单元测试之一---普通单元测试的后续篇章。如果读者对Visual Studio的单元测试不熟悉的话,请先参看上一篇。http://blog.csdn.net/tjvictor/archive/2011/02/09/6175362.aspx

本文会自动略去上篇中提到过的相关概念、方法。本文的例子可以使用下面的链接下载:

http://download.csdn.net/source/3014236

做压力测试时,Visual Studio会记录大量的数据并把数据保存在数据库中,所以在进行讲解压力测试之间,让我们先把数据库的准备工作做好。

<!--[if !supportLists]-->· <!--[endif]-->SQLServer里面执行C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ loadtestresultsrepository.sql脚本,创建测试数据库(VS2008相应目录下面也有此脚本)

<!--[if !supportLists]-->· <!--[endif]-->配置压力测试数据库:Test->Manage Test Controllers,配置刚建的数据库。如下图:

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="Picture_x0020_16" o:spid="_x0000_i1039" type="#_x0000_t75" alt="21.JPG" style='width:377.25pt;height:475.5pt;visibility:visible; mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.jpg" o:title="21" /> </v:shape><![endif]--><!--[if !vml]-->21.JPG<!--[endif]-->

MathUtility.cs文件中新建一个函数:

public static void PowerTest()

{

Random r1 = new Random(DateTime.Now.GetHashCode());

Random r2 = new Random(DateTime.Now.AddDays(1).GetHashCode());

double d = r1.Next() * r2.Next();

Random r3 = new Random(Convert.ToInt32(d));

string str = r3.Next().ToString();

StringBuilder buffer = new StringBuilder();

foreach (char a in str.ToCharArray())

buffer.Append(string.Format("{0}-{1}", a, a + a));

}

并创建这个函数的单元测试函数。

新建压力测试:

1.Add->New Test:

<!--[if gte vml 1]><v:shape id="Picture_x0020_7" o:spid="_x0000_i1038" type="#_x0000_t75" style='width:378.75pt; height:324.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image002.png" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image002.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->22<!--[endif]-->

2.欢迎界面

<!--[if gte vml 1]><v:shape id="Picture_x0020_3" o:spid="_x0000_i1037" type="#_x0000_t75" alt="23.JPG" style='width:6in;height:303pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image004.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image004.jpg" o:title="23" /> </v:shape><![endif]--><!--[if !vml]-->23.JPG<!--[endif]-->

3.设置这个测试场景的名称及思考时间(Think Time)和迭代思考时间

<!--[if gte vml 1]><v:shape id="Picture_x0020_21" o:spid="_x0000_i1036" type="#_x0000_t75" alt="24.JPG" style='width:6in;height:303pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image006.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image006.jpg" o:title="24" /> </v:shape><![endif]--><!--[if !vml]-->24.JPG<!--[endif]-->

4.设置压力用户模型。

<!--[if gte vml 1]><v:shape id="Picture_x0020_22" o:spid="_x0000_i1035" type="#_x0000_t75" alt="25.JPG" style='width:6in;height:303pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image008.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image008.jpg" o:title="25" /> </v:shape><![endif]--><!--[if !vml]-->25.JPG<!--[endif]-->

5.设置压力测试的混合模型。可以根据自己的测试场景需要来选择合适的模型。<!--[if gte vml 1]><v:shape id="Picture_x0020_23" o:spid="_x0000_i1034" type="#_x0000_t75" alt="26.JPG" style='width:6in;height:303pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image010.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image010.jpg" o:title="26" /> </v:shape><![endif]--><!--[if !vml]-->26.JPG<!--[endif]-->

6.设置压力测试函数,这些函数都是单元测试函数,可以增加多个压力函数且后面的人数为这个压力函数需要压力人数。

<!--[if gte vml 1]><v:shape id="Picture_x0020_24" o:spid="_x0000_i1033" type="#_x0000_t75" alt="27.JPG" style='width:6in;height:303pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image012.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image012.jpg" o:title="27" /> </v:shape><![endif]--><!--[if !vml]-->27.JPG<!--[endif]-->

7.设置网络。压力测试与网络好坏关系密切时,此项起作用。<!--[if gte vml 1]><v:shape id="Picture_x0020_25" o:spid="_x0000_i1032" type="#_x0000_t75" alt="28.JPG" style='width:6in;height:303pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image014.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image014.jpg" o:title="28" /> </v:shape><![endif]--><!--[if !vml]-->28.JPG<!--[endif]-->

8.性能计数器。可以增加Perfmon里面的相关计数器。关于如何增加自定义计数器,不是本文所讨论的内容。我会另发一篇博文进行讨论。

<!--[if gte vml 1]><v:shape id="Picture_x0020_27" o:spid="_x0000_i1031" type="#_x0000_t75" alt="29.JPG" style='width:6in;height:303pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image016.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image016.jpg" o:title="29" /> </v:shape><![endif]--><!--[if !vml]-->29.JPG<!--[endif]-->

9.设置压力时间及其他选项。

<!--[if gte vml 1]><v:shape id="Picture_x0020_28" o:spid="_x0000_i1030" type="#_x0000_t75" alt="30.JPG" style='width:6in;height:303pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image018.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image018.jpg" o:title="30" /> </v:shape><![endif]--><!--[if !vml]-->30.JPG<!--[endif]-->

10.设置完成后的loadtest文件。

<!--[if gte vml 1]><v:shape id="Picture_x0020_29" o:spid="_x0000_i1029" type="#_x0000_t75" alt="31.JPG" style='width:246pt;height:309.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image020.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image020.jpg" o:title="31" /> </v:shape><![endif]--><!--[if !vml]-->31.JPG<!--[endif]-->

点击上图中的运行就可以起动本次压力测试了。如果你是按我上面的步骤设置的话,会看到类似下面的压力测试图(由于机器性能不同,局部数据会不同):

1.运行了3分钟时的图形

<!--[if gte vml 1]><v:shape id="Picture_x0020_30" o:spid="_x0000_i1028" type="#_x0000_t75" alt="32.JPG" style='width:6in;height:220.5pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image021.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image021.jpg" o:title="32" /> </v:shape><![endif]--><!--[if !vml]-->32.JPG<!--[endif]-->

2.运行完成时的图形

<!--[if gte vml 1]><v:shape id="Picture_x0020_31" o:spid="_x0000_i1027" type="#_x0000_t75" alt="33.JPG" style='width:432.75pt;height:205.5pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image023.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image023.jpg" o:title="33" /> </v:shape><![endif]--><!--[if !vml]-->33.JPG<!--[endif]-->

运行完成后的压力测试报告

<!--[if gte vml 1]><v:shape id="Picture_x0020_32" o:spid="_x0000_i1026" type="#_x0000_t75" alt="34.JPG" style='width:6in;height:225pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image025.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image025.jpg" o:title="34" /> </v:shape><![endif]--><!--[if !vml]-->34.JPG<!--[endif]-->

至此,我们就完成了一个完整的压力测试。压力测试的情景比较复杂,选项也比较多,有兴趣的话,请大家一个一个的试试。我这里就不把所有的选项含义及所用场景一一描述了。

最后介绍一下Load Test Manage.如下图:

<!--[if gte vml 1]><v:shape id="Picture_x0020_33" o:spid="_x0000_i1025" type="#_x0000_t75" alt="35.JPG" style='width:6in;height:304.5pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image027.jpg" mce_src="file:///C:\DOCUME~1\victorg\LOCALS~1\Temp\msohtmlclip1\01\clip_image027.jpg" o:title="35" /> </v:shape><![endif]--><!--[if !vml]-->35.JPG<!--[endif]-->

可见,我做了多个压力测试,每次的数据都保存在刚才设定的数据库中了,我们可以通过这个窗体来查看、调用以前的压力测试结果及数据。

至此,压力测试的基本用法已经讲完,下面介绍Generic测试,数据库测试,UI界面测试。

如需转载,请注明本文原创自灰太狼的博客:http://blog.csdn.net/tjvictor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值