问题描述:
编写程序2subprocess_test.py测试另一个Python程序2subprocess_homework.py的功能是否正确(不考虑具体的代码实现方式)。程序2subprocess_homework.py预设的功能为“键盘输入若干行使用英文半角逗号分隔的自然数,把该行每个自然数加5后按原来的格式输出(每行若干自然数,使用英文半角逗号分隔),如果没有输入任何内容就直接回车确认表示输入结束”。为了实现自动测试,程序2subprocess_test.py调用程序2subprocess_homework.py,并使其自动从文件2in.txt中读取内容作为测试用例,并把处理后的结果自动写入文件2out.txt中。如果文件2out.txt中的内容和预期一样,则表示程序2subprocess_homework.py的功能正确。为避免被测程序2subprocess_homework.py中有死循环,如果20秒内没有执行完,直接结束被测程序的执行,并判断功能错误。
在本文代码基础上,结合Socket或其他方式实现在线提交代码,即可实现Python在线编程评测系统,董付国老师免费提供的“Python小屋刷题神器”也是基于这个原理实现编程题在线评测的。
被测程序2subprocess_homework.py代码:
测试主程序2subprocess_test.py代码:
测试数据文件2in.txt内容:
输出文件2out.txt内容:
修改被测程序文件,故意制造语法错误,如图,
重新运行测试主程序,结果如下: