2012-04-27 5 views
2

여러 대의 테스터가 여러 대의 서버에서 실행되는 여러 개의 C# 셀레늄 테스트 스위트가 있습니다.여러 app.config를보다 글로벌하게 이동하기

가능하면 설정을 단순화하고 싶습니다. 현재 우리는 각각 자신의 app.config와 함께 여러 개의 C# 셀레늄 프로젝트를 보유하고 있습니다. 서버를 변경하려면 각 app.config를 변경해야합니다. 내 app.config는 현재 다음과 같습니다.

<connectionStrings> 
    <add name="Company" 
     connectionString="Data Source=func3_db1;Initial Catalog=CompanyProduction;Integrated Security=SSPI;"/> 
    <add name="CompanyProductionEntities" 
     connectionString="metadata=res://*/DataAccess.CompanyEntities.csdl|res://*/DataAccess.CompanyEntities.ssdl|res://*/DataAccess.CompanyEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=func3_db1;initial catalog=CompanyProduction;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 

Windows 환경 변수에는 일부 설정이 있습니다. 그것은 일종의 모호한 방법이지만 그것을 꽤 잘 작동합니다. 이러한 설정에 액세스하려면, 우리는 단지 같은 것을 할 :

var value = Environment.GetEnvironmentVariable(varName, EnvironmentVariableTarget.User); 

그래서, 우리가 "파이어 폭스"로 설정 될 수있다 "CompanyTestBrowser"또는 "크롬"또는 "라는 변수가 IE ".

셀레늄 테스트를 모두 실행하는 powershell 스크립트는 필요할 때마다 쉽게 변수를 변경할 수 있으므로 환경 변수를 선호합니다.

그러나이 app.config에서 해당 DB 문자열을 가져올 수 없습니다. 어떻게 좀 더 세계화 될 수있는 무언가로 그들을 옮길 수 있습니까? & dynamic. 이상적으로는 단 하나의 장소에서 설정해야합니다. 이상적으로는 다른 파일이나 C# 프로젝트 외부에있는 config 파일과 같은 환경 변수로 옮길 수 있습니다.

감사합니다.

답변

1

내 조언이 될 것이다하는 networklocation의 예에서 XML 파일에 유지되는 연결 문자열이 있습니다. \ 기계 이름은 \ DBConnectionString.config 응용 프로그램 시작 루틴에서 형식

<connectionStrings> 
    <add name="Company" 
     connectionString="Data Source=func3_db1;Initial Catalog=CompanyProduction;Integrated Security=SSPI;"/> 
    <add name="CompanyProductionEntities" 
     connectionString="metadata=res://*/DataAccess.CompanyEntities.csdl|res://*/DataAccess.CompanyEntities.ssdl|res://*/DataAccess.CompanyEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=func3_db1;initial catalog=CompanyProduction;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 

아래로, \ 컴퓨터 이름 \ DBConnectionString.config 파일 및 아래의 코드를 사용하여 업데이트 응용 프로그램 구성 파일,

// Get the application configuration file. 
System.Configuration.Configuration config = 
     ConfigurationManager.OpenExeConfiguration(
     ConfigurationUserLevel.None); 

// Create a connection string element and 
// save it to the configuration file. 

//Read the \\machine-name\DBConnectionString.config file 

// Create a connection string element. 
ConnectionStringSettings csSettings = 
     new ConnectionStringSettings("My Connection", 
     "LocalSqlServer: data source=127.0.0.1;Integrated Security=SSPI;" + 
     "Initial Catalog=aspnetdb", "System.Data.SqlClient"); 

// Get the connection strings section. 
ConnectionStringsSection csSection = 
    config.ConnectionStrings; 

// Add the new element. 
csSection.ConnectionStrings.Add(csSettings); 

// Save the configuration file. 
config.Save(ConfigurationSaveMode.Modified); 
읽기

희망이 도움이됩니다.

0

XML 파일에 대한 경로가있는 app.config에 키를 추가 할 수 있습니다. app.config에 값을 가져 오려면 먼저 새 ConfigurationManager 클래스를 작성하고 if 찾을 수없는, XML 파일을 열고이 같은이

뭔가에 찾아 :

<appSettings> 
    <add key="ConfigFileSettings" value="\\MyServer\CommonSetting\settings.xml"/> 
0

위의 허용 된 해결책을 사용했습니다. 이것은 정확한 코드입니다 (위와 약간 다릅니다).

이 솔루션은 현재 사용중인 app.config 파일을 효과적으로 유지합니다. app.config 파일의 다른 모든 설정은 "connectionString"부분을 내 사용자 지정 항목으로 "대체"한다는 점을 제외하고는 그대로 유지됩니다.

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    System.Console.WriteLine("Starting to write app.config stuff"); 

    //Change the Admin's app.config where name=companyProductionEntities 
    config.ConnectionStrings.ConnectionStrings["companyProductionEntities"].ConnectionString = 
     string.Format(@"metadata=res://*/DataAccess.companyEntities.csdl|res://*/DataAccess.companyEntities.ssdl|res://*/DataAccess.companyEntities.msl;provider=System.Data.SqlClient;provider connection string=';data source={0};initial catalog=companyProduction;integrated security=True;multipleactiveresultsets=True;App=EntityFramework';", SeleniumConfiguration.SimpleDatabaseConnectionString); 
    config.Save(ConfigurationSaveMode.Modified, true); 
    ConfigurationManager.RefreshSection("connectionStrings");