4
votes

Comment passer des paramètres à la commande dotnet test tout en utilisant NUnit ou XUnit

Je développe des tests de bout en bout en utilisant C # avec .NET Core, Selenium et NUnit. Maintenant, je veux écrire un test de connexion. Mes tests sont lancés depuis la console simplement en utilisant la commande dotnet test .

Je veux simplement transmettre le nom d'utilisateur et le mot de passe à cette commande et les obtenir dans mes tests. Je ne peux pas utiliser NUnit-Console car il ne prend pas en charge .NET Core pour le moment .

Quelle est la méthode suggérée pour résoudre ce problème? Je préférerais ne pas stocker les paramètres dans un fichier mais les saisir directement dans la console.


0 commentaires

3 Réponses :


6
votes

Malheureusement, la seule façon de passer les paramètres de dotnet test dans NUnit est d'utiliser un fichier .runsettings . Il n'y a aucun moyen pour NUnit de créer des arguments de ligne de commande personnalisés pour l'outil dotnet test - bien que nous aimerions qu'il y en ait!

Jetez un œil à l'exemple .runsettings code > fichier ici . Le bit spécifique dont vous aurez besoin:

dotnet test myProj.csproj -s mySettings.runsettings

Vous devriez simplement pouvoir passer ce fichier dans dotnet test avec le -s drapeau.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Parameters used by tests at runtime -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>
</RunSettings>


2 commentaires

Merci beaucoup, je vais continuer comme ça pour le moment. Toutes les autres pages que j'ai lues ont également mentionné que ce n'est actuellement pas possible. Cependant, cela peut être possible dans xUnit, peut-être vaut-il la peine d'y jeter un coup d'œil.


docs.microsoft.com/en-us/visualstudio/test/...



11
votes

Si vous souhaitez éviter un fichier de paramètres d'exécution, vous pouvez utiliser cette solution de contournement. L'une des méthodes recommandées pour passer des paramètres consiste à utiliser des variables d'environnement. Donc, dans votre fichier C # nunit (ou xunit), vous pouvez faire quelque chose comme:

#In Azure DevOps, variables not marked as secret are already added to the environment
SET TestPassword=$(TestPassword)
dotnet test $(Build.SourcesDirectory)\MyCompany.MyProduct.UITests\MyTest.csproj --configuration $(BuildConfiguration) --collect "Code Coverage" --logger trx --results-directory $(Agent.TempDirectory)

Si vous ne voulez pas définir définitivement vos variables d'environnement, rappelez-vous que vous pouvez toujours les définir temporairement uniquement pour votre processus de session. Une façon de faire est de créer un simple fichier cmd

#run wity launchtests.cmd pete001 secret 'http://testserver.local/login'
SETLOCAL
SET TestUser=%1
SET TestPassword=%2
SET TestUrl=%3
DOTNET TEST mytest.csproj

Et maintenant la partie amusante. Vous pouvez paramétrer chaque aspect de ceci. Vous pouvez donc le changer en:

#launchtests.cmd
SETLOCAL
SET TestUser='pete001'
SET TestPassword='secret'
SET TestUrl='http://testserver.local/login'
DOTNET TEST mytest.csproj

Ou si vous souhaitez lancer le test à partir d'un pipeline Azure DevOps (fka VSTS ou TFS), vous pouvez simplement utiliser le $ (. ..) aux variables en ligne, même si elles sont marquées comme secrètes et / ou proviennent d'Azure KeyVault.

// in mytest.cs
var user = Environment.GetEnvironmentVariable("TestUser");
var password = Environment.GetEnvironmentVariable("TestPassword");
var url = Environment.GetEnvironmentVariable("TestUrl");

 exécuter la tâche de commande Azure DevOps a >


0 commentaires

0
votes

Cette documentation suggère qu'il devrait maintenant être possible de passer des arguments sur la ligne de commande, plutôt que dans un fichier runsettings.

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

dotnet test -- MSTest.MapInconclusiveToFailed=True MSTest.DeploymentEnabled=False

Notez l'espace après - .

Modifier 1

Ce qui a fonctionné pour moi était une combinaison d'ajout d'un fichier runsettings, puis de remplacement du paramètre que je voulais, en utilisant cette syntaxe:

dotnet test - TestRunParameters.Parameter (name = \ "myParam \", value = \ "valeur \")


0 commentaires