web-dev-qa-db-ja.com

RunSettingsファイル内のTestRunParametersにアクセスする方法

読み取り https://msdn.Microsoft.com/en-us/library/jj635153.aspx 私は.RunSettingsファイルは、例に類似したいくつかのパラメーターを持ちます。

  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

私は.RunSettings各環境のファイル。指定されたRunSettingsファイルの環境でCodedUIテストを実行するための適切なURLと資格情報が必要です。

コマンドラインから、実行可能な設定ファイルを参照することがわかります:

vstest.console myTestDll.dll /Settings:Local.RunSettings /Logger:trx
vstest.console myTestDll.dll /Settings:QA.RunSettings /Logger:trx

等...

しかし、codedUIテスト内からTestRunParametersを実際に利用する方法を呼び出す方法は見当たりません。

私がやりたいのは、TestRunParametersを使用してログインする場所と使用する資格情報を決定するテスト初期化子を設定することです。このようなもの:

[TestInitialize()]
public void MyTestInitialize()
{

    // I'm unsure how to grab the RunSettings.TestRunParameters below
    string entryUrl = ""; // TestRunParameters.webAppUrl
    string userName = ""; // TestRunParameters.webAppUserName
    string password = ""; // TestRunParameters.webAppPassword

    LoginToPage(entryUrl, userName, password);
}

public void LoginToPage(string entryUrl, string userName, string password)
{
    // Implementation
}

TestRunParametersの参照方法に関する情報は大歓迎です!

編集

/// <summary>
/// Summary description for CodedUITest1
/// </summary>
[CodedUITest]
public class CodedUITest1
{

    public static string UserName = string.Empty;

    [ClassInitialize]
    public static void TestClassInitialize(TestContext context)
    {
        UserName = context.Properties["webAppUserName"].ToString();
        Console.WriteLine(UserName);
    }

    [TestMethod]
    public void CodedUITestMethod1()
    {
        this.UIMap.RecordedMethod1();
        // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
    }

    // Rest of the default class - TestContext instantiation, UI map instantiation, etc
}

実行時に私が得ている例外:

NullReference例外

enter image description here

@williamfalconeruk上記のようにテストクラスを更新しましたが、まだ同じエラーが表示されます。

32
Kritner

レガシー環境変数の使用から離れたいと思ったので、最近これに出会いました。以下に示すソリューションは私たちのニーズに適していましたが、もっと良いものがあるかもしれません...

テストフィクスチャのTestContextメソッドのClassInitializeでこれらにアクセスできることがわかりました。これらのパラメーターを持つProperties辞書があり、ここで値にアクセスできます。

[ClassInitialize]
public static void TestClassinitialize(TestContext context)
{
    var webAppUrl = context.Properties["webAppUrl"].ToString();

   //other settings etc..then use your test settings parameters here...
}

:これらは静的であるため、これにアクセスする必要がある場合は、テストコード内でアクセスするために静的プロパティを設定する必要があります。

推奨される代替案は、データ駆動型テストのアプローチを使用することです。ここに役立つデータ駆動テストに関する基本的な情報を以下に示します。 https://msdn.Microsoft.com/en-us/library/ms182527.aspx

先ほど言ったように、上記のソリューションは基本的なレベルで私たちのニーズに合っていました。

UPDATE:テスト設定がnullを返すことに応答して、以下の画像を参照してください...

Test Settings in Visual Studio

22

この問題でResharperを使用している場合、修正を発見しました(Resharperを無効にする必要はありません)。

  1. Visual Studioのトップメニューに移動-> Resharper->オプション

  2. [ツール]セクションを見つけ、[ユニットテスト]を展開します

  3. 「MsTest」をクリックします。チェックボックスは有効になっているはずですが、その下のテスト設定ファイルのパスは空白になっている可能性があります。そうである場合、参照をクリックして、使用する実行設定ファイルを選択します。

  4. [保存]、[再構築]の順にクリックしてテストを実行すると、パラメーターが機能するようになります。

理由は定かではありませんが、Resharperを使用している場合は、単に[テスト]メニューから[テスト設定]ファイルを選択するだけでは実際には機能しません。

19
starmandeluxe

これは私のために働いています(VS2017-pro):

