데이터 기반의 코딩된 UI 테스트 만들기Creating a Data-Driven Coded UI Test

다른 조건을 테스트하려면 각기 다른 매개 변수 값을 사용하여 테스트를 여러 번 실행합니다.To test different conditions, you can run your tests multiple times with different parameter values. 이 경우 데이터 기반의 코딩된 UI 테스트를 사용하면 편리합니다.Data-driven coded UI tests are a convenient way to do this. 데이터 소스에서 매개 변수 값을 정의하면 데이터 소스의 각 행에서 코딩된 UI 테스트가 반복됩니다.You define parameter values in a data source, and each row in the data source is an iteration of the coded UI test. 테스트의 전체 결과는 모든 반복의 결과를 기반으로 합니다.The overall result of the test will be based on the outcome for all the iterations. 예를 들어 테스트 반복 하나가 실패하면 전체 테스트 결과가 실패로 됩니다.For example, if one test iteration fails, the overall test result is failure.

요구 사항Requirements

  • Visual Studio EnterpriseVisual Studio Enterprise

데이터 기반의 코딩된 UI 테스트 만들기Create a data-driven coded UI test

이 샘플은 Windows 계산기 응용 프로그램에서 실행되는 코딩된 UI 테스트를 만듭니다.This sample creates a coded UI test that runs on the Windows Calculator application. 이 테스트에서는 두 숫자를 더한 다음 어설션을 사용해 합이 올바른지 유효성을 검사합니다.It adds two numbers together and uses an assertion to validate that the sum is correct. 그런 다음 두 숫자의 매개 변수 값과 어설션이 데이터 기반 방식으로 코딩되어 쉼표로 구분된 값(.csv) 파일에 저장됩니다.Next, the assertion and the parameter values for the two numbers are coded to become data-driven and stored in a comma-separated value (.csv) file.

