2016-12-28 5 views
1

J'ai un test de django_rest_framework (le problème est le même avec un test régulier de django) qui ressemble à ceci:test d'impression Django ou log échec

from rest_framework.test import APITestCase 

class APITests(APITestCase): 

    # tests for unauthorized access 
    def test_unauthorized(self): 
     ... 
     for api in apipoints: 
      response = self.client.options(api) 
      self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

J'ai une URL qui échoue, le terminal affiche ceci:

FAIL: test_unauthorized (app.misuper.tests.APITests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/alejandro/...",

line 64, in test_unauthorized

self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) AssertionError: 200 != 403

Ok, comment puis-je savoir quelle URL a échoué au test? Je suis itérer à travers toutes les URLs qui nécessitent une connexion, c'est à dire beaucoup d'URL, comment puis-je imprimer celui qui a échoué le test?

Répondre

1

Pour une simple solution rapide, vous pouvez passer le apipoint dans le troisième paramètre de la méthode d'assertion:

>>> from unittest import TestCase 
>>> TestCase('__init__').assertEqual(1, 2, msg='teh thing is b0rked') 
AssertionError: teh thing is b0rked 

Dans l'esprit des tests unitaires, ceux-ci devraient vraiment être chaque méthodes d'essai différentes plutôt que seulement une méthode de test avec la boucle. Consultez nose_parameterized pour obtenir de l'aide pour rendre cela plus sec. Vous décorez la méthode d'essai comme celui-ci:

from nose_parameterized import parameterized 

@parameterized.expand(apipoints) 
def test_unauthorized(self, apipoint): 
    response = self.client.options(apipoint) 
    self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

Le décorateur va générer différentes méthodes d'essai pour chaque critère d'évaluation, de sorte qu'ils puissent passer/échouer indépendamment les uns des autres.

Bien que ce paquet ait nose dans le nom, it's also compatible with other runners tel que unittest et py.test.