gpt4 book ai didi

django - 从 Django 测试访问 Django 测试服务器

转载 作者:行者123 更新时间:2023-12-05 00:08:54 30 4
gpt4 key购买 nike

我想编写一个直接执行 HTTP 请求的单元测试(而不是使用 django.test.client.Client)。

如果您好奇为什么 - 那是因为我想测试我从 Django 应用程序公开的 Thrift-over-HTTP API - 我想在单元测试中使用 Thrift 客户端。

问题是在测试期间,服务器实际上并未运行。当使用 django.test.client.Client 时,它只会调用 View 函数而不是实际发出 HTTP 请求。 (如果我错了,请纠正我。)

那么强制测试框架启动 HTTP 服务器的最佳方法是什么?

我尝试编写一个执行以下操作的 bash 脚本:

./manage.py testserver --addrport 7000 &
PID=$!
sleep 5
./manage.py test --no-input
kill $PID

但这很困惑(并且实际上不起作用),因为 1)我需要 sleep (否则测试将在测试服务器初始化数据库之前开始)和 2)测试将再次尝试初始化数据库(在testserver 已经初始化了它)。

对此还有其他解决方案吗?

谢谢你。

最佳答案

是的,你是对的 - 这是一个问题,它有一个错误:http://code.djangoproject.com/ticket/2879

只是,你可能会遇到多线程问题,有意省略:http://code.djangoproject.com/ticket/10117 http://code.djangoproject.com/ticket/4513 http://code.djangoproject.com/ticket/3357

我很沮丧,因此我编写了一个库,其中包括在单独的线程中启动实时服务器并在之后对其进行清理:http://devel.almad.net/trac/django-sane-testing/ .它还通过运行时monkeypatching 启动Django 的多线程服务器,您可以改用cherrypy http(无论如何都更好)。

唯一的问题是它需要你使用 Nose 作为测试框架(与标准单元测试 100% 向后兼容,但如果你已经在使用其他东西......)。然后你可以只使用--with-django 和--with-djangoliveserver/--with-cherrypyliveserver。不知道它将如何与节俭一起工作。

请注意:

  • 请不要用错误报告来打扰 Django 开发人员,你是自己的
  • Windmill 提供了相同的解决方案,因此如果您使用的是 Windmill,您可能会遇到端口冲突
  • 关于django - 从 Django 测试访问 Django 测试服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011088/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com