2017-02-08 3 views
1

Um unsere Desktop-Anwendung zu testen, verwenden wir TestComplete/TestExecute. Wir haben ein Master-Projekt, das auf einem Management-Rechner gestartet wird. Dieses Masterprojekt erfordert keine Interaktion mit dem Desktop, es testet unsere App nicht.Starten Sie TestExecute von TeamCity

Dieses Projekt startet das Slave-Remote-Projekt (tatsächliche UI-Tests unserer App, die Desktop-Interaktion erfordern) auf verschiedenen VMs über TestExecute direkt.

Wir verschieben derzeit unseren Build-Prozess zu TeamCity. Auf dieser Verwaltungsmaschine haben wir einen Build Agent von TeamCity. Der Build-Agent wird als Dienst mit einem Systemkonto ausgeführt (nicht mit dem lokalen Systemkonto).

Wir verwenden nicht das lokale Systemkonto (das mit dem Desktop interagieren kann), da wir für den Zugriff auf Domänenressourcen ein Domänenkonto benötigen. Und wir wollen den Agenten nicht als Prozess starten, wir wollen ihn im Dienst halten.

Momentan können wir TestExecute nicht direkt von TeamCity aus starten, da TestExecute eine interaktive Sitzung erfordert und das Konto des Build Agent nicht mit dem Desktop interagieren kann. Wir haben mit einem Skript (ausgeführt von TeamCity) versucht, eine PSSession mit einem normalen Benutzer zu erstellen, die Zugriff auf den Desktop hat und TestExecute von dieser PSSession aus startet. Aber das funktioniert auch nicht.

Hier ist die Ausnahme, die wir mit beiden Fällen (direkt und über PSSession) hatte:

Start-Process : This command cannot be run due to the error: This operation requires an interactive window station. 
At line:3 char:9 
+   Start-Process "D:\SmartBear\TestExecute 12\Bin\TestExecute.ex ... 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [Start-Process], InvalidOperationException 
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand 

Hat jemand eine Lösung haben Tests mit TestExecute von Teamcity zu starten? Wie gesagt, dieses Projekt muss nicht mit dem Desktop interagieren, es wird den UI-Test auf verschiedenen VMs direkt über TestExecute starten.

Oder ist es möglich, dass ein Domänensystemkonto (wie das, das wir verwenden) mit dem Desktop interagiert?

Antwort

0

Im Inneren des Installationsverzeichnis von TestExecute, können Sie die Manifest-Datei TCLauncher.exe.Manifest finden:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges> 
     <!-- Here is the relevant part --> 
     <requestedExecutionLevel level="asInvoker" uiAccess="true"> 
     </requestedExecutionLevel> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

Sie die uiAccess auf false konfigurieren können. Wenn Sie nicht den TCLauncher, sondern direkt TestExecute.exe verwenden, gibt es auch eine Manifest-Datei mit demselben Abschnitt <Security>, den Sie konfigurieren können.

Sie können auch die Ebene angeben, von asInvoker bis highestAvailable, aber Sie werden möglicherweise von der UAC aufgefordert.

+1

Vielen Dank für Ihre Antwort !! Das behebt mein Problem !! Das war das Problem, ich habe diese uiAccess im Manifest nicht deaktiviert ... –

0

Am einfachsten können Sie das Master-Projekt von Team City ausführen, und das Master-Projekt ruft UI-Tests auf Slave-Maschinen auf. Da das Hauptprojekt keinen Zugriff auf Benutzeroberflächenelemente erfordert, werden keine Probleme auftreten, wenn es innerhalb einer Nicht-Benutzeroberflächensitzung ausgeführt wird.