我正在尝试为我的Django站点编写一个HTTP get操作的测试用例。这个应用程序中有test.py :(我已根据我的安全组的要求更改了这篇文章中的一些名称和路径,但输出准确无误)
from django.test import TestCase
class DashboardTestCase(TestCase):
def test_index(self):
resp = self.client.get('http://myhost.mydomain.com/apiv1/masterservers/apollo/')
self.assertEqual(resp.status_code,200)
当我在命令行上进行卷曲时(使用localhost:///apiv1/masterservers/apollo/
或完整的URL)它工作正常,我收到了预期的JSON(当前我正在开发时,它正在序列化主机名) :
$ curl localhost:///apiv1/masterservers/apollo/
{"servername":"apollo"}
$ curl http://myhost.mydomain.com/apiv1/masterservers/apollo/
{"servername":"apollo"}
我遇到的问题是当我运行./manage.py test
时,我得到以下内容:
Traceback (most recent call last):
File "/var/www/django-apps/project/dashboard/tests.py", line 8, in test_index
self.assertEqual(resp.status_code,200)
AssertionError: 404 != 200
----------------------------------------------------------------------
Ran 1 test in 0.368s
另外需要注意的是,当我在这种情况下删除主机名(apollo),并使用/apiv1/masterservers/
运行测试时,测试工作正常,http返回代码匹配为200。
另一件事,我安装了httpie而不是curl,因为它显示了HTTP头信息,这是我从命令行获得的结果,相同的URL:
$ http http://myhost.mydomain.com/apiv1/masterservers/apollo/
HTTP/1.1 200 OK
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
Connection: Keep-Alive
Content-Type: application/json
Date: Wed, 09 Mar 2016 19:05:16 GMT
Keep-Alive: timeout=5, max=100
Server: Apache/2.4.6 (CentOS) PHP/5.4.16 mod_wsgi/3.4 Python/2.7.5
Transfer-Encoding: chunked
Vary: Accept,Cookie
{
"servername": "apollo"
}
如果在测试之外返回代码为200,那么任何人都有理由为什么这个测试失败并返回代码为404?
答案 0 :(得分:1)
正如我提交这个问题一样,我回忆起关于测试数据库的阅读,以及如何将其创建为空,以便“apollo”不存在。一旦我使用以下行创建它,测试就通过了:
MasterServers.objects.create(servername="apollo")