0

J'ai recherché Google en lisant diverses questions (et réponses) ici sur Stack Overflow, et en scannant la page SlowCheetah NuGet, la liste des problèmes GitHub , et le blog de l'auteur de l'utilitaire, et je ne trouve toujours pas de réponse pour comprendre exactement ce qui cause mes problèmes.SlowCheetah Les transformations ne sont pas effectuées sur le projet Unit Test lors de l'intégration continue Construire sur TFS 2013

J'ai une solution hébergée dans un référentiel Git TFS 2013. Lorsqu'une branche particulière est transmise au serveur TFS, elle lance une génération et un déploiement automatisés sur un site de construction. Tout cela fonctionne très bien. Il lance également tous les tests unitaires et tout fonctionne sans problème.

C'est, jusqu'à ce que je les essais SpecFlow Watin ...

Les tests obtenir le coup d'envoi sans problème, et je le serveur mis en place pour exécuter les tests Watin de manière interactive dans le navigateur. Tout ça fonctionne Le problème est que le site testé par les tests WatiN se trouve sur le serveur de construction, qui est une URL différente de celle que j'utilise localement sur ma boîte de développement (et aussi sur le serveur de test, qui est une troisième URL). J'ai l'URL du site mis en place dans le App.Config du projet de test unitaire (qui est un projet basé sur MSTest). J'ai aussi des fichiers de transformation XDT configurés pour chacun de nos environnements cibles, y compris l'environnement de construction en question.

Lorsque je fais un push sur TFS, ou que je démarre manuellement une build, tout fonctionne correctement jusqu'à ce qu'il atteigne les tests SpecFlow. Ces tests particuliers démarrent, et si je suis connecté au serveur hébergé par la VM qui fait office de serveur de build lorsque la construction et les tests sont exécutés COMME l'utilisateur Build/Test, je peux réellement voir le navigateur démarrer. Je peux également voir, brièvement, le message "Cette page ne peut pas être affichée" dans Internet Explorer, ce qui n'est pas le comportement attendu (je devrais voir la page de connexion de l'application) et le test échoue.

En y regardant d'un peu plus près, j'ai commencé par l'évidence - est-ce que ça touche le bon site? Eh bien, en creusant dans le dossier de construction sur le serveur, j'ai pu vérifier que la transformation ne fonctionne pas - le fichier app.config a l'URL du site pour la machine de développement et pas celle de l'environnement de construction! Les transformations pour le projet Web fonctionnent: les modifications pour l'environnement de construction sont remplies pour l'application Web frontale et l'application tierce de niveau de service, et elles fonctionnent. Je peux afficher le site sur la construction. serveur dans un navigateur. Mais ces projets n'utilisent pas SlowCheetah, mais plutôt les transformations web.config intégrées. Le projet de test d'unité DOES a le paquet SlowCheetah NuGet installé; ça ne semble pas fonctionner pour une raison quelconque.

Voici le app.config fichier pour le projet de test unitaire en question:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" /> 
    </configSections> 

    <appSettings> 
    <add key="SiteUrl" value="http://dev.server.url/" /> 
    </appSettings> 

    <!-- Spec-Flow Configuration --> 
    <specFlow> 
    <unitTestProvider name="MsTest" /> 
    </specFlow> 

    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.0.5022.0" newVersion="2.0.5022.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Le fichier de configuration transformation app.Build.config se présente comme suit:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <appSettings> 
    <add key="SiteUrl" xdt:Locator="Match(key)" xdt:Transform="SetAttributes" value="http://build.server.url/" /> 
    </appSettings> 
</configuration> 

Ces les fichiers de configuration me semblent corrects, donc je ne pense pas qu'il y ait un problème avec le format des fichiers. Je peux également vérifier que les tests SpecFlow s'exécutent et passent lorsque je les lance manuellement sur ma boîte de développement local. Je suppose que la transformation n'est tout simplement pas lancée, ou peut-être qu'il y a quelque chose dans la chronologie du moment où les transformations sont exécutées et quand les tests unitaires sont exécutés.

Qu'est-ce que je fais mal ici? Toute aide est grandement appréciée!

Répondre

0

Dans votre définition de construction, vous avez probablement défini les configurations à utiliser. Une partie de cela définit également une plate-forme comme Any CPU ou x86. Comme il se trouve dans la solution la plate-forme Toute UC a un espace où dans les fichiers de projet la plate-forme AnyCPU n'a pas d'espace.

J'ai trouvé que le meilleur moyen de contourner ce problème était de laisser la plateforme vide et de ne mettre que le nom de la configuration. VS affichera un avertissement vous indiquant que des données sont manquantes, vous pouvez simplement appuyer sur Oui pour les sauvegarder de toute façon. Alternativement, vous pouvez simplement taper dans vos configurations comme les suivantes | Release, | Debug.

Le motif est [Nom de la plate-forme] | [NomConfiguration], [Nom de la plate-forme] | [NomConfiguration], ...

Questions connexes