1단계 - 코딩된 UI 테스트 만들기Step 1 - Create a coded UI test

  1. 프로젝트를 만듭니다.Create a project.

    코딩된 UI 테스트 프로젝트 만들기Create a coded UI test project

  2. 작업을 기록하도록 선택합니다.Choose to record the actions.

    작업을 기록하도록 선택Choose to record the actions

  3. 계산기 앱을 열고 테스트 기록을 시작합니다.Open the calculator app and start recording the test.

    작업 기록Record actions

  4. 1+2를 추가하고 레코더를 일시 중지한 다음 테스트 메서드를 생성합니다.Add 1 plus 2, pause the recorder, and generate the test method. 나중에 이 사용자 입력의 값을 데이터 파일의 값으로 바꿉니다.Later we'll replace the values of this user input with values from a data file.

    테스트 메서드 생성Genetate test method

    테스트 빌더를 닫습니다.Close the test builder. 메서드가 테스트에 추가됩니다.The method is added to the test:

    [TestMethod]  
    public void CodedUITestMethod1()  
    {  
        // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.  
        this.UIMap.AddNumbers();  
    
    }  
    
  5. AddNumbers() 메서드를 사용하여 테스트가 실행되는지 확인합니다.Use the AddNumbers() method to verify that the test runs. 위에 나와 있는 테스트 메서드에 커서를 놓고 상황에 맞는 메뉴를 열고 테스트 실행을 선택합니다.Place the cursor in the test method shown above, open the context menu, and choose Run Tests. 선택합니다(바로 가기 키: Ctrl+R, T).(Keyboard shortcut: Ctrl + R, T).

    테스트 성공 여부를 보여 주는 테스트 결과가 테스트 탐색기 창에 표시됩니다.The test result that shows if the test passed or failed is displayed in the Test Explorer window. 테스트 탐색기 창을 열려면 테스트 메뉴에서 Windows테스트 탐색기를 차례로 선택합니다.To open the Test Explorer window, from the TEST menu, choose Windows and then choose Test Explorer.

  6. 테스트에서 필요한 값을 확인하는 데 사용되는 어설션 매개 변수 값에는 데이터 소스도 사용할 수 있으므로, 어설션을 추가해 두 숫자의 합이 올바른지 유효성을 검사해 보겠습니다.Because a data source can also be used for assertion parameter values—which are used by the test to verify expected values—let's add an assertion to validate that the sum of the two numbers is correct. 위에 나와 있는 테스트 메서드에 커서를 놓고 상황에 맞는 메뉴를 열고 코딩된 UI 테스트에 대한 코드 생성코딩된 UI 테스트 빌더 사용을 차례로 선택합니다.Place the cursor in the test method shown above, open the context menu and choose Generate Code for Coded UI Test, and then Use Coded UI Test Builder.

    합을 표시하는 계산기의 텍스트 컨트롤을 매핑합니다.Map the text control in the calculator that displays the sum.

    UI 텍스트 컨트롤 매핑Map the UI text control

  7. 합의 값이 올바른지 유효성을 검사하는 어설션을 추가합니다.Add an assertion that validates that the value of the sum is correct. 값이 3DisplayText 속성을 선택한 후 어설션 추가를 선택합니다.Choose the DisplayText property that has the value of 3 and then choose Add Assertion. AreEqual 비교 연산자를 사용하여 비교 값이 3인지 확인합니다.Use the AreEqual comparator and verify that the comparison value is 3.

    어설션 구성Configure the assertion

  8. 어설션을 구성한 후 빌더에서 코드를 다시 생성합니다.After configuring the assertion, generate code from the builder again. 그러면 이 유효성 검사를 위한 새 메서드가 작성됩니다.This creates a new method for the validation.

    어설션 메서드 생성Generate the assertion method

    ValidateSum 메서드는 AddNumbers 메서드의 결과 유효성을 검사하므로 코드 블록 아래쪽으로 이동합니다.Because the ValidateSum method validates the results of the AddNumbers method, move it to the bottom of the code block.

    public void CodedUITestMethod1()  
    {  
    
        // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.  
        this.UIMap.AddNumbers();  
        this.UIMap.ValidateSum();  
    
    }  
    
  9. ValidateSum() 메서드를 사용하여 테스트가 실행되는지 확인합니다.Verify that the test runs by using the ValidateSum() method. 위에 나와 있는 테스트 메서드에 커서를 놓고 상황에 맞는 메뉴를 열고 테스트 실행을 선택합니다.Place the cursor in the test method shown above, open the context menu, and choose Run Tests. 선택합니다(바로 가기 키: Ctrl+R, T).(Keyboard shortcut:Ctrl + R, T).

    이 시점에서는 모든 매개 변수 값이 해당 메서드에서 상수로 정의되어 있습니다.At this point, all the parameter values are defined in their methods as constants. 다음으로는 데이터 집합을 만들어 테스트를 데이터 기반으로 설정합니다.Next, let's create a data set to make our test data-driven.

2단계 - 데이터 집합 만들기Step 2 - Create a data set

  1. 이름이 data.csv인 dataDrivenSample 프로젝트에 텍스트 파일을 추가합니다.Add a text file to the dataDrivenSample project named data.csv.

    프로젝트에 쉼표로 구분된 값 파일 추가Add a comma seperated value file to the project

  2. 다음 데이터를 사용하여 .csv 파일을 채웁니다.Populate the .csv file with the following data:

    Num1Num1 Num2Num2 SumSum
    33 44 77
    55 66 1111
    66 88 1414

    데이터를 추가하고 나면 파일은 다음과 같이 표시됩니다.After adding the data, the file should appear as the following:

    데이터로 .CSV 파일 채우기Populate the .CSV file with data

  3. .csv 파일은 올바른 인코딩을 사용하여 저장되어야 합니다.It is important to save the .csv file using the correct encoding. 파일 메뉴에서 고급 저장 옵션을 선택하고 인코딩으로 유니코드(시그니처 없는 UTF-8) - 코드 페이지 65001을 선택합니다.On the FILE menu, choose Advanced Save Options and choose Unicode (UTF-8 without signature) - Codepage 65001 as the encoding.

  4. .csv 파일은 출력 디렉터리에 복사해야 하며 그렇지 않으면 테스트를 실행할 수 없습니다.The .csv file, must be copied to the output directory, or the test can't run. 속성 창에서 해당 파일을 복사합니다.Use the Properties window to copy it.

    .CSV 파일 배포Deploy the .CSV file

    이제 데이터 집합을 만들었으므로 데이터를 테스트에 바인딩하겠습니다.Now that we have the data set created, let's bind the data to the test.

