VSTS2010给我们提供了一个创建并运行Load tests的工具。Load Test的基本目标就是模拟许多用户同时访问服务器。当你往一个Load tests里面添加Web tests/Unit tests后,你模拟了多个用户同时连接到服务器上,并向服务器发送多个HTTP请求。你可以设置Load tests的属性,并广泛地运用到你的Web tests.
创建一个Load test
1.打开解决方案管理器,右击一个Test Project,选择“Add” ->”Load Test …”.一个标题为“New Load Test Wizard” 的窗口会显示出来,点击“Next>”.

2.场景为配置你的个性化测试提供了灵活性,它可以模拟复杂真实的工作负载。
输入场景名字为“TestScenario”, 设置思考时间为 2 秒, 然后点击 “Next>”.

3.Load pattern属性指定了在一个load test过程中如何调整模拟的用户数。
我们选择Constant Load, 设置用户数为 25, 然后点击 “Next”.

4.Test mix model让你模拟负载更加真实。你可以有多个工作流,这样就更加贴近终端用户如何交互你的应用程序的。
我们选择“Based on the total number of tests”, 然后点击“Next>”.

5.Test mix指定了虚拟用户在一个load test场景中运行一个给定测试的可能性。他让你更加真实地模拟负载。
我们点击“Add…” 添加一个web test 或 unit test.
我们选择一个测试名字, 然后点击 “OK”.


6.Network mix指定了虚拟用户运行一个网络profile的可能性。
我们选择网络类型“CDMA”, 然后点击 “Next>”.

7.Counter sets是一系列系统性能计数器,他们在运行一个load test过程中对性能监视很有用。
我们选择“Next>”.

8.The run settings确定了测试的时间长度,warm-up期限,采样率,连接模型 (仅用于Web tests),结果存储的类型,有效等级和SQL跟踪。
我们选择测试时间长度为3分钟,然后点击 “Finish”.

9.一个名叫“Network Emulation Driver” 对话框会弹出来. 我们点击 “Yes” 来绑定网络仿真驱动器.
10. 这样一个名叫“LoadTest1” 就创建好了.
运行一个Load Test
1.选择Test project, 打开一个 load test.
2.在这个Load Test Editor里面选择这个load test,点击工具栏中的” Run”按钮。 你的这个Load Test就开始运行了。 运行是参见下图:

3.查看结果。 “点击“Test run completed”,你就可以看到Result Summary了。

在 Result Summary栏目显示了:
I. Test run name
II. Run result
III. Test Settings
IV. Test settings
V. Submitted by
VI. Started on
VII. Completed on
在Collected Files栏目里, 显示了agent name 和 the network emulation 文件. 在 NetworkEmulation.xml, 记录了你所绑定的网络仿真Profile.
参见下图:

注:本文转载自 http://blog.csdn.net/bin_2009/archive/2009/06/23/4291452.aspx ,希望对初次接触VSTS 使用Network Emulation运行Load Test的人有所帮助。
posted @ 2009-07-07 13:01 SabrinaZheng 阅读(267) 评论(0)
编辑
近期VSTS2010 Beta1 已经发布了,我们除了能够体验VSTS 2010为性能测试引入真实网络仿真这一新特性所带来的好处外,VSTS 2010还引入了另外一个新的特性,也就是支持在64位CLR中测试你的程序集了!这对那些想在64位CLR中执行测试的人来说无疑是个很好的消息!!在微软VSTS 2010 开发组成员Lonny的博客中也提及到了这一点,现将其翻译成中文,以供大家学习参考之用,若有不当之处敬请指正。也可以访问Lonny的blog查看英文版。
Visual Studio Team System 测试平台为运行测试提供了宿主进程。在Visual Studio 2008 中宿主进程只能在 32位模式中运行测试。作为一个 32 位进程,它仅限于在32 位 CLR中运行测试程序集,并被限制使用2GB 的内存。 現在 ,在Visual Studio 2010 中,我们添加了在 32或 64 位 CLR中从Visual Studio里执行测试,或在远程的负载代理上执行。它将允许你在测试中使用 > 2 GB 的内存(当在 64 位 CLR 上执行时) , 最重要的是能在 64 位 CLR中测试你的程序集。
怎样才能使我的测试在 64 位 CLR 上执行?
若要使你的测试程序集在 64 位 CLR 上执行,你需要做三件事:
1.设置你的测试程序集为针对 “任何 CPU” 平台
- 打开你的测试程序集的属性,选择“生成”选项卡,然后在目标平台下选择“任何 CPU ” 选项:

