Coyote
Coyote ist eine plattformübergreifende Bibliothek und ein Tool zum Testen des gleichzeitigen C# -Codes und zum deterministischen Reproduzieren von Fehler.
Mit Coyote können Sie die Parallelität und andere Nichtdeterminismus in Ihrem C# -Code problemlos testen, indem Sie einen Test -Test -Test -Test schreiben. Diese sehen aus wie Ihre regulären Unit -Tests, können jedoch zuverlässig gleichzeitige Workloads testen (wie Akteure, Aufgaben oder gleichzeitige Anforderungen an ASP.NET -Controller). Bei regulären Unit -Tests vermeiden Sie normalerweise die Parallelität aufgrund von Flocken, aber mit Kojoten werden Sie ermutigt, die Parallelität in Ihren Tests zu nutzen, um Fehler zu finden.
Coyote wird von vielen Teams in Azure verwendet, um ihre verteilten Systeme und Dienste zu testen, und hat Hunderte von Genau-bezogenen Fehler gefunden, bevor sie Code in der Produktion bereitstellen und Benutzer betreffen. In den Worten eines Azure Service Architect:
Coyote fand zu Beginn des Entwicklerprozesses mehrere Probleme, diese Art von Problemen, die normalerweise in die Produktion bluteten und später sehr teuer wurden.
Coyote wird mit Microsoft Research mit ❤️ hergestellt.
Betrachten Sie den folgenden einfachen Test:
[ Fact ]
public async Task TestTask ( )
{
int value = 0 ;
Task task = Task . Run ( ( ) =>
{
value = 1 ;
} ) ;
Assert . Equal ( 0 , value ) ;
await task ;
}
Dieser Test wird die meiste Zeit bestehen, da die Behauptung normalerweise vor Beginn der Aufgabe ausgeführt wird. Es gibt jedoch einen Zeitplan, in dem die Aufgabe schnell genug beginnt, um value
auf 1
zu setzen, wodurch die Behauptung fehlschlägt. Natürlich ist dies ein sehr naives Beispiel und der Fehler ist offensichtlich, aber Sie können sich viel kompliziertere Rassenbedingungen vorstellen, die in komplexen Ausführungspfaden verborgen sind.
Die Art und Weise, wie Coyote funktioniert, ist, dass Sie den obigen Test zuerst mit der Coyote TestingEngine
-API in einen Auftrags -Unit -Test konvertieren:
using Microsoft . Coyote . SystematicTesting ;
[ Fact ]
public async Task CoyoteTestTask ( )
{
var configuration = Configuration . Create ( ) . WithTestingIterations ( 10 ) ;
var engine = TestingEngine . Create ( configuration , TestTask ) ;
engine . Run ( ) ;
}
Als nächstes führen Sie den Befehl coyote rewrite
aus der cli aus (normalerweise als Nachbaueraufgabe), um die IL-IL-IL-TEST- und Produktionsbinärdateien automatisch neu zu schreiben. Dies ermöglicht es Coyote, Haken zu injizieren, die die Kontrolle über die gleichzeitige Ausführung während des Tests übernehmen.
Sie können dann den gleichzeitigen Unit -Test aus Ihrem bevorzugten Unit -Test -Framework (wie Xunit) ausführen. Coyote übernimmt und führt den Test von Anfang bis Ende für N -Iterationen wiederholt aus (im obigen Beispiel wurde n auf 10
konfiguriert). Unter der Haube verwendet Coyote intelligente Suchstrategien, um alle Arten von Ausführungspfaden zu untersuchen, die in jeder Iteration einen Fehler ausblenden könnten.
Das Fantastische ist, dass Coyote, sobald ein Fehler gefunden wurde , eine Spur durch die engine.TestReport
-API bietet.
Der Einstieg mit Coyote ist einfach! Folgen Sie zunächst dieser Anleitung, um das coyote
-Befehlszeilen-Tool von Nuget zu installieren. Sie sind jetzt bereit, die Coyote-Website für Tutorials, Dokumentation, How-Tos, Muster und weitere Informationen zum Projekt zu lesen. Genießen!
Upgrade Ihrer coyote
-Abhängigkeiten? Überprüfen Sie hier den Changelog.
Beachten Sie, dass Coyote ein Open-Source-Projekt ist, das "as-is" bereitgestellt wird. Wir können keine formelle Unterstützung leisten. Für Microsoft -Mitarbeiter haben wir den Channel Friends of Coyote -Teams, eine interne Community, die helfen kann, Fragen zu beantworten und voneinander zu lernen.
Dieses Projekt begrüßt Beiträge und Vorschläge. In den meisten Beiträgen müssen Sie einer Mitarbeiters Lizenzvereinbarung (CLA) zustimmen, in der Sie erklären, dass Sie das Recht haben und uns tatsächlich tun, um uns die Rechte zu gewähren, Ihren Beitrag zu verwenden. Weitere Informationen finden Sie unter https://cla.opensource.microsoft.com.
Wenn Sie eine Pull -Anfrage einreichen, bestimmt ein CLA -Bot automatisch, ob Sie einen CLA angeben und die PR angemessen dekorieren müssen (z. B. Statusprüfung, Kommentar). Befolgen Sie einfach die vom Bot bereitgestellten Anweisungen. Sie müssen dies nur einmal über alle Repositorys mit unserem CLA tun.
Dieses Projekt hat den Microsoft Open Source -Verhaltenscode übernommen. Weitere Informationen finden Sie im FAQ oder wenden Sie sich an [email protected] mit zusätzlichen Fragen oder Kommentaren.