Share via


방법: 진단 데이터 어댑터 만들기

진단 데이터 어댑터를 만들려면 Visual Studio를 사용해서 클래스 라이브러리를 만든 후 Visual Studio Premium에서 제공되는 진단 데이터 어댑터 API를 사용자의 클래스 라이브러리에 추가합니다. 테스트 실행 중 발생한 이벤트를 처리할 때 프레임워크에서 제공되는 DataCollectionSink에 원하는 정보를 스트림 또는 파일 형태로 보냅니다. DataCollectionSink로 보낸 스트림이나 파일은 테스트를 마칠 때 테스트 결과에 첨부 파일로 저장됩니다. Test Runner를 사용하거나 이러한 테스트 결과를 기반으로 하여 버그를 만들면 해당 버그에도 이 파일이 연결됩니다.

테스트를 실행하는 컴퓨터에 적용되거나 테스트 대상 응용 프로그램을 실행하는 데 사용할 환경에 속한 컴퓨터에 적용되는 진단 데이터 어댑터를 만들 수 있습니다. 예를 들어 테스트를 실행하는 테스트 컴퓨터에서 파일을 수집하거나 응용 프로그램의 웹 서버 역할을 하는 컴퓨터에서 파일을 수집할 수 있습니다.

테스트 관리자 또는 Visual Studio를 사용하여 테스트 설정을 만들 때 표시되는 알기 쉬운 이름을 진단 데이터 어댑터에 지정할 수 있습니다. 테스트 설정을 사용하면 테스트를 실행할 때 해당 환경에서 특정 진단 데이터 어댑터를 실행할 컴퓨터 역할을 정의할 수 있습니다. 테스트 설정을 만들 때 진단 데이터 어댑터를 구성할 수도 있습니다. 예를 들어 웹 서버에서 사용자 지정 로그를 수집하는 진단 데이터 어댑터를 만들 수 있습니다. 테스트 설정을 만들 때 이 웹 서버 역할을 수행하는 컴퓨터에서 이 진단 데이터 어댑터를 실행하도록 선택할 수 있고 작성된 로그 중 마지막 로그 세 개만 수집하도록 테스트 설정의 구성을 수정할 수 있습니다. 테스트 설정에 대한 자세한 내용은 테스트 설정을 사용하여 컴퓨터 설정 및 진단 정보 수집를 참조하십시오.

테스트를 실행하면 진단 데이터 어댑터가 테스트의 해당 지점에서 작업을 수행할 수 있도록 이벤트가 발생합니다.

중요

이러한 이벤트는 여러 컴퓨터에서 테스트를 실행할 때를 포함하여 여러 스레드에서 발생할 수 있습니다.따라서 발생할 수 있는 스레드 문제를 알고 사용자 지정 어댑터의 내부 데이터를 실수로 손상시키지 않도록 주의해야 합니다.진단 데이터 어댑터는 스레드로부터 안전합니다.

아래 목록에는 진단 데이터 어댑터를 만들 때 사용할 수 있는 몇 가지 주요 이벤트가 나와 있습니다. 진단 데이터 어댑터 이벤트의 전체 목록을 보려면 추상 DataCollectionEvents 클래스를 참조하십시오.

Event

설명

SessionStart

테스트 실행을 시작합니다.

SessionEnd

테스트 실행을 끝냅니다.

TestCaseStart

테스트 실행의 각 테스트를 시작합니다.

TestCaseEnd

테스트 실행의 각 테스트를 끝냅니다.

TestStepStart

테스트의 각 테스트 단계를 시작합니다.

TestStepEnd

테스트의 각 테스트 단계를 끝냅니다.

참고

수동 테스트를 완료하면 어떠한 데이터 수집 이벤트도 더 이상 진단 데이터 어댑터로 전달되지 않습니다.테스트가 다시 실행되면 새 테스트 사례 식별자가 추가됩니다.사용자가 테스트 중 테스트를 다시 설정하여 TestCaseReset 이벤트가 발생하거나 테스트 단계 결과를 변경하면, 데이터 수집 이벤트가 진단 데이터 어댑터로 보내지지 않지만 테스트 사례 식별자는 동일하게 유지됩니다.테스트 사례가 다시 설정되었는지 여부를 확인하려면 진단 데이터 어댑터의 테스트 사례 식별자를 추적해야 합니다.

