여러 UI 맵이 포함된 대형 응용 프로그램 테스트Testing a Large Application with Multiple UI Maps

이 항목에서는 여러 UI 맵을 사용하여 대규모 응용 프로그램을 테스트하는 경우 코딩된 UI 테스트를 사용하는 방법에 대해 설명합니다.This topic discusses how to use coded UI tests when you are testing a large application by using multiple UI maps.

RequirementsRequirements

  • Visual Studio EnterpriseVisual Studio Enterprise

    새로 코딩된 UI 테스트를 만들면 Visual StudioVisual Studio 테스트 프레임워크에서는 기본적으로 <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> 클래스에 테스트 코드를 생성합니다.When you create a new coded UI test, the Visual StudioVisual Studio testing framework generates code for the test by default in a <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> class. 코딩된 UI 테스트를 기록하는 방법에 대한 자세한 내용은 코딩된 UI 테스트 만들기코딩된 UI 테스트 분석을 참조하세요.For more information about how to record coded UI tests, see Creating Coded UI Tests and Anatomy of a Coded UI Test.

    UI 맵에 대해 생성된 코드에는 테스트가 상호 작용하는 각 개체에 대한 클래스가 들어 있습니다.The generated code for the UI Map contains a class for each object that the test interacts with. 특히 각각 생성된 메서드의 경우 메서드 매개 변수의 도우미 클래스가 특별히 해당 메서드를 위해 생성됩니다.For each generated method, a companion class for method parameters is generated specifically for that method. 응용 프로그램에 개체, 페이지, 폼 및 컨트롤이 매우 많으면 UI 맵이 매우 커질 수 있습니다.If there are a large number of objects, pages, and forms and controls in your application, the UI Map can grow very large. 또한 테스트 작업을 하는 사람이 여러 명인 경우 하나의 큰 UI 맵 파일로 응용 프로그램을 통제하기 힘들어집니다.Also, if several people are working on tests, the application becomes unwieldy with a single large UI Map file.

    UI 맵 파일을 여러 개 사용하면 다음과 같은 이점을 얻을 수 있습니다.Using multiple UI Map files can provide the following benefits:

  • 각 맵은 응용 프로그램의 논리적 하위 집합과 연결될 수 있습니다.Each map can be associated with a logical subset of the application. 그러면 변경 내용을 보다 쉽게 관리할 수 있습니다.This makes changes easier to manage.

  • 각 테스터는 응용 프로그램의 다른 섹션에 대한 작업을 수행 중인 다른 테스터를 방해하지 않고 응용 프로그램의 한 섹션에 대한 작업을 수행하고 코드를 검사할 수 있습니다.Each tester can work on a section of the application and check in their code without interfering with other testers working on other sections of the application.

  • UI의 다른 부분에 대한 테스트에 미치는 영향을 최소화하면서 응용 프로그램 UI에 대한 추가 기능을 증분식으로 확장할 수 있습니다.Additions to the application UI can be scaled incrementally with minimal effect on tests for other parts of the UI.

여러 UI 맵이 필요하나요?Do you need multiple UI Maps?

각각 다음과 같은 유형의 상황에서 UI 맵을 여러 개 만드세요.Create multiple UI Maps in each of these types of situations:

  • 여러 복합 UI 컨트롤의 복잡한 집합이 함께 논리 연산을 수행(예: 웹 사이트의 등록 페이지 또는 쇼핑 카트의 구매 페이지)Several complex sets of composite UI controls that together perform a logical operation, such as a registration page in a Web site, or the purchase page of a shopping cart.

  • 독립 컨트롤 집합을 응용 프로그램의 다양한 지점에서 액세스(예: 여러 작업 페이지가 있는 마법사).An independent set of controls that are accessed from various points of the application, such as a wizard with several pages of operations. 마법사의 각 페이지가 특히 더 복잡한 경우 각 페이지에 대한 개별 UI 맵을 만들 수 있습니다.If each page of a wizard is especially complex, you could create separate UI Maps for each page.

여러 UI 맵 추가Adding Multiple UI Maps

