source

RunSettings 파일 내에서 TestRunParameters에 액세스하는 방법

manysource 2023. 9. 12. 20:05

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>

는 을 할 입니다..RunSettingsCodedCoded를한 URL 및 증명을 하여 각 합니다. URL은 CodedCoded를 실행합니다.지정한 RunSettings 파일의 환경에서 UI 테스트.

명령줄에서 실행할 수 있는 설정 파일을 참조할 때까지 다음과 같은 내용이 표시됩니다.

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

등..

하지만 실제로 어떻게 활용할 것인지에 대한 방법을 찾을 수 없습니다.TestRunParameters된서nem된 내에서UI 테스트.

은 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ, Δ Δ Δ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
}

실행 시 발생하는 예외 사항:

Null 참조 예외

enter image description here

@iamfalconeruk 위와 같이 테스트 클래스를 업데이트했지만 여전히 같은 오류가 발생합니다. 제가 무엇을 잘못하고 있는지 알 수 있습니까?

이 문제와 함께 리샤퍼를 사용하는 사용자의 경우 수정 사항을 발견했습니다(리샤퍼를 비활성화할 필요 없음).

  1. Visual Studio 상위 메뉴로 이동 -> 리샤퍼 -> 옵션

  2. 도구 섹션을 찾아 "단위 테스트"를 펼칩니다.

  3. MsTest를 클릭합니다.확인란이 활성화되어 있어야 하지만 아래 테스트 설정 파일 경로는 비어 있을 수 있습니다.그런 경우 찾아보기를 클릭하고 사용할 실행 설정 파일을 선택합니다.

  4. 저장, 재구축을 클릭하고 테스트를 실행합니다. 이제 매개 변수가 작동합니다.

이유는 확실하지 않지만 테스트 메뉴에서 테스트 설정 파일을 선택하기만 하면 리샤퍼를 사용할 때 실제로 테스트 설정이 작동하지 않으므로 리샤퍼 옵션에서 이 파일을 직접 가리켜야 합니다.

저도 최근에 기존 환경 변수 사용에서 벗어나고 싶어 이러한 사실을 알게 되었습니다.아래에 제시된 해결책은 우리의 요구에 적합했지만, 더 나은 해결책이 있을지도 모릅니다.

이것들에 접근할 수 있다고 밝혀졌습니다TestContextClassInitialize테스트 고정 장치의 방법입니다..Properties다음과 같은 매개 변수를 가진 사전을 사용할 수 있습니다. 여기에서 값을 액세스할 수 있습니다.

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

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

참고: 이는 정적이므로 이에 액세스해야 하는 경우 테스트 코드 내에서 액세스할 수 있도록 정적 속성을 설정해야 할 수도 있습니다.

데이터 기반 테스트(Data Driven Test) 방식을 사용하는 것이 대안입니다.다음은 데이터 기반 테스트에 대한 몇 가지 기본 정보로 도움이 될 수도 있습니다. https://msdn.microsoft.com/en-us/library/ms182527.aspx

말씀드린 바와 같이, 위 솔루션은 기본적인 수준에서 우리의 요구를 충족시켰습니다.

업데이트: 테스트 설정이 null을 반환하는 경우 아래 이미지를 참조하십시오.

Test Settings in Visual Studio

이 기능은 저에게 적합합니다(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);
        }
    }
}

사용할 run settings 파일을 선택해야 합니다. 여기서:테스트 -> 테스트 설정입니다.

리샤퍼를 비활성화하는 대안은 리샤퍼 옵션 대화상자(->도구->단위 테스트->MsTest)에서 MST 테스트 지원을 활성화하고 테스트 설정 파일을 선택하는 것입니다.

저도 이 일을 하려고 했습니다.많은 분들이 알고 계시겠지만 MTM을 통해 테스트를 실행하면 사용된 실행 설정의 이름을 비롯한 몇 가지 추가 속성이 테스트 컨텍스트에 노출됩니다.저는 이 속성을 테스트 데이터의 "Foreign Key"와 같은 종류로 사용하여 환경 URL 등을 하드 코드화하지 않고 지정하거나 박스 테스트와 함께 제공되는 매우 빈약한 "Data Driving" 도구를 사용할 수 있도록 했습니다.

물론 BDT의 일부로 테스트를 실행할 때 런타임 속성을 노출하거나 워크플로우를 릴리스할 수 있는 방법은 @kritner가 여기에 설명한 것 외에는 없습니다.그러나 해당 링크의 설명을 읽어보면 여기서 추론할 수 있는 내용을 확인할 수 있습니다.

  • 이 솔루션을 사용하려면 VS 2013 R5 또는 VS 2015를 사용해야 합니다.
  • 유닛 테스트에만 적용됩니다!

CI 또는 CD 워크플로우의 일부로 UI 또는 Load 테스트를 실행하려는 당사자는 완전히 망쳤습니다.MTM에서 생성된 특정 테스트 구성(설정 아님)으로 Plan/Suite를 실행할 때에도 testContext에서 추가 속성을 얻을 수 없습니다. @Adam은 실행 대 디버깅 시 이 작업을 수행할 수 있었지만 이 작업은 유닛 테스트에서만 작동했을 수 있습니다.코드화된 상태에서UI NullReferenceException을 받지 않고 속성을 검색할 수 없습니다.다음은 제가 조사하기 위해 사용했던 janky code의 예입니다.

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 

NullReferenceException 문제의 경우:

저도 최근에 같은 문제에 직면해 있었는데 해결책은 Visual Studio 2013의 최신 업데이트입니다.현재 최신 업데이트는 업데이트 5입니다.어떤 특정 업데이트가 이 문제를 해결하는지 잘 모르겠습니다.Update 5를 적용하여 클래스의 TestRunParameters에 성공적으로 액세스할 수 있었습니다.메서드를 초기화합니다.

업데이트 @ https://support.microsoft.com/en-us/kb/2829760 그래서 저는 두 대의 기계를 가지고 있었는데, 한 대는 모두 정상적으로 작동하고 다른 한 대는 예외를 받았습니다.VS 업데이트만 다를 뿐이라는 것을 조사했고, 이를 적용하여 문제를 해결했습니다.:)

NUnit 3을 사용하면 runsettings 파일에서 속성을 찾을 수 있었습니다.

TestContext.Parameters

그렇다면 이 경우는 다음과 같습니다.

string entryUrl = TestContext.Parameters["webAppUrl"];
string username = TestContext.Parameters["webAppUserName"];
string password = TestContext.Parameters["webAppPassword"];

유닛 테스트를 위해 리샤퍼를 비활성화하여 이 문제를 해결할 수 있었습니다.Coded UI 테스트에서도 같은 말을 할 수 있었으면 좋겠습니다.

응용프로그램 설정을 사용하지 않는 이유는 무엇입니까?

AppSettings

그런 다음 어디서든 읽을 수 있습니다.

var yesICan= Properties.Settings.Default.IToldYou;

여기서 속성을 만들 수 있습니다. 많은 작업을 수행할 수 있습니다.

public string URL_WEBOFFICE
    {
        get
        {
            return Properties.Settings.Default.WEBOFFICE_URL.Replace("***", Properties.Settings.Default.SiteName);
        }

    }

언급URL : https://stackoverflow.com/questions/31707415/how-to-access-testrunparameters-within-runsettings-file