Laden...

Azure Devops: Wie TRX File in XML konvertieren?

Erstellt von dr4g0n76 vor 5 Jahren Letzter Beitrag vor 4 Jahren 2.101 Views
dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 5 Jahren
Azure Devops: Wie TRX File in XML konvertieren?

Das WARUM
Wir brauchen eine Code Coverage und einen Test-Report, die vom TRX file abgeleitet werden sollen.
Damit wir später den Test-Report unterschreiben lassen können und alles seinen Gang laut Zertifizierung geht.

Dabei sind Probleme aufgetreten.

Ausgangssituation:
Ich habe mit diesem Befehl die Vorbereitung für eine Code-Coverage mit einem TestProjekt gemacht, um zu sehen, ob das so funktionieren würde:

dotnet test TestProject.csproj --logger "trx;LogFileName=TestResults.trx" --logger "xunit;LogFileName=testResults.xml" /p:CollectCoverage=true /p:CoverletOutput=BuildReports\Coverage\ /p:CoverletOutputFormat=cobertura /p:Exclude="[xunit.*]*

Mit diesem Parameter bekomme ich eben die Fehlermeldung, dass kein XUNIT gefunden wird, aufgrund des Bugs in Visual Studio.

Was jetzt allerdings passiert ist, dass XUnit nicht gefunden wird, aufgrund eines Bugs in Visual Studio.

Mit einem Test-Projekte das ich LOKAL laufen lassen konnte (nicht das produktive) funktioniert es.

Workaround

Mein Workaround soweit ist: ich lasse den Teil mit

--logger "xunit;LogFileName=testResults.xml"

der fehltschlägt weg.
Dann habe ich eben nur ein TRX file.

dotnet test TestProject.csproj --logger "trx;LogFileName=TestResults.trx" --logger "xunit;LogFileName=testResults.xml" /p:CollectCoverage=true /p:CoverletOutput=BuildReports\Coverage\ /p:CoverletOutputFormat=cobertura /p:Exclude="[xunit.*]*

Benötigte Lösung

Was ich jetzt allerdings brauche ist eben ein Mechanismus der mir per Console oder Task (muss in Azure Devops möglich sein) das TRX file in XML umwandelt.

Oder eben ein Mechanismus der in Azure Devops direkt ein Report vom XML file machen kann.

Weiss jemand wie das geht oder hatte schon dasselbe Problem?

Oder ist das Ganze noch viel einfacher und ich suche nach der falschen Stelle?

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

16.806 Beiträge seit 2008
vor 5 Jahren

Was tust Du da...? 🤔

Die dotnet cli in Azure DevOps erzeugt von Haus aus ein TRX File (auch mit XUnit, ausser Du hast eine uralte CLI Version).
Die Code Coverage und die Testergebnisse werden automatisch gepublished und hängen anschließend dem Build an inkl. Reporting.

Das Kommentar mit Visual Studio habe einen Bug ist mir nicht klar.
Du buildest hier offensichtlich .NET Core und dazu braucht man keinen VS Task in Azure DevOps.
VS brauchst Du nur für .NET Framework oder Mixed Solutions. Dann darfst Du aber nirgends dotnet cli Commands verwenden.

Hier paar YAML Templates von mir, die in quasi allen meinen/unseren Projekten Verwendung finden (inkl XUnit, Code Coverage und TEst Reporting - aber keine SonarQube Coverage).
https://github.com/BenjaminAbt/AzureDevOps-YamlBuildSamples