코딩된 UI 테스트 프로젝트에 UI 맵을 추가하려면To add a UI Map to your coded UI test project

  1. 솔루션 탐색기에서 코딩된 UI 테스트 프로젝트에 모든 UI 맵을 저장할 폴더를 만들려면 코딩된 UI 테스트 프로젝트 파일을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 폴더를 선택합니다.In Solution Explorer, to create a folder in your coded UI test project to store all the UI Maps, right-click the coded UI test project file, point to Add and then choose New Folder. 예를 들어 이 폴더의 이름을 UIMaps라고 지정해 봅니다.For example, you could name it UIMaps.

    새 폴더는 코딩된 UI 테스트 프로젝트 아래에 표시됩니다.The new folder is displayed under the coded UI test project.

  2. UIMaps 폴더를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 항목을 선택합니다.Right-click the UIMaps folder, point to Add, and then choose New Item.

    새 항목 추가 대화 상자가 표시됩니다.The Add New Item dialog box is displayed.

    참고

    코딩된 UI 테스트 프로젝트 내에 있어야 새로 코딩된 UI 테스트 맵을 추가할 수 있습니다.You must be in a coded UI test project to add a new coded UI test map.

  3. 목록에서 코딩된 UI 테스트 맵을 선택합니다.Select Coded UI Test Map from the list.

    이름 상자에 새 UI 맵의 이름을 입력합니다.In the Name box, enter a name for the new UI Map. 해당 맵이 나타낼 구성 요소 또는 페이지의 이름을 사용합니다(예: HomePageMap).Use the name of the component or page that the map will represent, for example, HomePageMap.

  4. 추가를 선택합니다.Choose Add.

    Visual StudioVisual Studio 창이 최소화되고 코딩된 UI 테스트 빌더 대화 상자가 표시됩니다.The Visual StudioVisual Studio window minimizes and the Coded UI Test Builder dialog box is displayed.

  5. 첫 번째 메서드에 대한 작업을 기록하고 코드 생성을 선택합니다.Record the actions for the first method and choose Generate Code.

  6. 첫 번째 구성 요소 또는 페이지에 대한 모든 작업 및 어설션을 기록한 다음, 메서드로 그룹화한 후 코딩된 UI 테스트 빌더 대화 상자를 닫습니다.After you have recorded all actions and assertions for the first component or page and grouped them into methods, close the Coded UI Test Builder dialog box.

  7. 계속해서 UI 맵을 만듭니다.Continue to create UI Maps. 작업 및 어설션을 기록한 다음 각 구성 요소의 메서드로 그룹화한 후 코드를 생성합니다.Record the actions and assertions, group them into methods for each component, and then generate the code.

    대부분 모든 마법사, 폼 및 페이지의 경우 응용 프로그램의 최상위 창은 일정하게 남아 있습니다.In many cases, the top level window of your application remains constant for all wizards, forms, and pages. 각 UI 맵에 최상위 창에 대한 클래스가 있더라도 모든 맵은 아마도 응용 프로그램의 모든 구성 요소가 실행되는 동일한 최상위 창을 참조할 것입니다.Although each UI Map has a class for the top level window, all maps are probably referring to the same top level window within which all components of your application run. 코딩된 UI 테스트는 최상위 창에서 시작하여 위에서 아래로 계층적으로 컨트롤을 검색합니다. 따라서 복잡한 응용 프로그램에서는 실제 최상위 창이 모든 UI 맵에 중복되어 있을 수 있습니다.Coded UI tests search for controls hierarchically from the top down, starting from the top level window, so in a complex application, the real top level window could be duplicated in every UI Map. 실제 최상위 창이 중복된 경우 해당 창이 변경되면 여러 가지 수정 사항이 발생합니다.If the real top level window is duplicated, multiple modifications will result if that window changes. 이로 인해 UI 맵 간에 전환 시 성능 문제가 발생할 수 있습니다.This could cause performance problems when you switch between UI Maps.

    이러한 영향을 최소화하려면 CopyFrom() 메서드를 사용하여 해당 UI 맵의 새 최상위 창이 주 최상위 창과 동일한지 확인할 수 있습니다.To minimize this effect, you can use the CopyFrom() method to ensure that the new top level window in that UI Map is the same as the main top level window.

예제Example

다음 예는 다양한 UI 맵에서 생성된 클래스로 표현되는 각 구성 요소 및 해당 자식 컨트롤에 액세스할 수 있는 유틸리티 클래스의 일부입니다.The following example is part of a utility class that provides access to each component and their child controls which are represented by the classes generated in the various UI Maps.

이 예제에서는 Contoso라는 웹 응용 프로그램에 홈 페이지, 제품 페이지 및 쇼핑 카트 페이지가 있습니다.For this example, a Web application named Contoso has a Home Page, a Product Page, and a Shopping Cart Page. 이러한 각 페이지는 브라우저 창인 공통 최상위 창을 공유합니다.Each of these pages share a common top level window which is the browser window. 각 페이지에 대한 UI 맵이 있으며 유틸리티 클래스에는 다음과 유사한 코드가 있습니다.There is a UI Map for each page and the utility class has code similar to the following:

using ContosoProject.UIMaps;  
using ContosoProject.UIMaps.HomePageClasses;  
using ContosoProject.UIMaps.ProductPageClasses;  
using ContosoProject.UIMaps.ShoppingCartClasses;  

namespace ContosoProject  
{  
    public class TestRunUtility  
    {  
        // Private fields for the properties  
        private HomePage homePage = null;  
        private ProductPage productPage = null;  
        private ShoppingCart shoppingCart = null;  

        public TestRunUtility()  
        {  
            homePage = new HomePage();  
        }  

        // Properties that get each UI Map  
        public HomePage HomePage  
        {  
            get { return homePage; }  
            set { homePage = value; }  
        }  

        // Gets the ProductPage from the ProductPageMap.  
        public ProductPage ProductPageObject  
        {  
            get  
            {  
                if (productPage == null)  
                {  
                    // Instantiate a new page from the UI Map classes  
                    productPage = new ProductPage();  

                    // Since the Product Page and Home Page both use  
                    // the same browser page as the top level window,  
                    // get the top level window properties from the  
                    // Home Page.  
                    productPage.UIContosoFinalizeWindow.CopyFrom(  
                        HomePage.UIContosoWindowsIWindow);  
                }  
                return productPage;  
            }  
        }  

    // Continue to create properties for each page, getting the   
    // page object from the corresponding UI Map and copying the   
    // top level window properties from the Home Page.  
}  

참고 항목See Also

<xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap><xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap>
<xref:Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow.CopyFrom%2A><xref:Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow.CopyFrom%2A>
UI 자동화를 사용하여 코드 테스트 Use UI Automation To Test Your Code
코딩된 UI 테스트 만들기 Creating Coded UI Tests
코딩된 UI 테스트 분석Anatomy of a Coded UI Test