Création d'un test codé de l'interface utilisateur piloté par les donnéesCreating a Data-Driven Coded UI Test

Pour tester différentes conditions, vous pouvez exécuter vos tests à plusieurs reprises avec différentes valeurs de paramètre.To test different conditions, you can run your tests multiple times with different parameter values. Les tests codés de l'interface utilisateur pilotés par les données sont un moyen pratique pour cela.Data-driven coded UI tests are a convenient way to do this. Vous définissez des valeurs de paramètre dans une source de données et chaque ligne de la source de données est une itération du test codé de l'interface utilisateur.You define parameter values in a data source, and each row in the data source is an iteration of the coded UI test. Le résultat global du test repose sur le résultat de toutes les itérations.The overall result of the test will be based on the outcome for all the iterations. Par exemple, si une itération de test échoue, le résultat global du test est un échec.For example, if one test iteration fails, the overall test result is failure.

SpécificationsRequirements

  • Visual Studio EnterpriseVisual Studio Enterprise

Créer un test codé de l'interface utilisateur piloté par les donnéesCreate a data-driven coded UI test

Cet exemple crée un test codé de l'interface utilisateur qui s'exécute sur l'application Calculatrice de Windows.This sample creates a coded UI test that runs on the Windows Calculator application. Il additionne deux nombres et utilise une assertion pour valider que la somme est correcte.It adds two numbers together and uses an assertion to validate that the sum is correct. Ensuite, l'assertion et les valeurs de paramètre des deux nombres sont codées pour devenir pilotées par les données et stockées dans un fichier de valeurs séparées par des virgules (.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.

Étape 1 : Créer un test codé de l'interface utilisateurStep 1 - Create a coded UI test

  1. Créez un projet.Create a project.

    Créer un projet de test codé de l’interface utilisateurCreate a coded UI test project

  2. Choisissez d'enregistrer les actions.Choose to record the actions.

    Choisir d’enregistrer les actionsChoose to record the actions

  3. Ouvrez l'application Calculatrice et démarrez l'enregistrement du test.Open the calculator app and start recording the test.

    Enregistrer les actionsRecord actions

  4. Additionnez 1 et 2, interrompez l'enregistreur et générez la méthode de test.Add 1 plus 2, pause the recorder, and generate the test method. Plus tard, nous allons remplacer les valeurs de cette entrée utilisateur par les valeurs d’un fichier de données.Later we'll replace the values of this user input with values from a data file.

    Générer la méthode de testGenetate test method

    Fermez le générateur de test.Close the test builder. La méthode est ajoutée au test :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. Utilisez la méthode AddNumbers() pour vérifier que le test s'exécute.Use the AddNumbers() method to verify that the test runs. Placez le curseur dans la méthode de test illustrée ci-dessus, ouvrez le menu contextuel et choisissez Exécuter les tests.Place the cursor in the test method shown above, open the context menu, and choose Run Tests. (Raccourci clavier : Ctrl+R, T).(Keyboard shortcut: Ctrl + R, T).

    Le résultat du test qui indique si le test a réussi ou a échoué apparaît dans la fenêtre Explorateur de tests.The test result that shows if the test passed or failed is displayed in the Test Explorer window. Pour ouvrir la fenêtre Explorateur de tests, dans le menu Test, choisissez Fenêtres, puis Explorateur de tests.To open the Test Explorer window, from the Test menu, choose Windows and then choose Test Explorer.

  6. Dans la mesure où une source de données peut également être utilisée pour les valeurs de paramètre d’assertion (qui sont utilisées par le test pour vérifier les valeurs attendues), ajoutons une assertion pour confirmer que la somme des deux nombres est correcte.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. Placez le curseur dans la méthode de test illustrée ci-dessus, ouvrez le menu contextuel et choisissez Générer le code pour le test codé de l’interface utilisateur, puis Utiliser le générateur de test codé de l’interface utilisateur.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.

    Mappez le contrôle de texte dans la calculatrice qui affiche la somme.Map the text control in the calculator that displays the sum.

    Mapper le contrôle de texte de l’interface utilisateurMap the UI text control

  7. Ajoutez une assertion qui vérifie que la valeur de la somme est correcte.Add an assertion that validates that the value of the sum is correct. Choisissez la propriété DisplayText dont la valeur est 3, puis choisissez Ajouter une assertion.Choose the DisplayText property that has the value of 3 and then choose Add Assertion. Utilisez le comparateur AreEqual et vérifiez que la valeur de comparaison est 3.Use the AreEqual comparator and verify that the comparison value is 3.

    Configurer l’assertionConfigure the assertion

  8. Après avoir configuré l'assertion, générez à nouveau le code à partir du générateur.After configuring the assertion, generate code from the builder again. Une nouvelle méthode pour la validation est ainsi créée.This creates a new method for the validation.

    Générer la méthode d’assertionGenerate the assertion method

    Étant donné que la méthode ValidateSum valide les résultats de la méthode AddNumbers, déplacez-la vers le bas du bloc de code.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. Vérifiez que le test s'exécute à l'aide de la méthode ValidateSum().Verify that the test runs by using the ValidateSum() method. Placez le curseur dans la méthode de test illustrée ci-dessus, ouvrez le menu contextuel et choisissez Exécuter les tests.Place the cursor in the test method shown above, open the context menu, and choose Run Tests. (Raccourci clavier : Ctrl+R, T).(Keyboard shortcut:Ctrl + R, T).

    À ce stade, toutes les valeurs de paramètre sont définies dans leurs méthodes en tant que constantes.At this point, all the parameter values are defined in their methods as constants. Ensuite, nous allons créer un jeu de données pour créer notre test piloté par les données.Next, let's create a data set to make our test data-driven.

Étape 2 : créer un jeu de donnéesStep 2 - Create a data set

  1. Ajoutez un fichier texte au projet dataDrivenSample nommé data.csv.Add a text file to the dataDrivenSample project named data.csv.

    Ajouter un fichier de valeurs séparées par une virgule au projetAdd a comma seperated value file to the project

  2. Renseignez le fichier .csv avec les données suivantes :Populate the .csv file with the following data:

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

    Après avoir ajouté les données, le fichier doit ressembler à ce qui suit :After adding the data, the file should appear as the following:

    Remplir le fichier .CSV avec des donnéesPopulate the .CSV file with data

  3. Il est important d'enregistrer le fichier .csv en utilisant le bon encodage.It is important to save the .csv file using the correct encoding. Dans le menu Fichier, choisissez Options d’enregistrement avancées, puis choisissez l’encodage Unicode (UTF-8 sans signature) - Page de codes 65001.On the File menu, choose Advanced Save Options and choose Unicode (UTF-8 without signature) - Codepage 65001 as the encoding.

  4. Le fichier .csv doit être copié dans le répertoire de sortie, sans quoi le test ne peut pas s’exécuter.The .csv file, must be copied to the output directory, or the test can't run. Utilisez la fenêtre Propriétés pour le copier.Use the Properties window to copy it.

    Déployer le fichier .CSVDeploy the .CSV file

    Maintenant que nous avons créé le jeu de données, nous allons lier les données au test.Now that we have the data set created, let's bind the data to the test.

Étape 3 : ajouter une liaison de source de donnéesStep 3 - Add data source binding

  1. Pour lier la source de données, ajoutez un attribut DataSource dans l'attribut [TestMethod] existant qui se trouve juste au-dessus de la méthode de test.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();
    
    }
    

    La source de données est maintenant disponible pour cette méthode de test.The data source is now available for you to use in this test method.

    Conseil

    Consultez les exemples d’attributs de source de données dans la section des questions et réponses sur l’utilisation d’autres types de source de données tels que XML, SQL Express et Excel.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. Exécutez le test.Run the test.

    Notez que le test s'exécute via trois itérations.Notice that the test runs through three iterations. En effet, la source de données qui a été liée contient trois lignes de données.This is because the data source that was bound contains three rows of data. En revanche, vous pouvez remarquer que le test utilise toujours les valeurs de paramètre constantes et additionne 1 + 2 avec une somme de 3 à chaque fois.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.

    Ensuite, nous allons configurer le test pour utiliser les valeurs incluses dans le fichier de la source de données.Next, we'll configure the test to use the values in the data source file.

