2016-04-21 73 views
0

我是中學的老師,幾年來一直在使用Python解決簡單的任務。我很有興趣編寫自動化測試來運行學生代碼以使標記過程自動化。在Python 3中測試學生腳本

我也對TFD感興趣,所以單元測試似乎是一種自然的探索途徑。我寫了一個測試,要求學生修改腳本中的幾個函數和過程。然後我可以手動運行一個測試腳本對每個提交給他們通過導入文件的分數。

知道緊縮... 我很努力地編寫一個腳本,它將遍歷子文件夾系統來針對所有提交運行我的測試腳本。正如你可以想象的那樣,這對於減少打標時間會有重要的幫助。

文件夾結構是通過電子方式提交作品的方式生成的。我最終得到了一個分配文件夾,然後在這裏與學生一起工作的子文件夾。 例如「作業1文件夾」,然後在每個學生提交的文件夾內「安東尼學生文件夾」,「另一個學生文件夾」等(約23名學生)。

每個學生都會編輯一個腳本,要求他們編寫一個函數或過程。這裏有一個例子:

# ======================================================================= 
# Test 1 
# Write a function called 'MyCubed' that takes an integer number as an 
# argument and returns the cube of that number. E.g. calling it with 2 
# should give 8. 
# ======================================================================= 
# Code HERE the following code is a student response. 
def MyCubed(num): 
    return num**3 

所以我創建了一個測試文件,我可以把每個學生的文件夾,運行測試每個文件。

# ======================================================================= 
# Test 1 
# Cube an integer 
test1 = 0 
ModuleExist = True 
try: 
    test1 = Python_Test.MyCubed(3) 
except: 
    print('\nTest 1: Failed: MyCubed not present') 
    ModuleExist = False 
if ModuleExist: 
    if test1 == 27: 
     print('\nTest 1: My Cubed Passed') 
     score += 10 
    elif test1 != 0: 
     print('\nTest 1: Failed expected 27, actually-', test1) 

此腳本包含8個測試(模塊)以在腳本上測試/運行。 所以我希望遍歷學生文件夾的列表並導入學生解決方案並運行測試用例。

我可以將文件放在每個文件夾中並單獨運行它們,但我想自動執行它以遍歷所有子文件夾。

+0

你的問題很清楚,但你到目前爲止做了什麼?你的代碼遇到了哪些問題? – EbraHim

回答

0

下面是代碼將執行的操作,它將保存文件夾中的所有文件列表,併爲該文件夾中的每個文件保存文件名作爲參數。如果這看起來像解決您的問題,您可以使用下面的代碼。

import os 
from subprocess import Popen 
content_list = [] 
for content in os.listdir(<Path>): # Path to the directory where student Scripts were there 
    content_list.append(content) 
for item in content_list: 
    pobj = Popen([executable, '<Your_script>'+item], bufsize=-1, stdout=sout, stderr=serr) 
    pobj.wait()