vcrpy录音带不会在使用test_client.post的测试中记录

时间:2019-05-26 04:13:55

标签: python flask pytest

我正在实现pytest,我想使用vcrpy记录请求的答案。

我正在使用烧瓶1.0.2,pytest 4.5.0,pytest-flask 0.15.0和vcrpy 2.0.1。我使用flask实现了一个宁静的api。我写了一个测试,但是我想记录请求的响应,而vcr没有记录响应。

我的终点是:

from flask import jsonify
from flask import Blueprint

class CompanyResource(Resource):

    def post(self):
        response = jsonify({
            "timestamp": datetime.utcnow()
        })
        response.status_code = 201
        return response


api_bp = Blueprint('dashboard', __name__)
api = Api(api_bp)
api.add_resource(CompanyResource, 'company', endpoint='company')

测试如下

import pytest
import vcr

from flask import url_for

base_vcr = vcr.VCR(
    cassette_library_dir='tests/dashboard/fixtures',
    record_mode='once'
)


def test_create_company(client, company_data, headers):
      with base_vcr.use_cassette('create_user.yaml'):
           response = client.post(url_for('dashboard.company'),
                                  json=company_data,
                                  headers=headers)

我希望在指定目录上自动生成一个文件。但是当我运行测试时,没有生成卡带。事实是,如果我将client.post更改为requests.post,则响应将记录为一个get请求,但是如果我尝试发布,则错误为yield:

requests.exceptions.MissingSchema: Invalid URL '/api/dashboard/company': No schema supplied. Perhaps you meant http:///api/dashboard/company?

您对测试我的帖子终点并记录答案有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这有点晚了,但是vcrpy有一个库列表,它记录了HTTP请求。 requests是其中之一,而其他https://vcrpy.readthedocs.io/en/latest/installation.html#compatibility中已提及。

  • aiohttp
  • boto
  • boto3
  • http.client
  • httplib2
  • 请求(1.x和2.x版本)
  • tornado.httpclient
  • urllib2
  • urllib3

不确定pytest中使用的是哪种测试客户端装置,但是如果您成功使用requests调用端点,它将为您记录响应。