다음을 통해 공유


UI 자동화 테스트 라이브러리

UI 자동화 테스트 라이브러리(UIA 테스트 라이브러리)는 자동화된 테스트 시나리오에서 드라이버 애플리케이션에서 호출하는 API입니다. 드라이버는 확인이 필요한 컨트롤에서 자동화 요소(IUIAutomationElement 개체)를 가져와서 UI 자동화 테스트 라이브러리에 제공하는 애플리케이션입니다. 그런 다음, 테스트 라이브러리는 UI 자동화 구현을 확인하고 유효성을 검사합니다. UI 자동화 및 자동화 요소에 대한 자세한 내용은 UI 자동화 기본 사항을 참조하세요.

UI 자동화 테스트 라이브러리 워크플로

다음 다이어그램에서는 콘솔 애플리케이션을 드라이버로 사용하여 UI 자동화 테스트 라이브러리를 통합하는 테스트 워크플로를 보여 줍니다. 이 경우 드라이버는 Notepad.exe instance 시작하고 편집 컨트롤에서 자동화 요소(즉, IUIAutomationElement 개체)를 가져옵니다. 다음으로, 드라이버는 테스트 중인 UI 플랫폼을 기반으로 UI 자동화 테스트 라이브러리 개체를 만든 다음 자동화 요소를 매개 변수로 전달합니다. UI 자동화 테스트 라이브러리는 자동화 요소가 문서 컨트롤 형식임을 확인한 다음 문서 컨트롤 테스트, 텍스트스크롤 컨트롤 패턴 테스트 및 일반 자동화 요소 테스트를 실행합니다.

빨간색 화살표를 사용하여 드라이버에서 UIATestLibrary로의 드라이버 간 흐름을 보여 주는 다이어그램

UI 자동화 테스트 라이브러리를 사용하여 로깅

UI 자동화 테스트 라이브러리는 외부 DLL을 사용하여 테스트 실행의 결과를 기록합니다. XML로 로깅 및 콘솔에 대한 로깅을 지원합니다.

XML 로깅

XML 로깅은 일반적으로 Visual UI 자동화 Verify에서 사용되지만 명령줄 워크플로에 통합할 수도 있습니다.

XML 로깅을 지정하는 경우 드라이버 애플리케이션은 XmlWriter 개체를 만들고 XmlLog.GetTestRunXml 메서드에 전달하여 출력을 직렬화해야 합니다. 그런 다음 드라이버는 직렬화된 XML을 내부적으로 사용하거나 파일에 쓸 수 있습니다.

XML 로깅에는 다음 DLL이 필요합니다.

  • WUIALogging.dll
  • WUIALoggerXml.dll

콘솔 로깅

기본적으로 UI 자동화 테스트 라이브러리는 콘솔 로깅을 사용합니다. 여기서 모든 로깅 출력은 콘솔 창에 일반 텍스트로 파이프됩니다. WUIALogging.dll 콘솔 로깅에 필요합니다.

로깅에 대한 코드 요구 사항

드라이버 애플리케이션은 UI 자동화 테스트 라이브러리 로깅을 사용하려면 다음 코드 조각을 포함해야 합니다.

\\ Include logging functionality.
using Microsoft.Test.UIAutomation.Logging;

...

\\ Select a logger.
UIAVerifyLogger.SetLoggerType(LogTypes.DefaultLogger | 
                              LogTypes.ConsoleLogger | 
                              LogTypes.XmlLogger);

...

\\ Output comment to selected logger.
UIAVerifyLogger.LogComment("...");

로깅 예제

다음 예제에서는 기본 로깅 기능을 보여 줍니다. 기본 테스트 자동화 드라이버 애플리케이션에서 UI 자동화 테스트 라이브러리 API를 사용하는 방법을 보여 줍니다.

//---------------------------------------------------------------------------
//
// Description: Sample logger.
//
//---------------------------------------------------------------------------
using System;

namespace WUITest
{
    using Microsoft.Test.UIAutomation.Logging;

    public sealed class TestMain
    {
        private TestMain() { }

