我正在为flask应用程序写一些断言。我已经在响应中成功测试了Umlauts:
assert 'Wählen Sie ...'.encode('utf-8') in rv.data
Umlaut“ä”在编码数据和Web应用程序的响应中具有相同的表示形式(\xc3\xa4
)。
但是现在,我试图用双引号来做同样的事情:
assert 'Der gewünschte Monat ... z.B. "2019-5".'.encode('utf-8') in rv.data
之所以失败,是因为"
在编码时仍然是"
,但是Web应用程序却以"
响应。
我要测试的字符串应该如何处理才能实现兼容性?
答案 0 :(得分:1)
Web应用程序正在使用html实体代码对双引号进行编码,然后再编码为utf-8。您可以使用html.escape函数来模拟此过程,但是不幸的是,它用"
而不是"
代替了'“'。
xml.sax.saxutils.escape函数不会自动转义双引号,但它确实接受要转义的字符和转义的值的字典,因此您可以使用它来生成文本:
>>> from xml.sax import saxutils
>>> escaped = saxutils.escape('Der gewünschte Monat ... z.B. "2019-5".', {'"': '"'})
>>> escaped
'Der gewünschte Monat ... z.B. "2019-5".'
相反的方法是解码和取消转播服务器响应,并将其与原始字符串进行比较。您可以为此使用html.unescape函数,因为它将取消转义数字转义:
>>> import html
>>> response = html.unescape(rv.data.decode('utf-8'))
>>> assert 'Der gewünschte Monat ... z.B. "2019-5".'.encode('utf-8') in response