如何 运行 从 Cargo 进行外部黑盒测试?

How to run external blackbox tests from Cargo?

假设我有一个 Rust 程序,其中包含一些用 sh 或 Python(例如)编写的黑盒测试。有什么简单的方法可以让 Cargo test 变成 运行 他们吗?

(我意识到这有点违背 Cargo 的本质,因为它可能会引入对 OS 工具的未跟踪依赖项。但这真的很有用,因为我有一些现有的测试我想重用。)

对于快速测试,您可以通过 shell 命令和 std::process::Command 来 运行 外部可执行文件。只需将其粘贴到测试目录中,如下所示:

#[test]
fn it_works() {
    use std::process::Command;

    let output = Command::new("python.exe")
        .arg("test.py")
        .output()
        .unwrap_or_else(|e| { panic!("failed to execute process: {}", e) });

    let s = match String::from_utf8(output.stdout) {
        Ok(v) => v,
        Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
    };

    println!("result: {}", s); //must run "cargo test -- --nocapture" to see output
}

对于任何比这更复杂的事情,您将不得不使用特定于外部语言的 FFI。