0

我使用带有 SQL 数据库的 Visual Studio 2010 进行负载测试。我在插件中编写代码以在一段时间后运行测试时在 LoadTest.TestFinished 事件中调用 LoadTest.Abort(exception)。

中止后,测试停止,测试结果窗口显示“已中止”。但奇怪的是负载测试没有正确中止,因为通过查看数据库它的状态仍然是“进行中”并且没有“结束时间”。

知道为什么吗?

4

1 回答 1

0

为避免此问题,您必须将负载测试插件程序集 dll 放在测试控制器可以找到的某个位置,特别是在这些目录之一中(11.0 是 VS 2012;对于 VS 2010 使用 10.0):

%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\{AssemblyName}\
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies\{AssemblyName}\
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\DataCollectors
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\DataCollectors\{AssemblyName}\
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\DataCollectors\x86\
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\DataCollectors\x86\{AssemblyName}\
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\DataCollectors
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\DataCollectors\{AssemblyName}\
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\DataCollectors\x86\
%programfiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\DataCollectors\x86\{AssemblyName}\

“等等,为什么?” 你可能会问。毕竟,显然测试引擎知道您的插件程序集在哪里,因为它首先运行插件!

测试执行引擎实际上是两部分,一个控制器和一个代理。每个都作为一个单独的进程运行,它是运行插件汇编代码的代理进程。当您的插件以异常调用 LoadTest.Abort() 时,测试代理进程会序列化该异常(包括异常的源 - 您的插件类)并尝试将其发送到测试控制器。但是测试控制器对您的插件一无所知(您的插件程序集不在其引用中),因此在尝试反序列化异常时它会失败,并且负载测试无法正确完成。您可以在 Windows 事件查看器中看到这一切。

如果您编写自定义负载配置文件插件,您会发现需要相同的要求。您的程序集 dll 必须位于列出的目录之一中,否则测试将在启动时以SerializationException: Unable to find assembly.

于 2014-02-26T21:46:00.500 回答