我想编写一个直接执行 HTTP 请求的单元测试(而不是使用 django.test.client.Client)。
如果你好奇为什么——这是因为我想测试我从 Django 应用程序公开的 Thrift-over-HTTP API——并且我想在单元测试中使用 Thrift 客户端。
问题是在测试期间,服务器实际上并没有运行。使用 django.test.client.Client 时,它只会调用视图函数,而不是实际发出 HTTP 请求。(如果我错了,请纠正我。)
那么强制测试框架启动 HTTP 服务器的最佳方法是什么?
我尝试编写一个执行以下操作的 bash 脚本:
./manage.py testserver --addrport 7000 &
PID=$!
sleep 5
./manage.py test --no-input
kill $PID
但这很麻烦(并且实际上不起作用),因为 1)我需要睡眠(否则测试将在测试服务器初始化数据库之前开始)和 2)测试将尝试再次初始化数据库(在testserver 已经对其进行了初始化)。
对此还有其他解决方案吗?
谢谢你。