Mocking Oauth-Provider beim testen
Habe ich eine app, die ich Schreibe, die authentifiziert gegen einen Oauth-2.0 Zulassung-server. Ich würde es gerne testen die Teile, die sind nur zugänglich, nachdem Sie eingeloggt haben, aber die Oauth-server ist eine externe Abhängigkeit, erschwert und machen Sie spröde meiner tests.
Irgendwelche Vorschläge, wie sollte ich dies angehen? Was die Praktiken der Industrie für so etwas? Mein Bauchgefühl ist irgendwie mock aus dem server, so dass es ermöglicht den Zugriff auf die geschützten Ressourcen.
Falls es eine Rolle spielt, dies ist eine Python-webapp geschrieben, mit Kolben.
Ich bin mit einem custom oauth-server die laufen auf meiner eigenen domain-und zwar ist es möglich, eine Art sandboxing-Funktionalität als FoxMask vorgeschlagen hat, würde ich viel lieber in der Lage, um den test auszuführen, ohne dass ein extra server läuft.
- in der Regel, die "externe" Oauth (like-for-service Twitter, Evernote etc.) bieten eine sanbox, um unsere tests. Haben Sie eine gefunden, die für diesen Zweck ?
- Aber Sie würde immer noch verlangen, dass Sie zur Authentifizierung gegen Sie? Nur, dass Sie senden Sie dummy-Anmeldeinformationen für den test?
- ja natürlich, Sie verlangen, dass. ja, Sie kehrte ein dummy-Anmeldeinformationen oder gleichwertig. Evernote, zum Beispiel, bietet spezielle Tasten für test-Zwecke nur. Und das funktioniert der trick zu beenden, unsere dev mit der API. Sobald Sie locken Sie Ihre dev zu schieben in der Produktion, bekommen Sie die neuen api-Schlüssel für die Produktion.
- Meine Oauth2 provider ist ein custom server, das läuft auf meinem Rechner. Ich könnte diese Funktionalität hinzufügen, aber ich würde viel lieber in der Lage, um die tests auszuführen, ohne sogar zu müssen, eine tatsächliche Ausführung Oauth-server.
- Ich sehe, Sie sollten begonnen haben, durch diese details. Hätte ich vermieden, darüber zu sprechen nutzlose Dinge für Euch 😉 jetzt sind wir Also wieder zum Ausgangspunkt zurückkehren. sorry.
- Mea Culpa. Ich habe behoben, die Frage zu stellen.
- So können Sie überprüfen, ob Ihr in
DEBUG
stellt dann eine gefälschte Antwort von einemmock class
wird immer True zurückgeben oder etwas, das Bedeutung, die der Benutzer auth. (das war meine Letzte Antwort, wird der nächste schlage vor, wir starten ein "chat" austauschen.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Verbraucher (also der Anwendung) Seite, die OAuth2-Prozess getrennt werden kann in zwei Teile:
#1 alles, was Sie brauchen, um zu testen, dass beim aufrufen der route, beginnt der Authentifizierungsprozess die Antwort zurückgegeben wird ein redirect auf die OAuth2 provider. Dies geschieht einfach, mit Kolben ist test-client. Die Antwort sollte den status-code 302 und einen "Location" - header gesetzt zu ermächtigen, die URL für Ihre OAuth2 provider. Beachten Sie, dass Sie nicht brauchen, um Anbieter zu werden, sind Sie einfach nur testen, dass die Antwort eine Umleitung, aber Sie brauchen nicht, um tatsächlich umleiten.
Tests für #2 ist ein bisschen mehr beteiligt. Ihre Kolben-app hat eine spezielle URL, die bezeichnet wird als die "redirect-URL" für die OAuth2 provider senden Ihnen den auth-code. Können Sie nur aufrufen, URL mit dem Flask-test-client die übergabe eines mock-code und hat keine Problem.
Das problem ist, dass in der view-Funktion, mit der Umleitungs-URL benötigen Sie zum aufrufen des OAuth2 provider tauschen Sie den auth-code für eine access-token, und dies synchron erfolgt. Um zu verhindern, dass diese Transaktion zu passieren, müssen Sie, um zu überprüfen
app.config['TESTING']
- und in diesem Fall überspringen Sie die eigentliche Anfrage und ersetzen Sie es mit einem fake-Antwort, umfasst ein mock-access-token.Dann müssen Sie auch gefälschte zusätzliche Anrufe in die OAuth2 provider senden Sie das access-token auf Anfrage Daten.
Wenn Sie eine OAuth2-client-Bibliothek, die in Ihrem Kolben-app kann es einfacher sein, erstellen der mock-Anbieter, ohne dass Sie die Prüfung von Ausnahmen in der Anwendung. In meinem Fall bin ich mit rauth, und für diese habe ich eine Unterklasse der
OAuth2Service
Klasse, überschreibt die richtigen Methoden und reagiert mit gespielter Daten, die ich erfasst habe, von einer realen session. Dann in meinem test-setup habe ich gerade das mock-service und die Anwendung zu täuschen, zu denken, es ist im Gespräch mit einem echten server.Ich hoffe, das hilft.