首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用YAML、tavern和pytest测试具有基本身份验证的API

如何使用YAML、tavern和pytest测试具有基本身份验证的API
EN

Stack Overflow用户
提问于 2019-03-14 15:53:07
回答 1查看 869关注 0票数 1

我正在实现一个删除API,它需要在删除任何用户之前进行基本身份验证。下面是我的基本身份验证和删除用户的代码,它可以通过curl命令很好地工作。

代码语言:javascript
复制
def auth_required(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        if(request.authorization != None and request.authorization["username"] != None and request.authorization["password"] != None):
            username = request.authorization["username"]
            password = request.authorization["password"]
        else:
            return make_response('User does not exists.\n' 'Please provide user credentials', 401,
                    {'WWW-Authenticate': 'Basic realm="Login Required"'})
        if check_auth(username, password):
            return f(*args, **kwargs)
        else:
            return  make_response('Could not verify the credentials.\n' 'Please use correct credentials', 401,
                    {'WWW-Authenticate': 'Basic realm="Login Required"'})
    return decorated

def check_auth(username, password):
    cur = get_db().cursor().execute("SELECT user_name, password from users WHERE user_name=?", (username,))
    row = cur.fetchone()
    if row and row[0] == username and pbkdf2_sha256.verify(password, row[1]):
        return True
    else:
        return False

#curl command to execure delete function - curl -u parag:parag --include --verbose --request DELETE --header 'Content-Type: application/json' http://localhost:5000/delete_user/
@app.route('/delete_user', methods=['DELETE'])
@auth_required
def api_delete_user():
        if request.method == 'DELETE':
            status_code:bool = False
        cur = get_db().cursor()
        username = request.authorization["username"]
        try:
            cur.execute("UPDATE users SET active_status =? WHERE user_name=?",(0, username,))
            if(cur.rowcount >= 1):
                get_db().commit()
                status_code = True
        except:
            get_db().rollback()
            status_code = False
        finally:
            if status_code:
                return jsonify(message="Passed"), 201
            else:
                return jsonify(message="Fail"), 409

我已经创建了一个YAML文件来测试上面的删除API,但我无法在其中添加基本身份验证。以下是我用于测试删除API的YAML文件。

代码语言:javascript
复制
test_name: Delete existing user

stages:
  - name: Make sure you delete existing user
    request:
      url: http://localhost:5000/delete_user
      json:

      method: DELETE
      headers:
        content-type: application/json
    response:
      status_code: 201
      body:
        message: Passed
      save:
        $ext:
          context:
            parameters:
              auth_required:
                username: parag
                password: bhingre

上面的文件不能帮助我在删除用户之前通过基本身份验证删除用户。如果有任何解决方案或建议,请让我知道。

EN

回答 1

Stack Overflow用户

发布于 2019-03-30 13:52:31

尝试在标头中添加Authorization,并从标头中读取Authorization值。这对我很管用。

代码语言:javascript
复制
headers:
  content-type: application/json
  Authorization: "Basic trydtfjgbyugvyujbbyy"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55157399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档