Testing external URLs in Django
<p>I'm currently having a hard time getting some of my Django tests to work.
What I'm trying to do is test if a given URL (the REST API I want to consume) is up and running (returning status code 200) and later on if it's responding the expected values.
However, all I get returned is a status code 404 (Page not found), even though the URL is definitely the right one. (Tried the exact string in my browser)</p>

<p>This is the code:</p>

<pre><code>from django.test import TestCase


class RestTest(TestCase):
    def test_api_test_endpoint(self):
        response = self.client.get("http://ip.to.my.api:8181/test/")
        self.assertEqual(response.status_code, 200, "Status code not equals 200")
</code></pre>

<p>It always returns a 404 instead of a 200...
Anyone knows what I do wrong here?</p>

<p><code>self.client</code> is not a real HTTP client; it's the Django test client, which simulates requests to your own app for the purposes of testing. It doesn't make HTTP requests, and it only accepts a path, not a full URL.</p>

<p>If you really needed to check that an external URL was up, you would need a proper HTTP client like <code>requests</code>. However this doesn't seem to be an appropriate thing to do in a test case, since it depends on an external API; if that API went down, suddenly your tests would fail, which seems odd. This could be something that you do in a monitoring job, but not in a test.</p>

python django unit-testing testing