        /// -----------------------------------------------------------------
        /// <summary>
        /// Entry point
        /// </summary>
        /// -----------------------------------------------------------------
        [STAThread]
        static void Main(string[] args)
        {
            // Call SetLogger() if you don't want to use the default logger.
            // To set the logger type, call SetLogger(<string>).
            // <string> can be specified from the command line or from the 
            // the UI Automation Test Library enumeration:
            //  
            //     Logger.SetLogger(LogTypes.ConsoleLogger);
            //     Logger.SetLogger(LogTypes.DefaultLogger);

            Logger.SetLogger(LogTypes.DefaultLogger);

            Logger.StartTest("Test 1");
            Logger.LogComment("This is a comment");
            Logger.LogError(new Exception("My error"), false);
            Logger.EndTest();

            Logger.StartTest("Test 2");
            Logger.LogComment("This is a second comment");
            Logger.LogPass();
            Logger.EndTest();

            Logger.ReportResults();

        }
    }
}
//---------------------------------------------------------------------------
//
// Description: Sample test automation.
//
//---------------------------------------------------------------------------

using System;
using System.Windows;

namespace WUITest
{
    using System.Diagnostics;
    using System.Threading;
    using System.Windows.Automation;
    using Microsoft.Test.UIAutomation;
    using Microsoft.Test.UIAutomation.Core;
    using Microsoft.Test.UIAutomation.TestManager;
    using Microsoft.Test.UIAutomation.Tests.Controls;
    using Microsoft.Test.UIAutomation.Tests.Patterns;
    using Microsoft.Test.UIAutomation.Tests.Scenarios;
    using Microsoft.Test.UIAutomation.Logging;

    public sealed class TestMain
    {

        // Time in milliseconds to wait for the application to start.
        static int MAXTIME = 5000;
        // Time in milliseconds to wait before trying to find the application.
        static int TIMEWAIT = 100; 

        /// -------------------------------------------------------------------
        /// <summary>
        /// Start Notepad, obtain an AutomationElement object, and run tests.
        /// </summary>
        /// -------------------------------------------------------------------
        [STAThread]
        static void Main(string[] args)
        {
            // Dump the information to the console window.  
            // Use a different LogTypes value if you need to dump to another logger, 
            // or create your own logger that complies with the interface.
            UIAVerifyLogger.SetLoggerType(LogTypes.ConsoleLogger);

            // Get the automation element.
            AutomationElement element = StartApplication("NOTEPAD.EXE", null);

            // Call the UI Automation Test Library tests.
            TestRuns.RunAllTests(element, true, TestPriorities.Pri0, 
                    TestCaseType.Generic, false, true, null);

            // Clean up.
            ((WindowPattern)element.GetCurrentPattern(WindowPattern.Pattern)).Close();

            // Dump the summary of results.
            UIAVerifyLogger.ReportResults();
        }

        /// -------------------------------------------------------------------------
        /// <summary>
        /// Start the application and retrieve its AutomationElement. 
        /// </summary>
        /// -------------------------------------------------------------------------
        static public AutomationElement StartApplication(string appPath, 
                string arguments)
        {
            Process process;

            Library.ValidateArgumentNonNull(appPath, "appPath");

            ProcessStartInfo psi = new ProcessStartInfo();

            process = new Process();
            psi.FileName = appPath;

            if (arguments != null)
            {
                psi.Arguments = arguments;
            }

            UIAVerifyLogger.LogComment("Starting({0})", appPath);
            process.StartInfo = psi;

            process.Start();

            int runningTime = 0;
            while (process.MainWindowHandle.Equals(IntPtr.Zero))
            {
                if (runningTime > MAXTIME)
                    throw new Exception("Could not find " + appPath);

                Thread.Sleep(TIMEWAIT);
                runningTime += TIMEWAIT;

                process.Refresh();
            }

            UIAVerifyLogger.LogComment("{0} started", appPath);

            UIAVerifyLogger.LogComment("Obtained an AutomationElement for {0}", appPath);
            return AutomationElement.FromHandle(process.MainWindowHandle);

        }
    }
}