2

複数のテスターに​​よって複数のサーバーで実行されるいくつかのc#セレンテストスイートがあります。

できれば設定を簡素化したい。現在、それぞれ独自のapp.configを持つ複数のc#seleniumプロジェクトがあります。サーバーを変更したい場合は、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);

したがって、「 Firefox」または「Chrome」または「IE 」に設定できる「 CompanyTestBrowser 」という変数があります。

すべてのSeleniumテストを実行するPowerShellスクリプトは、必要なときにいつでも変数を簡単に変更できるため、環境変数が好きです。

ただし、これらのDB文字列をこのapp.configから引き出すことはできないようです。どうすれば、もう少しグローバルでダイナミックなものにそれらを移動できますか。理想的には、1つの場所に設定するだけで済みますか?理想的には、それらを他のような環境変数またはc#プロジェクトの外部にある構成ファイルに移動できます。

ありがとう!

4

3 に答える 3

1

私のアドバイスは、接続文字列をnetworklocationexのxmlファイルに保持することです。以下の形式の\machine-name\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>

アプリケーションの起動ルーチンで、\ machine-name \ 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);

お役に立てれば。

于 2012-04-27T15:18:47.607 に答える
0

すべての共通設定を含むXMLファイルへのパスを持つキーをapp.configに追加してから、新しいConfigurationManagerクラスを記述して、最初にapp.configから値を取得し、見つからない場合は開きます。 XMLファイルを探してそこで探します

このようなもの:

  <appSettings>
    <add key="ConfigFileSettings" value="\\MyServer\CommonSetting\settings.xml"/>
于 2012-04-27T13:32:22.537 に答える
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");
于 2012-05-14T12:31:08.080 に答える