在负载测试插件访问App.Config中连接字符串

问题描述:

我目前正在开发我的第一个负载测试过,所以请多多包涵〜在负载测试插件访问App.Config中连接字符串

本身运行一组单元测试文章不同请求的负载测试一个HTTP处理程序。根据运行负载测试的代理程序,请求本身是针对开发/暂存环境进行的,然后传递给“处理”请求的下游服务,并针对一对数据库执行INSERT语句。我想构建并包含一个实现ILoadTestPlugin的简单插件,并提供它自己的一套针对LoadTestCompleted事件处理程序的说明。该插件目前包含在一个单独的类库项目中,该项目包含在承载负载测试本身的相同解决方案中。

在开始描述问题之前,我想指出,我正在本地运行负载测试,并使用我在IIS中设置的相同处理程序。

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

我可以排除我的连接字符串无效的机会,因为如果我创建一个简单的单元测试方法,使用相同的配置文件来执行相同的代码,它的工作就好了。这是给定的,因为负载测试代理包含在与项目不同的目录中,所以它没有定位配置文件的问题。

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

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

我打算尝试使用反射和良好的'ConfigurationManager来尝试调用程序集以查找路径(并最终找到ProjectName.dll.config文件),但想要问专业人员在*上提供一些建议,然后再继续前进。

此外,我提供的代码示例,如果这是不是这样直接的EF代码(或如果它是越来越近的点:var dbContext = new dbContext(myConnectionString);

任何帮助/反馈是非常赞赏。

+0

只是想指出你的负载测试是完全没有意义和非代表性的(假设你是在非服务器Windows机器上运行)参考[IIS连接限制](http://www.jpelectron.com/样本/ WWW%20和%20HTML/IIS-%20OS%20版本%20Limits.htm) – Aron 2013-03-08 06:12:40

+0

我的机器不是服务器(显然)。部署环境是。因此,测试不是毫无意义,但感谢巨魔。你在服务器上自己写HTTP代码吗? – 2013-03-08 08:31:23

+0

我不是拖钓。你说你在本地运行负载测试... OHHHHHHHHHHHHHHH ....你的意思是你上传负载测试到服务器....废话...我有点读它,因为你正在加载测试IIS服务器上你的本地开发机器。对不起这是我的错。 – Aron 2013-03-08 08:52:29

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

  1. 使用上下文参数包含连接字符串的独特元素根据环境(运行环境),这样的连接字符串本身的独特元素(如 - 数据源等)是可以编程到我的插件。

  2. 在我发出针对端点的请求的单元测试类中,我创建了一个用[ClassCleanup]属性标记的静态方法。当包含来自该类的单元测试的测试混合完成运行时,会执行此操作。测试类包含在项目的出目录中,并已获得应用程序的config文件与实体的连接字符串:

[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()); 
    } 
} 

您可以创建自定义负载测试插件,在初始化方法,你可以从一些xml/app.config文件中获取连接字符串,将它添加到上下文对象中将在您的单元测试项目中使用它。它将更加健壮并且易于维护。