5个版本

使用旧的Rust 2015

0.2.0 2022年5月10日
0.1.3 2020年3月25日
0.1.2 2018年6月9日
0.1.1 2018年6月7日
0.1.0 2018年5月14日

285测试 中排名

每月40次下载
junitxml2subunit 中使用

Apache-2.0

25KB
494

Subunit Rust

subunit-rust on Travis CI subunit-rust on crates.io subunit-rust on Appveyor CI

此仓库包含subunit v2协议的Rust实现。它提供了在Rust中本地读写subunit流的接口。subunit v2协议在testing-cabal/subunit仓库中进行了文档化。

读取subunit数据包

读取subunit数据包首先需要一个实现Read特质的对象,其中包含subunit流。parse_subunit()函数用于首先将整个流缓冲到内存中,然后解析内容并返回一个Event结构体的向量。例如,解析来自文件的subunit流

    let mut f = File::open("results.subunit")?;
    let events = parse_subunit(f).unwrap();

在这个例子中,results.subunit文件将使用一个Event结构体在events向量中打开并解析,每个文件中的subunit数据包对应一个Event结构体。

写入subunit数据包

写入subunit数据包首先需要创建一个事件结构来描述数据包的内容。例如

    let mut event_start = Event {
        status: Some("inprogress".to_string()),
        test_id: Some("A_test_id".to_string()),
        timestamp: Some(Utc.ymd(2014, 7, 8).and_hms(9, 10, 11)),
        tags: Some(vec!["tag_a".to_string(), "tag_b".to_string()]),
        file_content: None,
        file_name: None,
        mime_type: None,
        route_code: None
    };

典型的测试事件通常涉及2个数据包,一个标记测试的开始,另一个标记测试的结束

    let mut event_end = Event {
        status: Some("success".to_string()),
        test_id: Some("A_test_id".to_string()),
        timestamp: Some(Utc.ymd(2014, 7, 8).and_hms(9, 12, 0)),
        tags: Some(vec!["tag_a".to_string(), "tag_b".to_string()]),
        file_content: Some("stdout content".to_string().into_bytes()),
        file_name: Some("stdout:''".to_string()),
        mime_type: Some("text/plain;charset=utf8".to_string()),
        route_code: None
    };

然后您希望将数据包写入某个地方。任何实现std::io::Write特质的对象都可以用于数据包,包括诸如文件和TCPStream之类的对象。在这种情况下,我们将使用Vec将其保留在内存中

    let mut subunit_stream: Vec<u8> = Vec::new();

    subunit_stream = event_start.write(subunit_stream)?;
    subunit_stream = event_end.write(subunit_stream)?;

这样,subunit_stream缓冲区将包含该测试事件的subunit流内容。

依赖关系

~1.5MB
~21K SLoC