#集成测试 #测试

test-patience

同步集成测试中应用启动

2 个版本

使用旧的 Rust 2015

0.1.1 2017年3月24日
0.1.0 2017年1月28日

803测试

MIT 许可协议

9KB

test-patience

Build Status Windows build status Crate version Documentation

test-patience 是一个同步集成测试中应用启动和测试本身的工具。

在编写集成测试时,通常需要启动测试中的一部分应用。这可能会花费一些时间,如果测试必须等待应用运行,则在等待固定时间的过程中会浪费宝贵的时间。此外,即使等待固定时间,也可能导致测试失败而不会产生清晰的错误信息。test-patience 会等待直到启动的应用发出已准备好的信号或指定的超时时间已过。

测试需要创建 Server 结构体的实例,该结构体会启动一个 TCP 服务器并返回一个端口号。这个端口号需要发送给需要执行测试的应用。这可以通过环境变量、参数或配置文件来完成。在启动应用后,需要调用 wait 方法。它会阻塞当前运行的线程,直到启动的应用发出成功的启动信号或 timeout 期限已过。

当应用准备好时,它需要创建 Client 结构体的实例,并使用正确的端口号调用 notify 方法。之后,测试的线程将继续执行。

为了在发布构建中禁用启动通知,请使用 cfg!(debug_assertions)(参见 条件编译)。

示例

应用

use std::env;

// initialize application (eg. connect to database server)
let db_connection = get_db_connection();

// notify test in case the environment variable TEST_PATIENCE_PORT is set
if let Some(port) = env::var("TEST_PATIENCE_PORT").ok()
                    .and_then(|s| s.parse::<u16>().ok()) {
    test_patience::Client::notify(port).unwrap();
}

测试

use std::time::Duration;
use std::process;

let server = test_patience::Server::new().unwrap();
let port = server.port().unwrap();

let process = process::Command::new("path/to/application")
    .env("TEST_PATIENCE_PORT", format!("{}", port))
    .spawn()
    .unwrap();

server.wait(Duration::from_secs(5)).unwrap();

无运行时依赖