2.设置宿主进程平台标志为 “MSIL”
- 打开测试设置,然后选择“主机”(Hosts) 页
- 选择宿主进程平台(Host Process Platform) MSIL

3.在支持 64 位 CLR 的操作系统上运行测试
我想知道在尝试执行 64 位测试前需要知道什么?
当你尝试在 64 位 CLR 上执行测试之前,有几个概念我要解释。首先,有四种不同的方式可以编译你的测试程序集(“任何CPU”,“x64”,“x86”以及“Itanium”。这四种方式中,你能够编译你的程序集,但我们真正只支持(“任何CPU“和“x86”)。其次,当64位CLR可用时,为了强制支持在32位CLR上执行测试,我们引入了宿主进程平台(Host Process Platform) 标志的概念。此标志具有两个设置 (“MSIL”和 “x86”),并允许你指定希望如何执行你的测试。
|
MSIL |
这意味着,如果主机进程 (Visual Studio 或 Load Agent) 运行在 64 位操作系统上并且64 位 CLR 可用,且没有什么东西正在阻止该程序集在64 位模式下运行,那么测试程序集将 64 位 CLR 上执行。 如果有任何不满足上述情况的地方,那么该程序集将在32 位 CLR上执行测试。
注: 这并不能保证它将在64 位 CLR 上执行
|
|
x86 |
这意味着测试程序集将在32 位 CLR是否可用上执行无论64 位 CLR
注意:这是默认设置 |
在Visual Studio 2008 里,测试是在 VSTestHost.exe 进程或 QTAgent.exe 进程中执行。在Visual Studio 2010 里,这个作了更改。现在所有测试程序集或者在QTAgent32.exe进程中执行 或在QTAgent.exe中执行。至于是哪个进程则是由计算机操作系统的 “位数” 和宿主进程平台标志共同决定的。下表描述了哪个进程将被启动和测试程序集将执行在哪个版本的CLR。
|
操作系统 |
宿主进程平台标志 |
测试宿主进程 |
CLR |
|
32 位 |
x86 |
QTAgent32.exe |
32 位 |
|
MSIL |
|
64 位 |
x86 |
QTAgent32.exe |
32 位 |
|
MSIL |
QTAgent.exe |
如果64 位可用的那么64位,否则32 位 |
正如我早前所说,我们真正只支持针对“任何 CPU ” 或 “ x86 ” 平台的测试程序集。 在特定的条件下,你可能能够运行那些针对“x64”平台测试程序集。但是对于某些测试类型(特别是单元测试),MSTest.exe需要将测试程序集加载到它自己的进程。 由于 MSTest.exe 一个 32 位进程,测试程序集要能够正确地被加载到一个 32 位的进程中(换句话说它必须针对“x86” 或 “ 任何 CPU ”架构)。这意味着如果你有意针对x64目标 平台,并且你正在使用这些测试类型的其中之一,不管该宿主进程平台标志的设置,测试程序集将无法被加载并且测试将被中止。此外,因为 JET 数据库仍然是一个 32 位应用程序,当在 64 位 CLR 上执行测试程序集时CSV(以及任何需要 JET 数据库的数据源)不会被支持。
在哪可获得64 位Load Agent安装程序?
您可以通过下列链接获取英文版本的Visual Studio Team System 2010 Test Load Agent Beta 1:
http://www.microsoft.com/downloads/details.aspx?FamilyID=1967f42a-1e8b-4c70-9329-8478b68097d9&displaylang=en
虽然那没有64位Load Agent 安装程序,但是不用担心,因为当标准的32位Team Test Load Agent安装时,能执行64位测试的二进制文件也随即被安装了。
posted @ 2009-07-06 16:26 SabrinaZheng 阅读(1457) 评论(0)
编辑
摘要: 在前面几篇博客文章里,我们介绍了VSTS 2010 网络仿真,以及如何为负载测试或单元测试及其它测试配置网络仿真(Network Emulation)。接下来的一些博客中将陆续与大家分享在使用VS2010过程中发现的关于 Network Emulation 网络仿真更高级的特性。Visual Studio 2010 中网络仿真(Network Emulation)新特性 与VS20008 相比,V...
阅读全文
posted @ 2009-07-03 16:26 SabrinaZheng 阅读(1582) 评论(2)
编辑
一 什么是Scrum?
Scrum (英式橄榄球争球队), 软件开发模型是敏捷开发的一种,在最近的一两年内逐渐流行起来。
Scrum的基本假设是:
开发软件就像开发新产品,无法一开始就能定义软件产品最终的规程,过程中需要研发、创意、尝试错误,所以没有一种固定的流程可以保证专案成功。Scrum 将软件开发团队比拟成橄榄球队,有明确的最高目标,熟悉开发流程中所需具备的最佳典范与技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑战,确保每天、每个阶段都朝向目标有明确的推进。
Scrum 开发流程通常以 30 天(或者更短的一段时间)为一个阶段,由客户提供新产品的需求规格开始,开发团队与客户于每一个阶段开始时挑选该完成的规格部分,开发团队必须尽力于 30 天后交付成果,团队每天用 15 分钟开会检查每个成员的进度与计划,了解所遭遇的困难并设法排除。
二 Scrum较传统开发模型的优点
Scrum模型的一个显著特点就是响应变化,它能够尽快地响应变化。下面的图片使用传统的软件开发模型(瀑布模型、螺旋模型或迭代模型)。随着系统因素(内部和外部因素)的复杂度增加,项目成功的可能性就迅速降低。

下图是Scrum模型和传统模型的对比:

三 Scrum模型
一) 有关Scrum的几个名词
backlog: 可以预知的所有任务, 包括功能性的和非功能性的所有任务。
sprint:一次跌代开发的时间周期,一般最多以30天为一个周期.在这段时间内,开发团队需要完成一个制定的backlog,并且最终成果是一个增量的,可以交付的产品。
sprint backlog:一个sprint周期内所需要完成的任务。
scrumMaster: 负责监督整个Scrum进程,修订计划的一个团队成员。
time-box: 一个用于开会时间段。比如每个daily scrum meeting的time-box为15分钟。
sprint planning meeting: 在启动每个sprint前召开。一般为一天时间(8小时)。该会议需要制定的任务是:产品Owner和团队成员将backlog分解成小的功能模块, 决定在即将进行的sprint里需要完成多少小功能模块,确定好这个Product Backlog的任务优先级。另外,该会议还需详细地讨论如何能够按照需求完成这些小功能模块。制定的这些模块的工作量以小时计算。
Daily Scrum meeting:开发团队成员召开,一般为15分钟。每个开发成员需要向ScrumMaster汇报三个项目:今天完成了什么? 是否遇到了障碍? 即将要做什么?通过该会议,团队成员可以相互了解项目进度。
Sprint review meeting:在每个Sprint结束后,这个Team将这个Sprint的工作成果演示给Product Owner和其他相关的人员。一般该会议为4小时。
Sprint retrospective meeting:对刚结束的Sprint进行总结。会议的参与人员为团队开发的内部人员。一般该会议为3小时。
二)实施Scrum的过程简单介绍
1) 将整个产品的backlog分解成Sprint Backlog,这个Sprint Backlog是按照目前的人力物力条件可以完成的。
2) 召开sprint planning meeting,划分,确定这个Sprint内需要完成的任务,标注任务的优先级并分配给每个成员。注意这里的任务是以小时计算的,并不是按人天计算。
3) 进入sprint开发周期,在这个周期内,每天需要召开Daily Scrum meeting。
4) 整个sprint周期结束,召开Sprint review meeting,将成果演示给Product Owner.
5) 团队成员最后召开Sprint retrospective meeting,总结问题和经验。
6) 这样周而复始,按照同样的步骤进行下一次Sprint.
整个过程如下图所示:

The diagrams in this article are all from web site: http://www.controlchaos.com/. Thanks very much!
posted @ 2009-07-03 16:02 SabrinaZheng 阅读(91) 评论(0)
编辑
什么是网络仿真驱动程序?
Visual Studio 2010 Beta1里提供的网络仿真(Network Emulation)是通过一个过滤驱动程序完成的。 这个过滤驱动程序被称为“Microsoft VSTS 网络仿真 NDISx Driver”,其中 x 是 NDIS 版本 (对于Vista 和 Windows 2008,它是6;Windows XP 和 2003是5)。网络仿真驱动程序可以是下列三种状态之一:卸载、 安装和未绑定、安装和绑定到一个或多个网卡。
驱动程序何时将被安装和卸载?
每次网络仿真被配置(1. 通过在测试配置里启用网络仿真收集器,选者网络配置文件(除了局域网)2. 或通过保存一个负载测试配置) Visual Studio将检查:
A)驱动程序是否安装
B)驱动程序是否被绑定到至少一个网卡
如果其中之一不满足,那么会弹出如下所示的对话框,提示用户是否要绑定驱动程序。如果选择是,它将尝试在这次绑定驱动程序。 一旦安装并绑定驱动程序,用户将不再看到此对话框,除非该驱动程序被卸载。