Étape 4 : utiliser les données dans le test codé de l’interface utilisateurStep 4 - Use the data in the coded UI test

  1. Ajoutez using Microsoft.VisualStudio.TestTools.UITesting.WinControls en début du fichier CodedUITest.cs :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. Ajoutez TestContext.DataRow[] dans la méthode CodedUITestMethod1() qui va appliquer les valeurs de la source de données.Add TestContext.DataRow[] in the CodedUITestMethod1() method which will apply values from the data source. Les valeurs de la source de données se substituent aux constantes affectées aux contrôles UIMap en utilisant les contrôles SearchProperties :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();
    
    }
    

    Pour déterminer vers quelles propriétés de recherche coder les données, utilisez l'éditeur de test codé de l'interface utilisateur.To figure out which search properties to code the data to, use the Coded UI Test Editor.

    • Ouvrez le fichier UIMap.uitest.Open the UIMap.uitest file.

      Ouvrir l’éditeur de test codé de l’interface utilisateurOpen the Coded UI Test Editor

    • Choisissez l'action d'interface utilisateur et observez le mappage des contrôles d'interface utilisateur correspondant.Choose the UI action and observe the corresponding UI control mapping. Remarquez que le mappage correspond au code, par exemple, this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button.Notice how the mapping corresponds to the code, for example, this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button.

      Utiliser l’éditeur de test codé de l’interface utilisateur pour faciliter le codageUse the Coded UI Test Editor to assist with code

    • Dans la fenêtre Propriétés, ouvrez Propriétés de recherche.In the Properties Window, open Search Properties. La valeur Nom des propriétés de recherche est celle manipulée dans le code à l’aide de la source de données.The search properties Name value is what is being manipulated in the code using the data source. Par exemple, SearchProperties se voit attribué les valeurs de la première colonne de chaque ligne de données : 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();. Pour les trois itérations, ce test va remplacer la valeur Nom de la propriété de recherche par 3, puis 5 et enfin 6.For the three iterations, this test will change the Name value for the search property to 3, then 5, and finally 6.

      Utiliser les propriétés de recherche pour faciliter le codageUse the search properties to assist in coding

  3. Enregistrez la solution.Save the solution.