3단계 - 데이터 소스 바인딩 추가Step 3 - Add data source binding

  1. 데이터 소스를 바인딩하려면 테스트 메서드 바로 위에 있는 기존 DataSource 특성 내에 [TestMethod] 특성을 추가합니다.To bind the data source, add a DataSource attribute within the existing [TestMethod] attribute that is immediately above the test method.

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod]  
    public void CodedUITestMethod1()  
    {  
    
        // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.  
        this.UIMap.AddNumbers();  
        this.UIMap.ValidateSum();  
    
    }  
    

    이제 이 테스트 메서드에서 데이터 소스를 사용할 수 있습니다.The data source is now available for you to use in this test method.

    XML, SQL Express, Excel 등의 다른 데이터 소스 형식을 사용하는 샘플은 Q & A 섹션의 데이터 소스 특성 샘플을 참조하세요.See data source attribute samples in the Q & A section for samples of using other data source types such as XML, SQL Express and Excel.

  2. 테스트를 실행합니다.Run the test.

    테스트는 3회 반복 실행됩니다.Notice that the test runs through three iterations. 바인딩된 데이터 소스에 데이터 행 3개가 포함되어 있기 때문입니다.This is because the data source that was bound contains three rows of data. 그러나 테스트는 상수 매개 변수 값을 여전히 사용하고 있어 매번 1+2와 해당 합인 3을 추가하는 것도 확인할 수 있습니다.However, you will also notice that the test is still using the constant parameter values and is adding 1 + 2 with a sum of 3 each time.

    다음으로는 데이터 소스 파일의 값을 사용하는 테스트를 구성합니다.Next, we'll configure the test to use the values in the data source file.