网络仿真驱动程序绑定是指什么?
网络仿真驱动程序绑定意味着该驱动程序安装和正在使用或绑定到指定的网卡。
如何安装和卸载网络仿真驱动程序?
1) 找到安装目录 (<Install Drive>: Program Files \ Microsoft Visual Studio 10.0 Network Emulation\Driver)
2) 找到snetcfg.exe文件
3) 打开一个命令提示窗口,转到此安装目录
cd <Install Drive>:Program Files \ Microsoft Visual Studio 10.0 Network Emulation\Driver
4) 运行命令 "start /wait snetcfg.exe -v -l .\ -c s -i ms_sfilter” 安装和绑定驱动程序;运行命令"start /wait snetcfg.exe -u ms_sfilter" 卸载该驱动程序。
如何检查Network Emulation Driver已被正确的安装?
查看网络仿真驱动程序是否正确安装,可以通过打开局域网络连接上的属性,查看网卡上是否列出该驱动程序。例如:
Windows XP:

Win7/Vista:

posted @ 2009-07-03 11:58 SabrinaZheng 阅读(706) 评论(0)
编辑
最近,在微软负责VSTS2010 单元和负载测试这部分的Lonny在他的博文中写了一篇关于用户如何通过调用VSTS 2010里网络仿真(Network Emulation) 功能提供的API创建一个示例的网络仿真器, 本人尝试翻译成中文以方便大家一起学习和探讨,若有翻译不当之处敬请指正。您也可以访问Lonny 的blog看英文版
使用VSTS 2010 Beta1创建一个独立的网络仿真器(Network Emulator)
在 Visual Studio 10 Beta 1中我们发布了 “真实网络仿真”(Network Emulation),该版本允许您在运行测试时(例如,一个单元测试或负载测试中)模拟不同类型的网络。 然而,有一点未提及的是,它能够很容易地在未使用 Visual Studio Team System框架运行测试时模拟不同的网络。 例如,我可能想运行一个应用程序,看它在低带宽连接限制情况下如何运行。可能我并不想为此创建一个测试,只想用用它看它会发生什么情况。 要完成此“开箱即用”,我需要创建一个单元测试,让它在长时间内处于休眠状态,同时打开网络仿真。虽然这是相当容易的,但似乎有点不灵活。这篇文章将会集中在创建一个解决方案使得此过程简单到我只需要点击‘开始’按钮便启动网络仿真,当我要退出时只要按‘停止’按钮。
创建一个存根 (stub) 应用程序
• 创建网络仿真器的第一步中是:打开 Visual Studio 2010 并创建一个空的“ Windows 窗体应用 ”。

• 下一步是复制包含网络仿真 API 的程序集。此程序集为 “userapi.dll”,位于 %Program Files %\ Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x86 (对于 64 位系统是x64)。拷贝该文件并将其放到该解决方案目录下,然后将它添加到解决方案,更改“拷贝到输出目录 ”为 “如果较新则拷贝”