Étape 5 : exécuter le test piloté par les donnéesStep 5 - Run the data-driven test

  1. Vérifiez que le test est maintenant piloté par les données en l'exécutant de nouveau.Verify that the test is now data-driven by running the test again.

    Vous devez voir le test s'exécuter via trois itérations à l'aide des valeurs incluses dans le fichier .csv.You should see the test run through the three iterations using the values in the .csv file. La validation doit également fonctionner et le test doit s’afficher comme réussi dans l’Explorateur de tests.The validation should work as well and the test should display as passed in the Test Explorer.

    AideGuidance

    Pour plus d’informations, consultez Test de livraison continue avec Visual Studio 2012 - Chapitre 2 : Tests unitaires : tester l’intérieur et Test de livraison continue avec Visual Studio 2012 - Chapitre 5 : Automatisation des tests systèmeFor 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

Questions et réponsesQ & A

Quels sont les attributs de la source de données pour d’autres types de source de données, comme SQL Express ou XML ?What are the data source attributes for other data source types, such as SQL Express or XML?

Vous pouvez utiliser les exemples de chaînes de source de données indiqués dans le tableau ci-dessous en les copiant dans votre code et en effectuant les personnalisations nécessaires.You can use the sample data source strings in the table below by copying them to your code and making the necessary customizations.

Types de source de données et attributsData 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]

  • Cas de test dans Team Foundation ServerTest 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 : puis-je utiliser des tests pilotés par les données dans mon application Windows Phone ?Q: Can I use data-driven tests on my Windows Phone app?

R : Oui.A: Yes. Les tests codés de l’interface utilisateur pilotés par les données pour Windows Phone sont définis à l’aide de l’attribut DataRow sur une méthode de test.Data-driven Coded UI tests for Windows Phone are defined using the DataRow attribute on a test method. Dans l’exemple suivant, x et y utilisent les valeurs 1 et 2 pour la première itération et -1 et -2 pour la seconde itération du test.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)

Pour plus d’informations, consultez Utiliser les tests codés de l’interface utilisateur pilotés par les données sur des applications Windows Phone.For more information, see Use Data-driven coded UI tests on Windows Phone apps.

Q : pourquoi ne puis-je pas modifier le code du fichier UIMap.Designer ?Q: Why can't I modify the code in the UIMap.Designer file?

R : toutes les modifications du code que vous effectuez dans le fichier UIMapDesigner.cs sont remplacées chaque fois que vous générez du code dans UIMap - Générateur de test codé de l’interface utilisateur.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. Dans cet exemple et dans la plupart des cas, les modifications de code nécessaires pour permettre à un test d'utiliser une source de données peuvent être apportées au fichier de code source du test (c'est-à-dire, 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).

Si vous devez modifier une méthode enregistrée, vous devez la copier dans le fichier UIMap.cs et la renommer.If you have to modify a recorded method, you must copy it to UIMap.cs file and rename it. Le fichier UIMap.cs peut être utilisé pour remplacer les méthodes et les propriétés dans le fichier UIMapDesigner.cs.The UIMap.cs file can be used to override methods and properties in the UIMapDesigner.cs file. Vous devez supprimer la référence à la méthode d’origine dans le fichier Coded UITest.cs et la remplacer par le nom de la méthode renommée.You must remove the reference to the original method in the Coded UITest.cs file and replace it with the renamed method name.

Voir aussiSee also