Oder geht es Dir um einen zusätzlichen Export? Das geht aus Deinem Beitrag leider null raus.
Wenn ja: die Testergebnisse lassen sich via REST API laden (https://docs.microsoft.com/en-us/rest/api/vsts/test/results?view=azure-devops-rest-5.0)
Das ist auch der empfohlene Weg von Azure DevOps für Exports.

Damit wir später den Test-Report unterschreiben lassen können und alles seinen Gang laut Zertifizierung geht.

Interessehalber: Was soll das denn für eine Zertifizierung, die eine manuelle Unterschrift erfordert und für die nicht Azure DevOps Gates des Release Managements verwendet werden kann?

Gates sind genau für sowas wie Freigaben gedacht.

....
Seek approvals outside Azure Pipelines. Notify non-Azure Pipelines users such as legal approval departments, auditors, or IT managers about a deployment by integrating with approval collaboration systems such as Microsoft Teams or Slack, and waiting for the approval to complete.
....

Und das funktioniert problemlos mit Signaturdiensten für die digitale Freigabe via Signaturen.
Eine externe Unterschrift ist ja im Prozess nicht sicher abbildbar; und nicht-sichere Prozessschritte dürfte prinzipiell einer Pipeline Zertifizierung widersprüchlich sein.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 5 Jahren

Die dotnet cli in Azure DevOps erzeugt von Haus aus ein TRX File (auch mit XUnit, ausser Du hast eine uralte CLI Version).
Die Code Coverage und die Testergebnisse werden automatisch gepublished und hängen anschließend dem Build an inkl. Reporting.

Das stimmt und das Kommando, dass ich integriert habe soll eine Basis für eine Code-Coverage Report erstellen. Anscheinend geht das nur mit dieser Command-Line,
zumindest habe ich noch nicht so viel Erfahrung, dass ich wüsste wie ich es besser mache, solange ich Tasks verwende und nicht die YAML Scripts direkt.

Das Kommentar mit Visual Studio habe einen Bug ist mir nicht klar.
Du buildest hier offensichtlich .NET Core und dazu braucht man keinen VS Task in Azure DevOps.
VS brauchst Du nur für .NET Framework oder Mixed Solutions. Dann darfst Du aber nirgends dotnet cli Commands verwenden.

Die Leute, die bei uns in der Entwicklung arbeiten haben eine Mixed Solution kreiert.
Enthält also .NET Framework und .NET Core Projekte.
NuGet Referenzen werden jetzt nicht richtig aufgelöst, trotzdem buildet das Projekt auch bei mir und jemand anderem.

Nur, im Visual Studio ist auch ganz klar zu sehen, dass etwas nicht stimmt:
Die NuGet Pakete haben gelbe Warndreiecke.
Die Aussage mit dem Bug bezieht sich darauf, dass u.a. keine Fehlermeldung erscheint, warum die Referenzen denn nicht gefunden werden.

Plus, dass jeder einzelne unterschiedliche Restore Versuch (zumindest die, die wir kennen und versucht haben) fehlgeschlagen ist.
Ergebnis: auch nach dem Schliessen von Visual Studio und der Solution und Restart:
Problem besteht weiterhin.

Hier paar YAML Templates von mir, die in quasi allen meinen/unseren Projekten Verwendung finden (inkl XUnit, Code Coverage und TEst Reporting - aber keine SonarQube Coverage).

>

Danke, Dir. 😃 Das ist garantiert sehr hilfreich und hilft mir bestimmt ebenfalls zu sehen, wo ich etwas zu umständlich gemacht habe oder noch ganz einfach verbessern kann.
Bin hier noch viel am (Dazu-~)Lernen.

Oder geht es Dir um einen zusätzlichen Export? Das geht aus Deinem Beitrag leider null raus.
Wenn ja: die Testergebnisse lassen sich via REST API laden (
>
)
Das ist auch der empfohlene Weg von Azure DevOps für Exports.

Man hatte sich vorgestellt, dass wir eben diesen Output von diesem Tool verwenden können (Extension in Azure Devops):

https://marketplace.visualstudio.com/items?itemName=Palmmedia.reportgenerator
(s. auch angehängtes Bild)

Dafür hatte ich die Kommandozeile gemacht.
Und soweit ich gestern Abend noch herausgefunden habe, weil die NuGet Packages Fehler haben und die Referenzen nicht richtig aufgelöst werden,
buildet das Projekt zwar noch in Visual Studio,
nicht aber wenn ich die Kommando-Zeile verwende, die ich gepostet habe.

Nur noch mal zur Erklärung, nicht weil ich auf dem Pfad bleiben möchte:

und deshalb findet er eben Xunit nicht. Lasse ich die Zeile mit dem XML weg, funktioniert alles in der Kommandozeile.

Versteh mich nicht falsch, wenn es anders einfacher funktioniert,
bin ich jederzeit bereit davon abzurücken, wie ich es bisher versucht habe.
Mir geht es nur um eine Lösung, nicht um Biegen und Brechen meinen Weg zu versuchen,

deshalb nochmal danke für Deinen Input.

Interessehalber: Was soll das denn für eine Zertifizierung, die eine manuelle Unterschrift erfordert und für die nicht Azure DevOps Gates des Release Managements verwendet werden kann?

[QUOTE
Damit wir später den Test-Report unterschreiben lassen können und alles seinen Gang laut Zertifizierung geht.

Finde ich selbst auch etwas gewöhnungsbedürftig, soweit ich das bisher verstehe ist das so. Medical Bereich.

Gates sind genau für sowas wie Freigaben gedacht.

Zitat von https://docs.microsoft.com/en-us/azure/devops/pipelines/release/approvals/gates?view=azure-devops:
....
Seek approvals outside Azure Pipelines. Notify non-Azure Pipelines users such as legal approval departments, auditors, or IT managers about a deployment by integrating with approval collaboration systems such as Microsoft Teams or Slack, and waiting for the approval to complete.
....

Und das funktioniert problemlos mit Signaturdiensten für die digitale Freigabe via Signaturen.
Eine externe Unterschrift ist ja im Prozess nicht sicher abbildbar; und nicht-sichere Prozessschritte dürfte prinzipiell einer Pipeline Zertifizierung widersprüchlich sein.

Nicht die Pipeline wird zertifiziert. 😃
Sondern die Prozesse hier müssen einen gewissen Ablauf haben.

Ich hoffe, dass macht es etwas klarer.

Ich denke sobald die XUnit-Referenzen gefunden werden,
funktioniert auch alles wie gedacht und ich kann die wichtigen Stellen von Deiner Pipeline übernehmen.

Das hat sehr geholfen.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

16.806 Beiträge seit 2008
vor 5 Jahren

--logger "xunit;LogFileName=testResults.xml"

Probier mal LogFilePath statt LogFileName.
LogFileName dürfte VSTest sein.

Darüber hinaus sind TRX Dateien XML Dateien.

solange ich Tasks verwende und nicht die YAML Scripts direkt.

YAML is first citizen, aber Tasks machen im Hintergrund das identische.

Die Leute, die bei uns in der Entwicklung arbeiten haben eine Mixed Solution kreiert.
Enthält also .NET Framework und .NET Core Projekte.

NuGet Referenzen werden jetzt nicht richtig aufgelöst, trotzdem buildet das Projekt auch bei mir und jemand anderem.

In diesem Fall muss sowohl der Restore wie auch der Build gegen die Solution laufen und nicht gegen einzelne Projekte, was Dein Code zeigt.

YAML NuGet Task: restoreSolution: '**/*.sln'
Und auch der Build muss dann via VS erfolgen, nicht via dotnet cli.

Bin in den letzten Changes nicht 100% drin, aber glaube nicht, dass es derzeit anders sauber funktioniert.

Sondern die Prozesse hier müssen einen gewissen Ablauf haben.

Das dachte ich mir. zB ISO 9001 beschreibt, dass die "definierten Prozesse eingehalten werden müssen", damit die Qualitätssicherung eingehalten wird.
Manche verstehen darunter (und das sind die meisten), dass die Prozesse, die man sich selbst 1596 auferlegt haben, eingehalten werden müssen - das ist falsch.
Im Jahr 2019 darf man gerne die Prozesse aus 1596 selbst digitalisieren, damit diese zB. Papierlos eingehalten werden.
Damit wird ISO 9001 immer noch erfüllt.

Ich weiß nicht genau welcher Zertifizierung ihr unterliegt oder ihr haben wollt (evlt. FDA, weil Medical?) aber der Medical Bereich ist eigentlich nach der Landwirtschaft (kein Scherz!) mit der meist durchdigitalisierte Bereich den es gibt.
Würde mich wundern, dass es hier eine Zertifizierung gibt, die wirklich eine Unterschrift auf Papier vorschreibt und der die gesamte Chain nicht digital sein darf.

Dann könntest Du Dir den ganzen manuellen Käse sparen und eben Gates verwenden.
Solltest ihr aber bei dem PDF (oder HTML Export) Thema bleiben wollen, dann würde ich an Deiner Stelle SonarQube verwenden (verwenden wir auch).
Auch nDepend hat einen super Report (Beispiel von NodaTime: https://www.ndepend.com/Sample-Reports/OnNodaTime/NDependReport.html#Main).

6.911 Beiträge seit 2009
vor 4 Jahren

Hallo dr4g0n76,

das TRX file in XML umwandelt.

Wie Abt schon schreibt, ist trx auch xml 😉
https://www.nuget.org/packages/trx2junit/ ist vllt. ein passendes dotnet-Tool dazu.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

16.806 Beiträge seit 2008
vor 4 Jahren

Übrigens, so machen wir das: .NET CORE Code Coverage done right

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 4 Jahren

@gfoidl:

Wie Abt schon schreibt, ist trx auch xml 😉

stimmt absolut, hätte mich damals genauer ausdrücken sollen, ich hätte ein anderes XML-Format gebraucht, mit der Kommandozeile, die ich aufgerufen hatte. Das hat sich jetzt aber vorerst gelöst.

Danke nochmals für alle diese Antworten. Und ich werde auf jeden Fall darauf zurückkommen.

@Abt:


>

Das Löst direkt einer meiner nächsten Aufgaben teilweise mit. Danke dafür.

P.S.: Wenn sich das Thema demnächst lösen sollte, dann werde ich dem Titel ein [gelöst] mitbeifügen. 😃

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.