Django测试失败时,404不应该

时间:2016-03-09 19:18:15

标签: python django unit-testing

我正在尝试为我的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?

1 个答案:

答案 0 :(得分:1)

正如我提交这个问题一样,我回忆起关于测试数据库的阅读,以及如何将其创建为空,以便“apollo”不存在。一旦我使用以下行创建它,测试就通过了:

MasterServers.objects.create(servername="apollo")