如何将用户名:密码发送到unittest的app.get()请求?

Hou*_*man 10 python unit-testing basic-authentication flask flask-restful

这是我在Flask-RESTful中进行单元测试的一部分.

self.app = application.app.test_client()
rv = self.app.get('api/v1.0/{0}'.format(ios_sync_timestamp))
eq_(rv.status_code,200)
Run Code Online (Sandbox Code Playgroud)

在命令行中,我可以使用curl将用户名:密码发送到服务:

curl -d username:password http://localhost:5000/api/v1.0/1234567
Run Code Online (Sandbox Code Playgroud)

如何在单元测试的get()中实现相同的功能?

由于我的get/put/post需要身份验证,否则测试将失败.

zer*_*323 16

来自RFC 1945,超文本传输​​协议 - HTTP/1.0

11.1基本认证方案

...

为了接收授权,客户端在credentials.string中的base64 [5]编码字符串中发送用单个冒号(":")字符分隔的用户ID和密码.

...

如果用户代理希望发送用户ID"Aladdin"和密码打开芝麻",它将使用以下标题字段:

  Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Run Code Online (Sandbox Code Playgroud)

因此,如果您真的使用http基本身份验证,您可以像下面的解决方案,虽然您的curl用法建议其他一些身份验

from base64 import b64encode

headers = {
    'Authorization': 'Basic ' + b64encode("{0}:{1}".format(username, password))
}

rv = self.app.get('api/v1.0/{0}'.format(ios_sync_timestamp), headers=headers)
Run Code Online (Sandbox Code Playgroud)