#testing #group #nextest #grouping #cargo-test #filter #test-runner

test-group

使用宏将测试组织成组,以便在nextest中进行过滤

2个稳定版本

1.0.1 2023年6月17日

#494 in 过程宏

Download history 308/week @ 2024-03-14 358/week @ 2024-03-21 335/week @ 2024-03-28 399/week @ 2024-04-04 391/week @ 2024-04-11 261/week @ 2024-04-18 370/week @ 2024-04-25 336/week @ 2024-05-02 510/week @ 2024-05-09 650/week @ 2024-05-16 427/week @ 2024-05-23 413/week @ 2024-05-30 761/week @ 2024-06-06 755/week @ 2024-06-13 423/week @ 2024-06-20 332/week @ 2024-06-27

2,406 每月下载量

MIT/Apache

7KB

test-group

将Rust测试组织成组,以便在nextest中进行过滤

Crates.io CI Dependencies

Cargo的内置测试运行程序不支持分组测试,这可能会导致一些资源密集型的测试无法一次性运行。 Nextest通过允许您在配置文件中使用过滤表达式定义测试组并限制并发来解决这个问题。

这很有效,但您可能会发现

  • 过滤表达式非常复杂,通常与代码不同步
  • 或者有一个特殊的模块层次结构来处理您的测试,将测试分离到如heavydockerized等模块中 - 这不是最佳实践,因为同一组件的测试可能会根据其“重量”而分布在不同的文件中。

这个小巧的crate允许您像这样在代码中组织测试

#[test_group::group(heavy)]
#[test]
async fn test_foo() {
  // ...
}

#[test_group::group(heavy, flaky)]
#[test]
fn test_bar() {
  // ...
}

这将产生如下代码

mod g64dc {
  use super::*;
  mod heavy {
    use super::*;
    #[test]
    async fn test_foo() {
      // ...
    }
  }
}

mod g3d6f {
  use super::*;
  mod heavy {
    use super::*;
    mod flaky {
      use super::*;
      #[test]
      fn test_bar() {
        // ...
      }
    }
  }
}

因此,这些测试将在nextest中显示为

  • g3d6f::heavy::test_foo
  • g64dc::heavy::flaky::test_bar

允许您在.config/nextest.toml中通过组过滤测试,如下所示

[[profile.default.overrides]]
filter = 'test(::heavy::)'
max-threads = 1

[[profile.default.overrides]]
filter = 'test(::flaky::)'
retries = 3

或者在运行时

cargo nextest run -E 'test(::flaky::)'

注意:像g3d6f这样的额外模块由宏生成,以避免模块名称冲突,因为与impl块不同,您不能在同一文件中拥有多个mod X {}。名称基于测试内容的SHA散列,以确保稳定且唯一。

依赖项

~0.6–1.2MB
~28K SLoC