테스트 설정을 만들 때 구성한 정보를 기반으로 데이터 파일을 수집하는 진단 데이터 어댑터를 만들려면 다음 절차를 따릅니다.

사용자 지정 편집기를 비롯한 전체 예제 진단 데이터 어댑터 프로젝트는 진단 데이터 어댑터를 만들기 위한 샘플 프로젝트를 참조하십시오.

진단 데이터 어댑터를 만들고 설치

진단 데이터 어댑터를 만들고 설치하려면

  1. 새 클래스 라이브러리를 만듭니다.

    1. 파일 메뉴에서 새로 만들기를 선택한 후 새 프로젝트를 가리킵니다.

    2. 프로젝트 형식에서 사용할 언어를 선택합니다.

    3. Visual Studio에 설치되어 있는 템플릿에서 클래스 라이브러리를 선택합니다.

    4. 진단 데이터 어댑터의 이름을 입력합니다.

    5. 확인을 선택합니다.

  2. Microsoft.VisualStudio.QualityTools.ExecutionCommon 어셈블리를 추가합니다.

    1. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 참조 추가 명령을 선택합니다.

    2. .NET을 선택하고 Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll을 찾습니다.

    3. 확인을 선택합니다.

  3. Microsoft.VisualStudio.QualityTools.Common 어셈블리를 추가합니다.

    1. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 참조 추가 명령을 선택합니다.

    2. /.NET을 선택하고 Microsoft.VisualStudio.QualityTools.Common.dll을 찾습니다.

    3. 확인을 선택합니다.

  4. 다음 using 문을 클래스 파일에 추가합니다.

    using Microsoft.VisualStudio.TestTools.Common;
    using Microsoft.VisualStudio.TestTools.Execution;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System;
    
  5. DataCollectorTypeUriAttribute를 진단 데이터 어댑터의 클래스에 추가하여 이를 진단 데이터 어댑터로 표시합니다. 여기서 Company, ProductVersion을 진단 데이터 어댑터에 맞는 적절한 정보로 바꿉니다.

    [DataCollectorTypeUri("datacollector://Company/Product/Version")]
    
  6. DataCollectorFriendlyNameAttribute 특성을 클래스에 추가합니다. 여기서 매개 변수를 진단 데이터 어댑터에 맞는 적절한 정보로 바꿉니다.

    [DataCollectorFriendlyName("Collect Log Files", false)]
    

    이렇게 지정한 이름이 테스트 설정 작업에 표시됩니다.

    참고

    DataCollectorConfigurationEditorAttribute를 추가하여 이 데이터 어댑터에 대한 사용자 지정 구성 편집기의 Type을 지정하고, 필요할 경우 편집기에 사용할 도움말 파일을 지정할 수도 있습니다.

    또한 DataCollectorEnabledByDefaultAttribute를 적용하여 이 특성이 항상 사용되도록 지정할 수도 있습니다.

  7. 진단 데이터 어댑터 클래스는 다음과 같이 DataCollector 클래스에서 상속되어야 합니다.

    public class MyDiagnosticDataAdapter : DataCollector
    
  8. 다음과 같이 지역 변수를 추가합니다.

    private DataCollectionEvents dataEvents;
    private DataCollectionLogger dataLogger;
    private DataCollectionSink dataSink;
    private XmlElement configurationSettings;
    
  9. Initialize 메서드 및 Dispose 메서드를 추가합니다. Initialize 메서드에서 다음과 같이 데이터 싱크 및 테스트 설정의 구성 데이터를 초기화하고 사용할 이벤트 처리기를 등록합니다.

    public override void Initialize(
        XmlElement configurationElement, 
        DataCollectionEvents events, 
        DataCollectionSink sink, 
        DataCollectionLogger logger, 
        DataCollectionEnvironmentContext environmentContext)
    {
           dataEvents = events;  // The test events
           dataLogger = logger;  // The error and warning log
           dataSink = sink;      // Saves collected data
           // Configuration from the test settings
           configurationSettings = configurationElement;
    
           // Register common events for the data collector
           // Not all of the events are used in this class
        dataEvents.SessionStart += 
            new EventHandler<SessionStartEventArgs>(OnSessionStart);
        dataEvents.SessionEnd += 
            new EventHandler<SessionEndEventArgs>(OnSessionEnd);
        dataEvents.TestCaseStart += 
            new EventHandler<TestCaseStartEventArgs>(OnTestCaseStart);
        dataEvents.TestCaseEnd += 
            new EventHandler<TestCaseEndEventArgs>(OnTestCaseEnd);
    }
    
    public override void Dispose(bool disposing)
    {
        if (disposing)
        {
            // Unregister the registered events
            dataEvents.SessionStart -= 
                new EventHandler<SessionStartEventArgs>(OnSessionStart);
            dataEvents.SessionEnd -= 
                new EventHandler<SessionEndEventArgs>(OnSessionEnd);
            dataEvents.TestCaseStart -= 
                new EventHandler<TestCaseStartEventArgs>(OnTestCaseStart);
            dataEvents.TestCaseEnd -= 
                new EventHandler<TestCaseEndEventArgs>(OnTestCaseEnd);
        }
    }
    
  10. 다음 이벤트 처리기 코드 및 전용 메서드를 사용하여 테스트 중에 생성된 로그 파일을 수집합니다.

    public void OnTestCaseEnd(sender, TestCaseEndEventArgs e)
    {
        // Get any files to be collected that are
        // configured in your test settings
        List<string> files = getFilesToCollect();
    
        // For each of the files, send the file to the data sink
        // which will attach it to the test results or to a bug
        foreach (string file in files)
        {
            dataSink.SendFileAsync(e.Context, file, false);
        }
    }
    
    // A private method that returns the file names
    private List<string> getFilesToCollect()
    {
        // Get a namespace manager with our namespace
        XmlNamespaceManager nsmgr =
            new XmlNamespaceManager(
                configurationSettings.OwnerDocument.NameTable);
        nsmgr.AddNamespace("ns", 
            "http://MyCompany/schemas/MyDataCollector/1.0");
    
        // Find all of the "File" elements under our configuration
        XmlNodeList files =
            configurationSettings.SelectNodes(
                "//ns:MyDataCollector/ns:File");
    
        // Build the list of files to collect from the 
        // "FullPath" attributes of the "File" nodes.
        List<string> result = new List<string>();
        foreach (XmlNode fileNode in files)
        {
            XmlAttribute pathAttribute = 
                fileNode.Attributes["FullPath"];
            if (pathAttribute != null &&
                !String.IsNullOrEmpty(pathAttribute.Value))
            {
                result.Add(pathAttribute.Value);
            }
        }
    
        return result;
    }
    

    이러한 파일은 테스트 결과에 연결됩니다. Test Runner를 사용하거나 이러한 테스트 결과를 기반으로 하여 버그를 만들면 해당 버그에도 이 파일이 연결됩니다.

    사용자 고유의 편집기를 사용하여 테스트 설정에 사용할 데이터를 수집하려면 방법: 진단 데이터 어댑터 데이터용 사용자 지정 편집기 만들기를 참조하십시오.

  11. 테스트가 완료될 때 테스트 설정에 구성된 항목을 기반으로 로그 파일을 수집하려면 App.config 파일을 만든 후 이를 솔루션에 추가해야 합니다. 이 파일은 다음과 같은 형식으로 만들며, 이때 진단 데이터 어댑터를 식별할 수 있도록 진단 데이터 어댑터의 URL을 포함해야 합니다. 이 예에서 "Company/ProductName/Version"은 실제 값으로 대체합니다.

    참고

    진단 데이터 어댑터의 정보를 구성할 필요가 없는 경우에는 구성 파일을 만들지 않아도 됩니다.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="DataCollectorConfiguration" type="Microsoft.VisualStudio.TestTools.Execution.DataCollectorConfigurationSection, Microsoft.VisualStudio.QualityTools.ExecutionCommon, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a "/>
      </configSections>
      <DataCollectorConfiguration xmlns="https://microsoft.com/schemas/VisualStudio/TeamTest/2010">
        <DataCollector typeUri="datacollector://MyCompany/MyProduct/1.0">
          <DefaultConfiguration>
            <!-- Your default config settings -->
            <Binaries>
              <Binary FullPath="C:\Example\Example.dll"/>
              <Binary FullPath="\\Server2\Example2.dll"/>
            </Binaries>
            <Symbols>
              <Symbol FullPath="\\ExampleServer\ExampleSymbol.pdb"/>
            </Symbols>
          </DefaultConfiguration>
        </DataCollector>
      </DataCollectorConfiguration>
    </configuration>
    

    참고

    기본 구성 요소에는 필요한 모든 데이터가 포함될 수 있습니다.테스트 설정에서 진단 데이터 어댑터를 구성하지 않은 경우에는 진단 데이터 어댑터가 실행될 때 기본 데이터가 전달됩니다.<DefaultConfigurations> 섹션에 추가하는 XML은 선언된 스키마의 일부가 될 수 없으므로 XML 오류가 생성되더라도 무시하면 됩니다.

    설치 디렉터리에 따라 Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors 경로에는 추가 구성 파일 예제가 있습니다.

    테스트를 실행할 때 환경을 사용하도록 테스트 설정을 구성하는 방법에 대한 자세한 내용은 수동 테스트에서 추가 진단 데이터 수집 또는 Microsoft Test Manager를 사용하여 자동화된 시스템 테스트에 대한 테스트 설정 만들기를 참조하십시오.

    구성 파일을 설치하는 방법은 방법: 사용자 지정 진단 데이터 어댑터 설치를 참조하십시오.

  12. 진단 데이터 어댑터 어셈블리를 만들 솔루션을 빌드합니다.

  13. 사용자 지정 편집기를 설치하는 방법은 방법: 사용자 지정 진단 데이터 어댑터 설치를 참조하십시오.

  14. 테스트를 실행할 때 환경을 사용하도록 테스트 설정을 구성하는 방법에 대한 자세한 내용은 수동 테스트에서 추가 진단 데이터 수집 또는 Microsoft Test Manager를 사용하여 자동화된 시스템 테스트에 대한 테스트 설정 만들기를 참조하십시오.

  15. 진단 데이터 어댑터를 선택하려면 먼저 기존 테스트 설정을 선택하거나 Microsoft Test Manager 또는 Visual Studio에서 새 항목을 만들어야 합니다. 어댑터는 클래스에 할당된 이름으로 테스트 설정의 데이터 및 진단 탭에 표시됩니다.

  16. Microsoft Test Manager에서 테스트를 실행할 경우 테스트를 실행하기 전에 테스트 계획에 이러한 테스트 설정을 할당하거나, 옵션과 함께 실행 명령을 사용하여 테스트 설정을 할당하고 테스트 설정을 재정의할 수 있습니다. 테스트 설정에 대한 자세한 내용은 테스트 설정을 사용하여 컴퓨터 설정 및 진단 정보 수집를 참조하십시오.

    Visual Studio에서 테스트를 실행하는 경우 이러한 테스트 설정을 활성으로 설정해야 합니다. 테스트 설정에 대한 자세한 내용은 Visual Studio 테스트를 위한 테스트 설정 지정를 참조하십시오.

  17. 진단 데이터 어댑터가 선택된 테스트 설정을 사용하여 테스트를 실행합니다.

    지정한 데이터 파일이 테스트 결과에 연결됩니다.

참고 항목

작업

Microsoft Test Manager를 사용하여 자동화된 시스템 테스트에 대한 테스트 설정 만들기

참조

DataCollectorConfigurationEditorAttribute

DataCollectionEvents

DataCollector

DataCollectionSink

DataCollectorTypeUriAttribute

DataCollectorFriendlyNameAttribute

DataCollectorEnabledByDefaultAttribute

개념

테스트 설정을 사용하여 컴퓨터 설정 및 진단 정보 수집

방법: 진단 데이터 어댑터 데이터용 사용자 지정 편집기 만들기

기타 리소스

Visual Studio 테스트를 위한 테스트 설정 지정

수동 테스트에서 추가 진단 데이터 수집