Puis-je utiliser mstest.exe sans installer Visual Studio?


108

Je souhaite utiliser mstest.exe pour exécuter mon test unitaire sur le serveur de build, mais je ne souhaite pas installer Visual Studio sur le serveur de build. Puis-je simplement installer MSTest sans Visual Studio?


Pouvez-vous fournir un peu plus de détails. Quelle version? Créer un serveur? etc
Richard Banks

Réponses:


168

Il est possible d'exécuter mstest.exe sans Visual Studio.
Téléchargez l'un des agents pour les ISO Visual Studio ci-dessous et installez l' agent de test sur le serveur:

Visual Studio 2017 (127 Mo d'espace disque, moins que celui du téléchargement)
Visual Studio 2015 (128 Mo d'installation, 2 Go d'espace disque requis)
Visual Studio 2012 (224 Mo)
Visual Studio 2013 (287 Mo)
Visual Studio 2010 (515 Mo)

Cela installe tout le nécessaire pour exécuter mstest.exe à partir de la ligne de commande et est beaucoup plus léger que Visual Studio. ~ 500 Mo de téléchargement et environ ~ 300 Mo pour installer uniquement l'agent de test si je me souviens bien.

METTRE À JOUR

Pour les versions antérieures à VS 2017, regardez ici:

https://www.visualstudio.com/vs/older-downloads/


Où MsTest.exe est-il placé après l'installation de TestAgent et TestController?
Evgeny Levin

3
C: \ Program Files \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ MSTest.exe
Foole

1
Existe-t-il un agent pour Visual Studio 2008?
Tomas Kubes

3
Mon groupe a rencontré un problème après l'installation des agents de test Visual Studio 2012. Nous pensons que cela a modifié certaines des valeurs de registre et a par conséquent créé un désordre avec les éléments de Visual Studio 2010 qui se trouvaient sur la même machine. Il faut se méfier.
stephen

1
Le lien pour 2015 est mort. Les agents de test peuvent maintenant être trouvés via visualstudio.com/downloads/?q=agents
Onots

18

Cette réponse concerne spécifiquement Visual Studio 2017 et la réponse est oui . Sachez cependant que Microsoft ne fournit (toujours) aucune sorte d'API officielle pour localiser les exécutables pertinents ( MSBuild.exeet MSTest.exe), vous êtes donc bloqué en lisant les clés de registre et / ou en sondant divers répertoires pour localiser ces fichiers . Tu as été prévenu.

  • Si vous avez uniquement besoin de créer vos projets de test unitaire, installez le package MSTest.TestFrameworkdans ces projets et supprimez la référence à Microsoft.VisualStudio.QualityTools.UnitTestFramework. Il vous suffit maintenant d'installer les outilsmsbuild.exe de génération de Visual Studio 2017 et de les appeler pour effectuer la génération.
  • Si vous devez également exécuter vos tests, les choses deviennent plus délicates:
    • La solution la plus simple consiste à installer VS2017 Community Edition (qui comprend à la fois msbuild et mstest) - mais je ne suis pas sûr de la légalité de cela, et je ne suis pas avocat, alors soyez prudent!
    • Une solution juridiquement plus sûre (et beaucoup plus légère, en termes d'espace disque) consiste à installer l' agent de test Visual Studio 2017 , puis à créer des outils pour Visual Studio 2017 (l' ordre exact est vital 1 ); cela vous donnera MSTest.exeet vstest.console.exeque vous pourrez ensuite appeler. Notez que déterminer où ces exécutables résident est un problème, car ils n'existeront pas dans la même structure de répertoire que MSBuild.exedans Build Tools.

Enfin, et c'est très important: si vous utilisez MSTest.TestFrameworket devez toujours être en mesure de découvrir et d'exécuter des tests à partir de l'IDE de Visual Studio, vous devrez également être MSTest.TestAdapterinstallé dans vos projets de test unitaire.

1: Bien que VS2017 prenne en charge les installations côte à côte, il utilise une clé de registre unique qui n'enregistre que l'installation la plus récente. Par conséquent, si vous installez l'agent de test en dernier, la clé pointera vers son répertoire d'installation ... mais l'agent de test ne l'inclut pas MSBuild.exe, donc tout code qui s'appuie sur cette clé de registre pour déterminer le chemin de cet exécutable échouera. Pourquoi Microsoft n'aurait-il pas pu faire de l'agent de test une partie facultative des outils de construction (de sorte que tous les EXE vivent dans la même hiérarchie de répertoires) est une hypothèse.


Installé via la méthode Test Agent mais mstest.exe échoue toujours avec File extension specified '.webtest' is not a valid test extension.pour moi.
Gregory Suvalian

Il y a maintenant vswhere - voir d'autres questions, par exemple " Recherche par programme du répertoire d'installation de VS2017 " ou " MSBuild.exe introuvable, cmd.exe " qui l'utilisent.
Wai Ha Lee

@WaiHaLee vswherevaut mieux que rien, mais vous devez toujours faire une hypothèse sur l'emplacement de MSBuild par rapport au répertoire d'installation de VS ... si (quand?) Microsoft décide de déplacer l'un de ces exécutables, cette hypothèse n'est plus valide . Pourquoi Microsoft ne peut pas ou ne veut pas créer un moyen par programme pour obtenir le chemin vers MSBuild / MSTest / VSTest (par opposition au répertoire d'installation VS, dont personne ne se soucie vraiment) me dépasse.
Ian Kemp

Ouais, le jeu est-il / n'est-ce pas là est ennuyeux. Je suis sûr qu'ils ont leurs raisons, mais ....
Wai Ha Lee

@Ian Kemp Par ci-dessus, j'ai installé un agent de test et des outils de création mais je reçois une erreur No test is available in C:\Users\..\Desktop\MyExeName.exe... . J'ai ouvert une question sur SO . Si vous avez la moindre idée, j'apprécierais votre aide.
user1207289 le

4

Je pense que vous pouvez probablement, mais ce n'est certainement pas pris en charge.

J'ai trouvé cet article de blog écrit par quelqu'un qui prétend que MSTest fonctionne sans Visual Studio installé.


Toute URL avec le mot Hacking nécessite vraiment de remettre en question la valeur de l'effort si MS décide de modifier son implémentation, votre environnement pourrait être volatile et des choses inattendues pourraient se produire avec chaque mise à jour de Windows (nous gardons des mises à jour régulières, non?).
Russell

Dans ce cas, il semble peu probable qu'une mise à jour de Windows brise le hack. Mais une version plus récente de mstest (par exemple, dans une version plus récente ou un service pack de VS) peut fonctionner différemment.
Doc Brown

@Russell - Personnellement, je débourserais pour une licence VS supplémentaire ou utiliserais simplement NUnit à la place.
Justin

Merci pour toutes les réponses, je vais juste obtenir une licence VS supplémentaire.
yang-qu

1
En tant qu'auteur du billet de blog ci-dessus, je peux attester que cela fonctionne et qu'il est très peu probable qu'il se brise. Au moins pour VS2008. Je n'ai pas regardé cela pour VS2010. MSTest étant si profondément intégré dans VS est une énorme faiblesse du kit de test, mais je ne pense pas que MS le corrigera, car il encourage les gens à utiliser Team System.
foxxtrot

4

@crocpulsar, vous devez installer Visual Studio sur votre serveur de build, mais vous n'avez PAS besoin d'acheter une licence supplémentaire .

Il y a juste trop de dépendances pour faire fonctionner build & MSTest sans VS installé, et il n'est certainement pas pris en charge.

Tant que la personne qui démarre la build dispose d'une licence, vous n'en avez pas besoin pour le serveur de build. C'est le cas depuis les jours sombres de 2005, et tant qu'il y a parité d'édition, tout va bien.

Si tout le monde dans votre équipe possède Ultimate, vous êtes libre de l'installer sur le serveur de build; mais si l'un des membres de votre équipe a Premium, vous devriez idéalement installer Premium sur le serveur de build. Cela active également de nombreux autres bits tels que la couverture du code, l'analyse d'impact des tests et la validation d'architecture, entre autres.


Pour référence, voici un article de Microsoft sur ce blogs.msdn.com/b/jeffbe/archive/2008/03/18/…
Maslow

2

Je viens de faire fonctionner cela sur mes serveurs sans installer l'IDE de Visual Studio 2017. Mon exigence était

  • Construire des projets
  • Construire des projets de test
  • Exécutez des tests en utilisant VSTest (je pense que c'est un processus similaire pour MSTest)

J'ai dû faire une combinaison de quelques choses énoncées dans d'autres réponses, puis une autre ici .

VS2017:

  1. BuildTools - Cela peut être trouvé sur la page de téléchargement de Microsoft , puis faites défiler vers le bas jusqu'à «Outils pour Visual Studio 2017» -> «Outils de création pour Visual Studio 2017»
  2. TestAgent - Cela peut être trouvé sur la page de téléchargement de Microsoft , puis faites défiler vers le bas jusqu'à «Outils pour Visual Studio 2017» -> «Agents pour Visual Studio 2017»
  3. Package Nuget pour inclure la dll de test unitaire de Visual Studio - Ceci peut être trouvé ici

L'étape 3 consistait à résoudre le problème suivant:

"Impossible de résoudre cette référence. Impossible de localiser l'assembly" Microsoft.VisualStudio.QualityTools.UnitTestFramework ""

Ce qui a alors causé:

"erreur CS0234: le type ou le nom d'espace de noms" VisualStudio "n'existe pas dans l'espace de noms" Microsoft "(vous manquez une référence d'assembly?)"

Je n'ai pas eu à ajouter de références au projet. Cependant, le chemin d'accès à vstest.console.exe est contenu dans le dossier TestAgent (pour moi, c'était "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ TestAgent \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow" )


1

Voici les étapes que j'ai suivies pour que mon serveur de build exécute MsTest sans installer VS 2012:

  1. Création du dossier de répertoire 'Mstest' dans c: \ dev.
  2. 'Mstest.exe' et 'Mstest.exe.config' copiés à partir de C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE dans le répertoire 'Mstest'
  3. Copiez Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll dans le répertoire «Mstest»
  4. Création du répertoire 'assemblies' dans le dossier 'Mstest'
  5. Extraction de toutes les dll v11 Microsoft.VisualStudio.QualityTools. *. De C: \ Windows \ assembly vers le répertoire 'Mstest / assemblies'
  6. Copiez tous les Microsoft.VisualStudio.QualityTools 'v11'. .dlls et Microsoft.VisualStudio.TestTools. .dlls de C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL vers 'Mstest / assemblies'
  7. Copiez tous les Microsoft.VisualStudio.QualityTools v11. .dlls et Microsoft.VisualStudio.TestTools. .dll de C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ PrivateAssemblies vers 'Mstest / assemblies'
  8. Ajoutez des "assemblys" à l'attribut "privatePath" de "Mstest.exe.config"
  9. Exportez 'HKEY_LOCAL_MACHINE / SOFTWARE / Wow6432Node / Microsoft / VisualStudio / 11.0 / Enterprise / QualityTools et appliquez-le à hudson box.
  10. Copiez QTAgent32.exe et QTAgent32.exe.config dans le répertoire 'MsTest' à partir de C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE
  11. Ajoutez 'assemblies' à l'attribut 'privatePath' de dans 'QTAgent32.exe.config'
  12. Copiez «msdia110.dll» de «C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ Packages \ Debugger» vers «MsTest / assemblies»
  13. Enregistrez 'msdia110.dll' avec c: /windows/syswow64/regsvr32.exe / i '../mstest/assemblies/msdia110.dll'(Cela a généré une erreur, mais pour une raison quelconque, cela fonctionnait toujours. Je l'ai exécuté quelques fois et essayé différentes versions de regsvr32.exe avant de vérifier, mais il est là dans le registre)

  14. Ajoutez la variable d'environnement 'MSTEST_HOME' et définissez-la sur 'c: \ dev \ mstest \' ou sur votre chemin. J'ai utilisé la variable d'environnement dans mon script de construction.

Erreur d'exécution de débogage MsTest:

Ajouter à «MsTest.exe.config»

<system.diagnostics> 
  <trace autoflush="true" indentsize="4"> 
    <listeners> 
      <add name="EqtListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\MsTest.log" /> 
    </listeners> 
  </trace> 
  <switches> 
    <add name="EqtTraceLevel" value="Verbose" /> 
  </switches> 
</system.diagnostics>

0

Si vous avez besoin d'exécuter l'outil de test Web mstest.exe, vous pouvez installer la version d'évaluation de Visual Studio Enterprise et vous assurer de l'exécuter au moins une fois (il suffit de le démarrer) sous le compte sous lequel le test sera en cours d'exécution sans que rien supplémentaire ne soit nécessaire. Donc, si votre test est exécuté sous le compte système, vous devez utiliser quelque chose comme ci-dessous

PS C:\agent> psexec -s cmd.exe
C:\Windows\system32>"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\mstest.exe"
Microsoft (R) Test Execution Command Line Tool Version 15.0.27520.0
Copyright (c) Microsoft Corporation. All rights reserved.

Please specify tests to run, or specify the /publish switch to publish results.
For switch syntax, type "MSTest /help"

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.