使用pytest进行Flask基本身份验证

ns5*_*533 0 python testing pytest flask

我目前在项目中使用Flask-HTTPAuth进行基本身份验证。我已经使用curl和base64令牌手动测试了它,的确可以工作。但是,我在创建测试证明工作正常时遇到了问题。这是我当前的测试,它总是返回401:

TestLoginApi类

def setup(self):
    myapp.app.config.from_object("config.TestingConfig")
    self.app = myapp.app.test_client()
    client = MongoClient(myapp.app.config['DATABASE_URL'])
    db = client.get_default_database()
    assert list(db.collection_names()) == []

    db.users.insert_one({'name': 'testuser', 'password': 'testpassword'})

def teardown(self):
    client = MongoClient(myapp.app.config['DATABASE_URL'])
    client.drop_database(client.get_default_database())

def test_not_logged_in(self):
    rv = self.app.get('/api/v1/login/')
    assert rv.status_code == 401

def test_correct_password(self):
    d = Headers()
    d.add('Authorization', 'Basic dGVzdHVzZXI6dGVzdHBhc3N3b3Jk')
    rv = self.app.get('/api/v1/login/', headers=d,
        content_type='application/json')
    assert rv.status_code == 200
Run Code Online (Sandbox Code Playgroud)

我也尝试更改以下内容:

def test_correct_password(self):
        d = Headers()
        d.add('Authorization', 'Basic dGVzdHVzZXI6dGVzdHBhc3N3b3Jk')
        rv = self.app.get('/api/v1/login/', headers=d,
            content_type='application/json')
        assert rv.status_code == 200
Run Code Online (Sandbox Code Playgroud)

对此没有成功:

def test_correct_password(self):
         rv = self.app.get('/api/v1/login/', headers={"Authorization": "Basic {user}".format(user=base64.b64encode(b"testuser:testpassword"))})
         assert rv.status_code == 200
Run Code Online (Sandbox Code Playgroud)

Moy*_*ote 8

您可以这样测试授权:

valid_credentials = base64.b64encode(b'testuser:testpassword').decode('utf-8')
response = self.app.get(
                '/api/v1/login/', headers={'Authorization': 'Basic ' + valid_credentials})
assert response.status == '200 OK'
Run Code Online (Sandbox Code Playgroud)

我想您会喜欢我的github项目,该项目针对Flask-HTTPAuth具有大量不同的测试。