在Load Test Plugin中访问App.Config连接字符串

时间:2013-03-08 02:21:17

标签: c# .net entity-framework load-testing

我目前正在开发我的第一个负载测试,所以请耐心等待我〜

负载测试本身正在运行一组单元测试,用于向HTTP处理程序发出不同的请求。根据运行负载测试的代理程序,请求本身是针对dev / staging环境进行的,然后传递给“处理”请求的下游服务,并对几个数据库执行INSERT语句。我想构建并包含一个实现ILoadTestPlugin的简单插件,并为LoadTestCompleted事件处理程序提供自己的一组指令。此插件当前包含在单独的类库项目中,该项目包含在容纳负载测试本身的同一解决方案中。

在我开始描述问题之前,我想指出我目前正在本地运行负载测试,而不是我在IIS中设置的同一个处理程序。

当事件触发时,我遇到了一个问题,我的方法尝试建立与目标数据库上下文的实体连接(当前使用的是Entity Framework 4)。 It appears插件代码无法找到负载测试项目中包含的app.config。异常消息/堆栈跟踪指出连接字符串无效,但我很怀疑问题是它无法找到它。最重要的是,在我们的代码库中,在许多地方使用了相同的连接字符串。

我可以排除连接字符串无效的可能性,因为如果我创建一个使用相同配置文件执行相同代码的简单单元测试方法,它就可以正常工作。这是给定的,因为负载测试代理程序包含在与项目不同的目录中,因此查找配置文件时没有问题。

我还尝试将复制到启动项目输出目录的配置文件添加为我的.testsettings文件中的部署项。没有bueno。我还在插件项目中创建了一个app配置文件,它是我试图用来查看是否有效的完全副本。仍然没有bueno。

有没有人遇到这个问题?如果您尝试在配置文件中使用<connectionString>部分,如何获取负载测试插件来查找/使用它们?

我打算尝试使用反射和好的'ConfigurationManager来尝试调用程序集来查找路径(最终是ProjectName.dll.config文件),但是想要在向前推进之前,请向StackOverflow上的专家咨询一些建议。

此外,如果不是这样直接的EF代码(或者如果它已经超过了var dbContext = new dbContext( myConnectionString );),我会提供代码示例

非常感谢任何帮助/反馈。

2 个答案:

答案 0 :(得分:0)

虽然我没有弄清楚如何在负载测试插件中使用应用程序的配置文件,因为负载测试&amp;在QTAgent.exe目录中运行任何相应的插件,我能够以两种方式实现我的加载后测试数据库清理步骤。

  1. 使用包含基于环境(运行设置)的连接字符串的唯一元素的Context参数,以便连接字符串本身的唯一元素(例如--DataSource等...)以编程方式可用于我的插件。

  2. 在针对端点发出请求的Unit Test类中,我创建了一个标有[ClassCleanup]属性的静态方法。当包含来自该类的单元测试的Test Mix完成运行时,将执行此操作。测试类包含在项目的out目录中,并且可以使用实体连接字符串访问应用程序的.config文件:

  3. [TestClass]
    public class MyEndpointUnitTests()
    {
       [TestMethod]
       public void SubmitRequestType1()
       {
           //DoStuff for request type 1
       }
    
       [TestMethod]
       public void SubmitRequestType2()
       {
           //DoStuff for request type 2
       }
    
       [ClassCleanup]
       public static void Cleanup()
       {
           EndpointLoadTestCleanup.DoCleanup( dbContext = new DbContext( ) );
       }
    }
    

答案 1 :(得分:0)

您可以创建自定义Load Test插件,在Initialize方法中,您可以从某些xml / app.config文件中获取连接字符串,将其添加到上下文对象中,将在您的单元测试项目中使用它。它将更加强大,易于维护。