namespace TestApp.Test
{
    [TestClass]
    public class UnitTest1
    {
        // This enables the runner to set the TestContext. It gets updated for each test.
        public TestContext TestContext { get; set; }
        [TestMethod]
        public void TestMethod1()
        {
            // Arrange
            String expectedName = "TestMethod1";
            String expectedUrl = "http://localhost";

            // Act
            String actualName = TestContext.TestName;
            // The properties are read from the .runsettings file
            String actualUrl = TestContext.Properties["webAppUrl"].ToString();

            // Assert
            Assert.AreEqual(expectedName, actualName);
            Assert.AreEqual(expectedUrl, actualUrl);
        }

        [TestMethod]
        public void TestMethod2()
        {
            // Arrange
            String expectedName = "TestMethod2";

            // Act
            String actualName = TestContext.TestName;

            // Assert
            Assert.AreEqual(expectedName, actualName);
        }
    }
}

使用するrunsettingsファイルを選択してください。テスト->テスト設定。

3
Paul0515

Resharperを無効にする代わりに、MSTestサポートを有効にし、Resharperオプションダイアログでテスト設定ファイルを選択します(-> Tools-> Unit Testing-> MsTest)。

3
A. Miettinen

NullReferenceException問題の場合:

私も最近同じ問題に直面していましたが、解決策はVisual Studio 2013の最新のアップデートを取得することです。現在、最新のアップデートはUpdate 5です。どのアップデートがこの問題を修正するのかわかりません。 Update 5を適用すると、ClassInitializeメソッドのTestRunParametersに正常にアクセスできました。

アップデートを見つけることができます@ https://support.Microsoft.com/en-us/kb/282976 私は2台のマシンがあり、1台はすべて正常に動作し、もう1台は取得していました例外。唯一の違いはVSの更新であると調査しました。それを適用して問題を解決しました。 :)

2
Rishi

私もこの正確なことをやろうとしていました。多くの人が知っているように、MTMを介してテストを実行すると、使用される実行設定の名前など、TestContextにいくつかの追加プロパティが公開されます。このプロパティをテストデータの種類の "外部キー"として使用し、環境URLなどをハードコーディングせずに、または箱から出してすぐにテストできる信じられないほど不十分な "データ駆動"ツールを使用せずに指定できます。

もちろん、Microsoftが説明する@kritnerが試みていること以外に、BDTの一部としてテストを実行したり、ワークフローをリリースするときに、ランタイムプロパティを公開する方法はありません [〜#〜] here [〜#〜] =。ただし、そのリンクのコメントを読むと、ここで推測できることを発見できます。

  • このソリューションを使用するには、VS 2013 R5またはVS 2015を使用する必要があります
  • 単体テストではonlyのみ動作します!

CIまたはCDワークフローの一部としてUIまたはロードテストを実行しようとしている私たちは完全に台無しです。 MTMで作成された特定のテスト構成(設定ではない)でプラン/スイートを実行する場合でも、testContextに追加のプロパティはありません。 @Adamは、実行中とデバッグ中にこれを機能させることができたかもしれませんが、単体テストでしか機能しなかった可能性があります。 CodedUIを通じて、NullReferenceExceptionを取得せずにプロパティを取得できませんでした。調査に使用していたジャンキーコードの例を次に示します。

if (testContextInstance.Properties["__Tfs_TestConfigurationName__"] != null) //Exposed when run through MTM
{
TFSTestConfigurationName = testContextInstance.Properties["__Tfs_TestConfigurationName__"].ToString();
}
else TFSTestConfigurationName = "Local"; //Local
var configName = testContextInstance.Properties["configurationName"] ?? "No Config Found";
Trace.WriteLine("Property: " + configName);

そして、私の.runsettingsファイルのXML:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Parameters used by tests at runtime. These are required as a substitute for TFS/MTM test settings.-->
  <!-- File instructions: https://msdn.Microsoft.com/en-us/library/jj635153.aspx#example -->
  <!-- TFS instructions: https://blogs.msdn.Microsoft.com/visualstudioalm/2015/09/04/supplying-run-time-parameters-to-tests/ -->  
  <TestRunParameters>
    <Parameter name="configurationName" value="Local" />
  </TestRunParameters>
</RunSettings>

そして、BDTワークフローによって生成された.trxからの抜粋:

Property: No Config Found 
2
Ryanman

Resharperを無効にすることで、ユニットテストでこれを解決できました。コード化されたUIテストでも同じことが言えるといいのですが。

1
Jonathan Eckman