Einheit-Test-Postanforderung für mehrere Kontrollkästchen mit demselben Namen unter WebApp2
-
26-10-2019 - |
Frage
Verwenden von WebApp2 Ich erstelle Unit -Tests für ein Formular, in dem Kontrollkästchen für Stimmen vorhanden sind, sodass mehrere Werte für die veröffentlicht werden können vote
Feld und sie werden durch abgerufen request.POST.getall('vote')
:
<input type="checkbox" name="vote" value="Better">
<input type="checkbox" name="vote" value="Faster">
<input type="checkbox" name="vote" value="Stronger">
Im Unit -Test habe ich versucht, eine Liste zu bestehen:
response = app.get_response('/vote',
POST={'vote': [u'Better', u'Faster', u'Stronger']},
headers=[('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8')]
)
Aber sieht es so aus, als würde es einfach in eine Zeichenfolge konvertiert:
votes = self.request.POST.getall('vote')
# => [u"[u'Better', u'Faster', u'Stronger']"]
Wie kann ich mehrere Werte für übergeben vote
das wird als Liste über über die via abgerufen request.POST.getall()
?
Lösung
Postdaten werden mit der Abfrage -Zeichenfolge codiert, und mehrere Elemente mit demselben Namen werden durch Wiederholung des Schlüssels mit unterschiedlichen Werten dargestellt. Zum Beispiel:
vote=Better&vote=Faster&vote=Stronger
Python hat Bibliotheksfunktionen, um dies für Sie zu tun:
urllib.urlencode({
'vote': ['Better', 'Faster', 'Stronger'],
}, True)
Das zweite Argument (True
) zu urlencode
wird als "doseq" bezeichnet und anweist Urlencode, Sequenzen als Listen separater Elemente zu codieren.
Andere Tipps
Die WebTest -Bibliothek ist für diese Testfälle hilfreich.
http://webbtest.pythonpaste.org/en/latest/index.html#form-submissions