有没有人知道,我们如何在Django中对用户发送的数据(函数)运行测试用例,(由leetcode, codesignals和codewar实现)我的功能(解决方案)是如何针对这些测试进行测试的,我如何在后台使用django, django rest框架实现这个功能(点击这个链接查看图片)
import subprocess
def test_submission():
compiled_code = "test.out"
test_input = open("path/to/test_input.txt")
submission_output = open("path/to/submission_output.txt")
cmd = [f"./{compiled_code}"]
subprocess.run(cmd, stdin=test_input, stdout=submission_output)
# At this point the output of executed code with test_input is stored in "path/to/submission_output.txt"
return
test_program可以是任何文件,无论是C、c++还是Python。
如果您不需要测试支持,您应该能够通过使用该语言和Docker CLI的官方容器映像轻松运行代码。
也有一个工具是由codewar使用的,为了更好地理解,你也可以看到这个codewar的克隆,我认为它有点简化,也是这个codewar CLI的实际实现,
最后一点,如果你在python中使用也可以使用eval但是使用它的问题是,一些恶意用户可能会插入有害的恶意脚本,所以我认为你应该避免使用它,
我个人认为,你应该使用简单的docker选项加上一点沙箱,因为在我们的例子中,它主要是对docker API的一个薄包装,它接受提交的代码,准备环境并执行它们。它非常简单,最初的PoC只是几行shell脚本和一个用Go编写的小工具。