2016-08-10 4 views
1

Ich bin im Prozess der Automatisierung von UI-Test. APIs werden von oAuth gesichert. Um also die URL zu treffen, sagen wir http://mydom/api/welcome Browser muss mit Autorisierungsschlüssel als Header und Wert muss gültiges Token gesetzt haben.So ändern Sie HTTP-Header

Für manuelle Tests, verwende ich Requestly (Chrome Extension), um Header zu setzen. (Kann mir jemand zeigen, was Anfrage intern tun, so dass jede Anfrage von Chrome Header-Wert erhalten, was auf Anforderung festgelegt wurde?)

Gibt es eine Möglichkeit, Header-Wert programmgesteuert festlegen?

PS: Ich habe Curl verwendet, um die Eide-URL aufzurufen, um ein gültiges Token zu erhalten und den Token-Wert als env-Variable festzulegen. Auch ich benutzte Postbote, um das gleiche zu bekommen. Aber all das beeinflusst nicht, wenn es vom Browser aus aufgerufen wird.

Antwort

1

Ich benutze supertest und supertest-as-promised für API-Prüfung über Winkelmesser. Also tue ich einen GET auf meinem OAuth-Endpunkt, speichere das Token in einer Variablen und mache dann im Rest meiner API-Aufrufe request.get(url).set('Authorization', auth.tokenType + ' ' + auth.token);.

So können Sie dies möglicherweise tun, verwenden Sie etwas wie Supertest, um ein Token zu erhalten, und dann browser.manage().addCookie(), um es in Ihrer Browsersitzung einzustellen.

1

Sie können dies nicht sehr einfach durchführen, da Chrome dies nicht unterstützt (siehe https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/141).

Persönlich würde ich diesen Test mit etwas wie Anfrage (https://github.com/request/requesthttps://github.com/request/request) und grundlegenden Aussagen statt über den Browser mit Winkelmesser tun.

+0

@Viad danke für Ihren Vorschlag. Eine Sache: Ich muss den UI-Test automatisieren und verwende dafür das Winkelmesser-Framework. Gibt es eine Möglichkeit, https://github.com/request/request mit Winkelmesser zu integrieren? – Sam

+0

Setzen Sie es einfach in eine Winkelmesser-Spezifikation, denke ich. Stellen Sie sicher, dass Anforderungen in die Implementierung des Winkelmessers eingepackt werden, da sie nur darauf warten, dass Winkelmesserversprechungen abgeschlossen werden. Trotzdem, es ist wie mit einer Gabel, um Suppe zu essen, indem man einen Löffel darüber hält: p – Vlad

1

Sie können HTTP-Header nicht direkt in Selen manipulieren. Sie müssen einen Proxy verwenden, um solche Dinge zu tun. BrowserMobProxy ist ein beliebter Proxy in der Selenwelt. Sie können dazu den Knotenwrapper browsermob-node im Winkelmesser-Test verwenden. Ich fügte einen Beispielabschnitt hinzu, wie man Überschriften ändert here

+0

danke für die Antwort. Werde es versuchen und es wissen lassen, ob es funktioniert. – Sam

0

@Sam Requestly Autor hier.

Nein, derzeit können Sie keinen Headerwert programmatisch festlegen. Es muss für den Moment statisch sein. Dies ist ein sehr langfristiger Plan, um diese Funktion zu implementieren, wenn man bedenkt, wie viele Anwendungsfälle auftreten. Aber hier ist, was Sie tun können.

Sie können Requestly github repo verzweigen. Der Code, in dem die eigentliche Header-Änderung stattfindet, befindet sich in Background.js. Methodenname ist BG.Methods.modifyHeaders. Bitte gehen Sie weiter und schreiben Sie Ihre eigene Logik, um den Header-Wert zu generieren und zu ändern.

Eine Notiz von Chrome Docs

Die folgenden Header zur Zeit nicht an der onBeforeSendHeaders Veranstaltung zur Verfügung gestellt. Diese Liste ist nicht garantiert vollständig oder stabil.

  • Authorization
  • Cache-Control
  • Anschluss
  • Content-Length-Host
  • If-Modified-Since
  • If-None-Match
  • Wenn Range
  • Teildaten Pragma
  • Proxy-Authorization
  • Proxy-Verbindung
  • Transfer-Encoding

Wahrscheinlich, diese Antwort für Sie nicht geeignet sein, da Authorization nicht geändert werden kann. Trotzdem habe ich diese Antwort als praktikablen Ansatz hinzugefügt.