python 响应 - 并非所有请求都已执行

标签 python mocking python-responses

我正在尝试测试用例来模拟 api 调用,并使用 python 响应来模拟 api 调用。

下面是我的模拟,

with responses.RequestsMock() as rsps:
    url_re = re.compile(r'.*udemy.com/api-2.0/courses.*')           
    url_re = re.compile(r'https://www.udemy.com/api-2.0/courses')
    rsps.add(
        responses.GET, url_re,
        body=mocked_good_json, 
        status=200,
        content_type='application/json',
        match_querystring=True
    )
    courses = self.app.courses.get_all(page=1, page_size=2)         
    for course in courses:              
        self.assertTrue(isinstance(course, Course))
        self.assertTrue(hasattr(course, 'id'))
        self.assertTrue(hasattr(course, 'title'))           
        self.assertIsNotNone(course.id)        

当我执行这个模拟时,我收到此错误 -

AssertionError: Not all requests have been executed [(u'GET', 'https://www.udemy.com/api-2.0/courses/')]

当我删除模拟并直接调用 api 时,它工作正常。

有什么关于我的模拟失败的原因吗?

错误消息 -

======================================================================
FAIL: test_get_all_courses (tests.test_courses.TestApiCourses)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/rem/git/udemy/tests/test_courses.py", line 136, in test_get_all_courses
    courses = self.app.courses.get_all(page=1, page_size=2)
  File "/Users/rem/.virtualenvs/udemyapp/lib/python2.7/site-packages/responses.py", line 536, in __exit__
    self.stop(allow_assert=success)
  File "/Users/rem/.virtualenvs/udemyapp/lib/python2.7/site-packages/responses.py", line 620, in stop
    [(match.method, match.url) for match in not_called]
AssertionError: Not all requests have been executed [(u'GET', 'https://www.udemy.com/api-2.0/courses/')]

最佳答案

您正在模拟该请求,但在此测试中未调用该请求。您正在调用courses = self.app.courses.get_all (page = 1, page_size = 2),我怀疑此方法courses.get_all正在调用请求库.

根据docs ,添加mock的响应后,预计会调用请求。并且您不会在调用 get_all 之后调用 request,并且此方法正在调用 requests。

因此,您必须移动此测试,并调整它,get_all方法,或者模拟使用它的类的请求,看看您的代码,我想在 Course.get_all.

关于python 响应 - 并非所有请求都已执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53712288/

相关文章:

python - 如何将模块员工中的按钮创建/编辑隐藏到属于员工/员工组的员工?

python - fillna 没有给出预期的结果

java - @Mock 注释不适用于对象映射器

java - 在方法内部创建模拟对象正在测试以验证传递的参数

json - 如何使用 PYTHON 以字典类型而不是字符串类型获取 JSON.loads() 输出

python - 在 mac osx lion 中安装(构建)matplotlib

python - Google Cloud Datastore GQL 查询的 LIMIT 子句中的游标

java - 在没有框架的情况下创建模拟对象

Python:将请求置于休息 api 发送 Bad request 400 错误

带 url 参数的 python 模拟响应