2016-10-15 3 views
0

У меня есть структура папок для некоторых задач, они так:Автоматизировать студент тестов запустить

- student_id1/answers.py 
- student_id2/answers.py 
- student_id3/answers.py 
- student_id4/answers.py 
- ... 

У меня есть основной файл: run_tests.py:

from student_id1.answers import run_test as test1 
from student_id2.answers import run_test as test2 
... 


try: 
    test1() 
    print("student_id1: OK") 
except Exception as ee: 
    print("Error for student_id1") 

try: 
    test2() 
    print("student_id2: OK") 
except Exception as ee: 
    print("Error for student_id2") 
... 

Там может быть несколько папок, как они добавляются с каждым новым учеником. Я хотел бы назвать все тесты одной командой, но не хочу добавлять столько строк с каждым новым учеником.

Как я могу автоматизировать это?

+3

Попробуйте написать программу, которая записывает все эти строки для вас. Простой цикл диапазона должен быть достаточно. Затем запустите сгенерированный код. –

+2

@Filip, это может работать, но абсолютно непитонический путь :) – baldr

+1

Чуть лучше, чем работает eval в реальном генераторе :) Я предполагаю, что это приводит к очень простому коду, и поскольку это довольно простая задача, я думаю, Сара является новичком, поэтому я старался держать его простым. –

ответ

2

Вы можете использовать importlib модуль: https://docs.python.org/3/library/importlib.html

import os 
import importlib 

for student_dir in os.listdir(): 
    if os.path.isdir(student_dir): 
     # here you may add an additional check for not desired folders like 'lib', 'settings', etc 
     if not os.path.exists(os.path.join(student_dir, 'answers.py')): 
      print("Error: file answers.py is not found in %s" % (student_dir)) 
      continue 
     student_module = importlib.import_module("%s.answers" % student_dir) 
     try: 
      student_module.run_test() 
      print("%s: OK" % student_dir) 
     except Exception as ee: 
      print("Error for %s" % student_dir) 
+1

Это как волшебство, но спасибо, у меня есть хороший пример. –

Смежные вопросы