3
votes

Comment transmettre les paramètres d'exécution au test dotnet sur la ligne de commande?

J'ai un ensemble de tests unitaires dans un projet .NET Core et j'utilise un fichier runsettings. J'essaie de configurer Azure DevOps pour effectuer des tests automatisés sur mes déploiements. Dans le cadre de ce processus, je dois remplacer les paramètres des paramètres d'exécution sur la ligne de commande.

J'ai un fichier de paramètres d'exécution avec la section suivante:

    dotnet test <myproject.csproj> --configuration Release -- ApiUrl=https://newurl

J'ai un constructeur statique qui enregistre le TestContext comme ceci:

        protected string GetStringSetting(string settingName)
        {
            return TestContext.Properties[settingName] as string;
        }

Je récupère les paramètres du TestContext avec la méthode suivante:

        [ClassInitialize]
        public static void TestClassInitialize(TestContext context)
        {
            TestContext = context;
        }

Lorsque j'exécute le test avec le fichier runsettings sélectionné, il obtient le TestContext et je vois que l'entrée ApiUrl est récupérée avec succès.

Maintenant, je veux définir ce paramètre à partir de la ligne de commande. J'utilise une commande comme:

  <TestRunParameters>
    <Parameter name="ApiUrl" value="https://myurl..." />
  </TestRunParameters>

J'obtiens une erreur indiquant que le dictionnaire ne contient pas la clé "ApiUrl" qui indique que le paramètre n'a pas été traité. En lisant la documentation, j'ai pensé que je devais peut-être spécifier complètement le nom du paramètre avec TestRunParameters.ApiUrl. Cela me donne une erreur XML.

D'après tout ce que j'ai lu, je pense que je fais cela correctement et je ne peux pas comprendre ce qui ne va pas. J'utilise la version 2.1.503 des outils.

Quelqu'un peut-il me donner des conseils sur la façon de faire fonctionner cela?


1 commentaires

Les tests s'exécutent correctement en lisant les valeurs du fichier runsettings. Le problème que j'ai est de remplacer ces paramètres du framework Azure DevOps. Je peux utiliser soit l'étape «test dotnet», soit l'étape «Test Visual Studio». Je n'ai pas réussi à faire fonctionner l'un ou l'autre avec la substitution de paramètres.


3 Réponses :


1
votes

Ceci est actuellement impossible à réaliser. Vérifiez ces problèmes résolus sur github:

Votre seule option ici est de créer un autre fichier de paramètres d'exécution avec de nouvelles valeurs et de le transmettre à dotnet test avec l'indicateur --settings .


0 commentaires

1
votes

Vous ne pouvez pas remplacer le TestRunParameters depuis la ligne de commande lorsque vous utilisez la tâche DotNetCoreCLI @ 2 ou la commande dotnet test , mais vous pouvez créer un fichier .runsettings temporaire contenant la valeur de paramètre valide dans le cadre de votre pipeline de construction dans Azure Pipelines:

- powershell: |
   [xml]$doc = Get-Content Tests/Settings.runsettings
   $doc.RunSettings.TestRunParameters.ChildNodes.Item(0).value = 'https://newurl'
   $doc.Save("$(Build.SourcesDirectory)/Tests/UpdatedSettings.runsettings")
  displayName: 'Override TestRunParameters'

- task: DotNetCoreCLI@2
  displayName: 'Run Tests'
  inputs:
   command: test
   projects: 'Tests/Tests.csproj'
   arguments: '-s $(Build.SourcesDirectory)/Tests/UpdatedSettings.runsettings'

- powershell: |
   Remove-Item $(Build.SourcesDirectory)/Tests/UpdatedSettings.runsettings
  displayName: Remove temporary .runsettings file

Vous trouverez un fichier YAML complet et un exemple de projet de test sur GitHub .


0 commentaires

0
votes

Pour ce faire, vous pouvez utiliser la syntaxe d'argument suivante:

dotnet test <myproject.csproj> --configuration Release -- TestRunParameters.Parameter(name=\"ApiUrl\", value=\"https://newurl\")

Source: https://github.com/Microsoft/vstest-docs/blob/master/docs/RunSettingsArguments.md


0 commentaires