2016-06-09 1 views
1

Je travaille sur un programme de test qui lit le fichier ".test" d'un répertoire donné.Exécution de tous les fichiers de test en python à partir d'une fonction en utilisant "assert" sans quitter "for loop" en cas d'échec du test

Structure de ".test" est:

---TEMPLATE--- 
template content 
---CONTEXT--- 
context to render on template 
---RESULT--- 
expected result of the template. 

Il n'y 'n' pas. du fichier de test dans mon répertoire de test. I mémorise le no. des fichiers .test dans le dictionnaire "tests" comme clé et le nom du fichier .test comme valeur. Après cela, itérer sur le dictionnaire "tests" et lire le contenu du fichier .test et les stocker dans des variables.

---TEMPLATE--- part in "template_string", 
---CONTEXT--- part in "context_string", and 
---RESULT--- part in "expected_result" 

puis rendre template_string avec context_string en utilisant la classe jinja2.Environment et les stocker dans varibale "résultat".

comparer "result" avec "expected_result".

code coureur de test en cours:

class TestTempates(TestCase): 
    def test_method(self): 
     tests = { dictionary of .test file } 
     results = {} #to store status of test case at there index (pass or error). 
     env = jinja2.Environment() 
     passed = 0 
     error = 0  
     for index, fname in tests.items(): 
      file_path = dirpath + os.sep + fname 
      with open(file_path) as f: 
       # logic to read file content 
       template_string = #content of ---TEMPLATE--- part from file 
       context_string = #content of ---CONTEXT--- part from file 
       expected_result = #content of ---RESULT--- part from file 
      template = env.from_string(template_string) 
      context = json.loads(context_string) 
      result = template.render(context) 

      if result == expected_result: 
       results[index] = "Pass" 
       passed += 1 
      else: 
       sep = "-----------------------------" 
       error = "Error: results mismatch:\n%s\n%s\n%s\n%s" % \ 
         (sep, result, sep, expected_result) 
       results[index] = error 
       errors += 1 

comparer "résultat" et "expected_result" avec dans "si d'autre" état fonctionne bien. Mais maintenant je veux utiliser "assert" ou "assertEquals" sans quitter "for loop" quand un fichier de test "result" ne correspond pas à "expected_result" jusqu'à ce que tous les fichiers de tests ne soient pas exécutés. Donc, que je peux utiliser mon coureur de test dans Travis CI pour que la construction de Travis échoue quand un cas de test échoue.

Dans la situation actuelle, la génération de CI Travis n'échoue pas en cas de défaillance du test élémentaire.

Répondre

1

Vous pouvez suivre le code de l'extrait ci-dessous pour résoudre votre problème.

suite = unittest.TestSuite() 

def test_main(self): 
    self.assertEquals(self.result, self.expected_output) 


def test_method(self): 
    """ 
    """ 
    # -- code to get tests objects to have all .tests content 
    for index, fname in tests.items(): 
     # get result and expected_output value 
     obj = type('Test', (unittest.TestCase,), {'test_main': test_main, 
        'result':result, 'expected_output':expected_output}) 

     suite.addTest(obj('test_main')) 

unittest.TextTestRunner(verbosity=2).run(suite)