8.10 .NET Vuser
当我们测试基于微软.NET技术的网站或者应用时都是通过协议的方式对服务器产生负载的,但是这种方式不足以支持代码级别的定位,当使用.NET Vuser协议时,我们可以使用该语言与LR进行代码的负载,从本质上可以解决很多问题。
在LR 11的Patch2中提供了对VS 2010的支持,我们在Vugen中创建的.NET Vuser可以在VS 2010中开发了。在安装过程中需要注意安装顺序,否则可能会导致VS 2010转换过的代码无法在Vugen中运行的问题。个人推荐先安装VS 2010英文版,接着安装LR 11,再依次安装Patch1、Patch2补丁,避免不必要的问题。安装盘中提供了VS 2008 IDE插件,这个插件必须要在VS 2008存在的情况下才能使用,这里可以不用安装,安装后可以在VS中直接创建LR Vuser脚本。
在Vugen中新建一个Microsoft .NET协议脚本,然后直接保存。在VS 2010中打开脚本目录中的script.sln项目文件,VS 2010会提示该项目需要升级为新的项目格式,确认完成,接着我们就可以看到在VS中已经可以对脚本进行开发了,如图8.35所示。
图8.35 在VS 2010中开发.NET用户脚本
我们在Action中编写一个函数,在C#语法中所有的函数首关键字要用点号说明,所以以前在C语言中的lr_output_message()函数现在要写成lr.output_message()。代码编写完成编译后单击“保存”按钮,接着切回Vugen会提示代码已经更新,我们确认重新加载所有内容,这个时候就能在Vugen中看到在VS中编写的代码,接着运行这个代码,可以看到出现了我们期待的日志信息。
.NET的最大作用就是扩展了脚本编写的空间,我们可以通过C#语言完成很多以前无法完成的操作,而使用LR来完成负载和响应时间监控。比如这里需要测试一下在C#中如果做一个整型数据从1累加到10000到底需要多少时间的性能测试,我们现在就可以轻松实现。在VS 2010中编写以下代码:
public int Action() { int i,t; t = 0; lr.start_transaction("for"); for (i = 0; i < 10000; i++) { t = t + i; } lr.end_transaction("for", lr.AUTO); lr.output_message(t.ToString()); return 0; } |
回到Vugen中运行可以看到事务for的事务时间:
Notify: Transaction "for" started. Notify: Transaction "for" ended with "Pass" status (Duration: 0.0006). |
在整个脚本开发中VS提供了开发工具及编译支持,所以我们必须在VS中完成编译工作,脚本会被编译成一个.dll动态链接库的形式存放在脚本目录的bin目录下。
在Vugen中运行Microsoft .NET脚本经常会出现MSBuild不支持版本的错误,就是因为没有在VS中完成编译导致的。