一个Python背可定制的自动签名机。

sp-autograder的Python项目详细描述


CS 41自动签名机

IssuesMIT License

第41章:意外事故代码是斯坦福大学的一门关于Python编程语言的课程。这个完全用Python实现的autograder允许用户运行学生代码,运行解决方案代码,并比较两者的输出。autograder允许用户实现多个可以同时执行的测试,并允许用户挂接到模块中,并提供逻辑来对测试结果进行后处理。在

A terminal screen with text that appears from running the CS 41 autograder.
CS 41 autograder的示例运行。

离开地面

以下是使用这款自动签名机的步骤:

  1. 实例化autograder.Autograder。创建从autograder.Autograder继承的对象,如class TestAutograder(Autograder):。在
  2. 初始化父实例。我倾向于在我的子类的__init__方法中使用super().__init__来实现这一点。该函数唯一需要的参数是student模块的名称,以字符串module_name的形式提供。如果要添加到自动加载器,请指定has_custom_tests=True。在
  3. Writerun_custom_tests。重写run_custom_tests(self)函数并添加任何自定义测试。执行该函数时,self.module将包含student模块对象。在

测试

自动加载器模块有许多测试,它们以线性层次结构相互继承。在

  • BaseTest:必须提供BaseTest和{}。它只是比较两个对象,如果两个对象相同则通过,否则失败。在
  • ^另外,{{{cd15}可与
  • IOTestIOTest允许自动签名器覆盖{},并在学生和解决方案程序调用input时向他们提供输入。文本输入应作为in_params提供。在
  • FileIOTest:A FileIOTest被提供一个filename,并从该文件的内容生成一个IOTest。在

测试套件

autograder.testsuite包含一个名为TestSuite的类。此类允许用户向自动加载器添加多个测试,同时运行它们,并将结果制成表格。您可以通过将multiprocess=True传递给TestSuite的构造函数来启用并发性。您还可以通过传入函数作为参数ml,使用机器学习算法钩住测试套件。所有测试完成后,ml将被调用,其中ii个条目对应于第i次测试(一个表示学生通过了测试,零表示学生失败)。在

高级功能

模块覆盖

自动读取器支持module_overrides参数,该参数应该是将字符串映射到对象的字典。自动加载器将覆盖学生文件中模块级的关联映射。在

设置和清理

每个测试都支持一个setup_fn和一个cleanup_fn,它们将分别在测试运行之前和之后被调用。这些函数可以用来修改文件系统和输入,或者在测试运行前后进行清理

渐进式差异

如果在命令行中使用--progressive-p标志调用自动读取器,则当遇到每个程序中的第一个输出错误时,它将停止。它将提示分级机输入previor、SUBSEQ或BOTH,分别显示前面的行、后续的行或显示整个diff。在

已知问题

多处理问题

模块覆盖和渐进式差异功能在多处理模式下不起作用。无法修复渐进式差异功能,因为操作系统限制对sys.stdin的访问,因此自动加载器无法向分级器请求输入。可以使用模块覆盖来修复问题,但是需要大量的重构。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何制作更好的自定义对话框?   锁定机制锁定UI线程的片段中的java Update ListView   heroku上的java调试嵌入式tomcat   java在使用键时未从映射返回特定数组   使用Blowfish生成secretKey时出现java问题   Appium\MAC OS\Android\Java组织。openqa。硒。SessionNotCreatedException   java在spring boot中解析json响应的最佳方法   java我怎样才能一行一行地看到每一行?   将Java连接到PostgreSQL时强制TZ?   java十六进制到二进制再到字符串   Spark steaming从Kafka中读取并在Java中应用Spark SQL聚合   java使用Cassandra中使用hector客户端的组合键的第一个组件获取行   java类型不匹配:无法从列表<类名>转换为游标:安卓错误   TopCoreDocCollector类型中的java方法create(int,int)不能用于参数(int,boolean)