4단계 - 코딩된 UI 테스트에서 데이터 사용Step 4 - Use the data in the coded UI test

  1. CodedUITest.cs 파일의 맨 위에 using Microsoft.VisualStudio.TestTools.UITesting.WinControls를 추가합니다.Add using Microsoft.VisualStudio.TestTools.UITesting.WinControls to the top of the CodedUITest.cs file:

    using System;  
    using System.Collections.Generic;  
    using System.Text.RegularExpressions;  
    using System.Windows.Input;  
    using System.Windows.Forms;  
    using System.Drawing;  
    using Microsoft.VisualStudio.TestTools.UITesting;  
    using Microsoft.VisualStudio.TestTools.UnitTesting;  
    using Microsoft.VisualStudio.TestTools.UITest.Extension;  
    using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;  
    using Microsoft.VisualStudio.TestTools.UITesting.WinControls;  
    
  2. 데이터 소스의 값을 적용하는 TestContext.DataRow[]CodedUITestMethod1() 메서드에 추가합니다.Add TestContext.DataRow[] in the CodedUITestMethod1() method which will apply values from the data source. 데이터 소스 값은 SearchProperties 컨트롤을 사용하여 UIMap 컨트롤에 할당된 상수를 재정의합니다.The data source values override the constants assigned to UIMap controls by using the controls SearchProperties:

    public void CodedUITestMethod1()  
    {  
    
        // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.  
        this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num1"].ToString();this.UIMap.UICalculatorWindow.UIItemWindow21.UIItem2Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num2"].ToString();  
        this.UIMap.AddNumbers();  
        this.UIMap.ValidateSumExpectedValues.UIItem2TextDisplayText = TestContext.DataRow["Sum"].ToString();  
        this.UIMap.ValidateSum();  
    
    }  
    

    데이터를 코딩할 검색 속성을 확인하려면 코딩된 UI 테스트 편집기를 사용합니다.To figure out which search properties to code the data to, use the Coded UI Test Editor.

    • UIMap.uitest 파일을 엽니다.Open the UIMap.uitest file.

      코딩된 UI 테스트 편집기 열기Open the Coded UI Test Editor

    • UI 작업을 선택하고 해당 UI 컨트롤 매핑을 관찰하여Choose the UI action and observe the corresponding UI control mapping. 매핑과 그에 해당하는 this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button 등의 코드를 살펴봅니다.Notice how the mapping corresponds to the code, for example, this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button.

      코딩에 도움을 받으려면 코딩된 UI 테스트 편집기 사용Use the Coded UI Test Editor to assist with code

    • 속성 창에서 검색 속성을 엽니다.In the Properties Window, open Search Properties. 검색 속성 Name 값은 코드에서 데이터 소스를 사용하여 조작하는 항목입니다.The search properties Name value is what is being manipulated in the code using the data source. 예를 들어 SearchProperties에는 다음과 같이 각 데이터 행의 첫 번째 열 값이 할당됩니다. UIItem1Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num1"].ToString();.For example, the SearchProperties is being assigned the values in the first column of each data row: UIItem1Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num1"].ToString();. 이 테스트는 3회 반복하는 동안 검색 속성의 Name 값을 3, 5, 6의 순서로 변경합니다.For the three iterations, this test will change the Name value for the search property to 3, then 5, and finally 6.

      코딩에 도움을 받으려면 검색 속성 사용Use the search properties to assist in coding

  3. 솔루션을 저장합니다.Save the solution.

5단계 – 데이터 기반 테스트 실행Step 5 - Run the data-driven test

  1. 테스트를 다시 실행하여 이제 테스트가 데이터 기반인지를 확인합니다.Verify that the test is now data-driven by running the test again.

    .csv 파일의 값을 사용하여 3회 반복 실행되는 테스트를 확인할 수 있습니다.You should see the test run through the three iterations using the values in the .csv file. 유효성 검사도 작동해야 하며, 테스트 탐색기에서 테스트가 통과로 표시되어야 합니다.The validation should work as well and the test should display as passed in the Test Explorer.

    지침Guidance

    자세한 내용은 Visual Studio 2012를 사용한 지속적인 업데이트 테스트 - 2장: 유닛 테스트: 내부 테스트Visual Studio 2012를 사용한 지속적인 업데이트 테스트 - 5장: 시스템 테스트 자동화를 참조하세요.For additional information, see Testing for Continuous Delivery with Visual Studio 2012 - Chapter 2: Unit Testing: Testing the Inside and Testing for Continuous Delivery with Visual Studio 2012 - Chapter 5: Automating System Tests

Q&AQ & A

SQL Express 또는 XML과 같은 기타 데이터 소스 형식에는 어떤 데이터 소스 특성이 있나요?What are the data source attributes for other data source types, such as SQL Express or XML?

아래 테이블의 샘플 데이터 소스 문자열을 코드에 복사하고 필요한 항목을 사용자 지정하여 사용할 수 있습니다.You can use the sample data source strings in the table below by copying them to your code and making the necessary customizations.

데이터 소스 형식 및 특성Data Source Types and Attributes

  • CSVCSV

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod]

  • ExcelExcel

    DataSource("System.Data.Odbc", "Dsn=ExcelFiles;Driver={Microsoft Excel Driver (*.xls)};dbq=|DataDirectory|\\Data.xls;defaultdir=.;driverid=790;maxbuffersize=2048;pagetimeout=5;readonly=true", "Sheet1$", DataAccessMethod.Sequential), DeploymentItem("Sheet1.xls"), TestMethod]

  • Team Foundation Server의 테스트 사례Test case in Team Foundation Server

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase", "http://vlm13261329:8080/tfs/DefaultCollection;Agile", "30", DataAccessMethod.Sequential), TestMethod]

  • XMLXML

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\data.xml", "Iterations", DataAccessMethod.Sequential), DeploymentItem("data.xml"), TestMethod]

  • SQL ExpressSQL Express

    [DataSource("System.Data.SqlClient", "Data Source=.\\sqlexpress;Initial Catalog=tempdb;Integrated Security=True", "Data", DataAccessMethod.Sequential), TestMethod]

Q: Windows Phone 앱에서 데이터 기반 테스트를 사용할 수 있나요?Q: Can I use data-driven tests on my Windows Phone app?

A: 예.A: Yes. Windows Phone용 코딩된 데이터 기반 UI 테스트는 테스트 메서드의 DataRow 특성을 사용하여 정의됩니다.Data-driven Coded UI tests for Windows Phone are defined using the DataRow attribute on a test method. 다음 예에서 x와 y는 첫 번째 반복에는 값 1 및 2를 사용하고 테스트의 두 번째 반복에는 값 -1 및 -2를 사용합니다.In the following example, x and y use the values of 1 and 2 for the first iteration and -1 and -2 for the second iteration of the test.

[DataRow(1, 2, DisplayName = "Add positive numbers")]  
[DataRow(-1, -2, DisplayName = "Add negative numbers")]  
[TestMethod]  
public void DataDrivingDemo_MyTestMethod(int x, int y)  

자세한 내용은 Windows Phone 앱에서 데이터 기반의 코딩된 UI 테스트 사용을 참조하세요.For more information, see Use Data-driven coded UI tests on Windows Phone apps.

Q: UIMap.Designer 파일에서 코드를 수정할 수 없는 이유는 무엇인가요?Q: Why can't I modify the code in the UIMap.Designer file?

A: UIMap - 코딩된 UI 테스트 빌더를 사용하여 코드를 생성할 때마다 UIMapDesigner.cs 파일에서 수정된 코드 변경 내용을 덮어씁니다.A: Any code changes you make in the UIMapDesigner.cs file will be overwritten every time you generate code using the UIMap - Coded UI Test Builder. 이 샘플에서 그리고 대부분의 경우에는 테스트가 데이터 소스를 사용하도록 설정하는 데 필요한 코드 변경을 테스트의 소스 코드 파일(CodedUITest1.cs)에서 수행할 수 있습니다.In this sample, and in most cases, the code changes needed to enable a test to use a data source can be made to the test's source code file (that is, CodedUITest1.cs).

기록된 메서드를 수정해야 하는 경우에는 해당 메서드를 UIMap.cs 파일에 복사한 후 이름을 바꾸어야 합니다.If you have to modify a recorded method, you must copy it to UIMap.cs file and rename it. UIMap.cs 파일을 사용하여 UIMapDesigner.cs 파일의 메서드와 속성을 재정의할 수 있습니다.The UIMap.cs file can be used to override methods and properties in the UIMapDesigner.cs file. 코딩된 UITest.cs 파일에서 원래 메서드에 대한 참조를 제거하고 이름을 바꾼 메서드 이름으로 바꾸어야 합니다.You must remove the reference to the original method in the Coded UITest.cs file and replace it with the renamed method name.

참고 항목See Also

<xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap><xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap>
<xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert><xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert>
UI 자동화를 사용하여 코드 테스트 Use UI Automation To Test Your Code
코딩된 UI 테스트 만들기 Creating Coded UI Tests
최선의 코딩된 UI 테스트 방법 Best Practices for Coded UI Tests
코딩된 UI 테스트 및 작업 기록에 지원되는 구성 및 플랫폼Supported Configurations and Platforms for Coded UI Tests and Action Recordings