创建一个用于保存简化的网络仿真 API 的类
在此版本的 Visual Studio 中,网络仿真 API 是本机代码。 因此,我们通过有限的方式从托管代码中去访问这个API。 在此示例中,我们会使用 PInvoke来调用API。 为了实现它,我们必须在使用他们之前为每个方法创建一些定义。
创建一个新的类名为 NativeNetworkEmulationAPI ,并添加以下声明:
*************************************************
using System;
using System.Runtime.InteropServices;
namespace StandaloneNetworkEmulation
{
public class NativeNetworkEmulationAPI
{
[DllImport("userapi.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public static extern int NEGetVersion(ref uint pdwVersion);
[DllImport("userapi.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public static extern int NEInitialize(ref uint pdwVersion, ref IntPtr phEmulator);
[DllImport("userapi.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public static extern int NECleanup(IntPtr hEmulator);
[DllImport("userapi.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public static extern int NEStartEmulation(IntPtr hEmulator);
[DllImport("userapi.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public static extern int NEStopEmulation(IntPtr hEmulator, uint dwTimeout, int fForce);
[DllImport("userapi.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int NELoadProfile(IntPtr hEmulator,
[MarshalAs(UnmanagedType.LPWStr)]
string profileName);
}
}
*************************************************
复制并修改预定义的网络配置文件
• 下一步是从 VS2010复制预定义的网络配置文件到我们自己的解决方案,以便我们可以修改它们并用于我们创建的独立仿真器中:
a) 在解决方案中创建一个名为“Profile”的文件夹
b) 将所有预定义的网络配置文件(位于 %Program Files %\ Microsoft Visual Studio 10.0 \Common7\IDE\Templates\LoadTest\Networks)复制到此文件夹
c) 并为每个配置文件设置Build Action生成操作= “无”
• 配置文件设置完成后,为了使仿真器能正确地读取配置文件,需要对每个配置文件做少量修改:
a) 打开每个配置文件
b) 删除包含名为“NetworkEmulationProfile”(这应该是配置文件中的第一个和最后一个行)的两行。 例如:在“3G.network”文件中删除下列两行:
o <NetworkEmulationProfile name="3G" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
o </NetworkEmulationProfile>
修改此配置文件后,最高一层的XML节点应该是 <Emulation>。
• 最后要注意是删除LAN.network 配置文件,因为仿真器不会使用它来模拟网络。它是我们的架构一种特殊情况,以表明要使用完整的可用网络带宽(换句话说就是不进行任何网络模拟)。
完成主窗体应用程序
下一步,在主窗体中添加开始和停止按钮,以及允许我们选择要用于网络模拟的配置文件的组合框。

为窗体添加成员变量:
1: private IntPtr m_emulatorHandle;
为窗体添加Load 事件处理程序,并添加以下代码:
1: NativeNetworkEmulationAPI.NELoadProfile(m_emulatorHandle, Path.Combine("Profiles",
2: m_networkProfiles.SelectedText) + ".Network");
3: if (0 == NativeNetworkEmulationAPI.NEStartEmulation(m_emulatorHandle))
4: {
5: startButton.Enabled = false;
6: stopButton.Enabled = true;
7: }
8: else
9: {
10: MessageBox.Show("There was an error starting the emulation.");
11: }
为窗体添加FormClosed 事件处理程序,并添加下面的代码:
1: if (0 != NativeNetworkEmulationAPI.NECleanup(m_emulatorHandle))
2: {
3: MessageBox.Show("There was an error cleaning up the emulator.");
4: }
为开始按钮添加Click 事件处理程序,并添加以下代码:
1: NativeNetworkEmulationAPI.NELoadProfile(m_emulatorHandle, Path.Combine("Profiles",
2: m_networkProfiles.SelectedText) + ".Network");
3: if (0 == NativeNetworkEmulationAPI.NEStartEmulation(m_emulatorHandle))
4: {
5: startButton.Enabled = false;
6: stopButton.Enabled = true;
7: }
8: else
9: {
10: MessageBox.Show("There was an error starting the emulation.");
11:}
为停止按钮添加 Click 事件处理程序,并添加下面的代码:
1: if (0 == NativeNetworkEmulationAPI.NEStopEmulation(m_emulatorHandle, 2000, 1))
2: {
3: startButton.Enabled = false;
4: stopButton.Enabled = true;
5: }
6: else
7: {
8: MessageBox.Show("There was an error stopping the emulation.");
9: }
10: startButton.Enabled = true;
11: stopButton.Enabled = false;
结论
在这篇专题文章中,我们通过VS2010里网络仿真功能提供的API创建了一个示例的网络仿真器。 此示例虽简单,但我们可以使用此API做很多的事情,如包跟踪、 过滤等。 请继续关注我的博客,以后我会告诉你如何通过自定义配置文来执行网络仿真里一些高级的功能。
posted @ 2009-07-03 11:55 SabrinaZheng 阅读(654) 评论(0)
编辑
在Visual Studio 2010 Beta 1发行版本中,为负载测试和Visual Studio 2010 Beta1所支持的几乎每种测试中引入了真实网络仿真。
下载地址:VSTS 2010 Beta 1 Suite Installer
真实网络仿真是什么?
真实的网络仿真是通过直接操纵网络数据包来模拟网络条件。Visual Studio 2010里提供 的网络仿真是一种基于软件的仿真程序,可以模拟那些使用可靠的物理链路的有线和无线网络,如:以太网。 各种网络属性被纳入 VS2010 网络仿真模型,包括跨网络的往返时间(延迟)、 可用带宽、 排队方式、 数据包丢失量、 数据包的重新排列和错误传播。 VS2010 网络仿真还为筛选基于 IP 地址或TCP、 UDP 和 ICMP协议的网络数据包提供了灵活性。
为什么要关心网络仿真?
VS2010 网络仿真可以为基于网络的应用程序开发人员和测试人员模拟所需的网络环境、评估应用程序性能、预测变化的影响、 做技术优化的决定。 与硬件测试床相比,由 Visual Studio Team System 提供的网络仿真将是一个更便宜、 更灵活的解决方案。
如何使用 Visual Studio 2010 提供的网络仿真?
使用 Visual Studio 2010 的网络仿真最简单方式是创建一个测试项目,修改测试设置 (以前是运行配置)。
为单元测试设置网络仿真
1.创建一个测试项目,并为测试项目添加测试 (例如:单元测试)
2.在解决方案下打开 ‘Local.testsettings'

或者在菜单里选择‘测试’,选择‘编辑测试设置’,打开‘本地测试设置’:

3.选择‘执行条件’ 并转到‘收集器’,选中并允许‘ 网络仿真’

4.然后点击 “ Advanced… ” 按钮,选择您希望使用的网络的配置文件

5.保存测试设置。 当测试运行开始时,您选择的网络仿真将启动;在运行完成后,它就会停止。
请注意: 此测试设置中指定的网络仿真除了不适用于负载测试外, 可用于其它任何测试。
为负载测试设置网络仿真
在负载测试中使用网络仿真,可以通过在负载测试向导中设置网络组合来实现:
1.为测试项目创建负载测试
2.启动负载测试向导,到达‘网络组合’页

3.在创建负载测试时,可能希望模拟通过多种类型的网络连接产生的负载的情况, 通过点击 ‘添加’按钮来添加多种网络类型
4.完成负载测试向导,运行测试
5.当测试运行开始时,您选择的网络仿真将启动;在运行完成后,它就会停止。
测试运行配置
为测试完成网络仿真配置后,
1.如果您想在本地上执行测试, 则在测试设置‘执行条件’页上选择‘从本地执行测试’单选按钮

2.如果您想在远程测试代理上执行测试:

a.选择‘远程执行测试’单选按钮
b.输入负载测试控制器的名称,选择要运行测试的负载测试代理名称
c.点击‘预览’查看与选择条件匹配的代理
3.点击‘应用’保存设置,运行测试
posted @ 2009-07-03 11:52 SabrinaZheng 阅读(909) 评论(1)
编辑