#测试框架 #BDD #异步 #ATDD

开发 cucumber

Rust的Cucumber测试框架,支持异步操作。完全原生,无需外部测试运行器或依赖。

37个版本

0.21.1 2024年6月16日
0.20.2 2023年12月4日
0.20.1 2023年10月16日
0.20.0 2023年7月10日
0.1.0 2016年3月29日

#13 in 异步

Download history 25768/week @ 2024-05-03 24328/week @ 2024-05-10 39292/week @ 2024-05-17 37756/week @ 2024-05-24 40239/week @ 2024-05-31 42024/week @ 2024-06-07 41445/week @ 2024-06-14 43323/week @ 2024-06-21 34510/week @ 2024-06-28 24797/week @ 2024-07-05 19305/week @ 2024-07-12 20018/week @ 2024-07-19 24527/week @ 2024-07-26 21008/week @ 2024-08-02 21654/week @ 2024-08-09 20041/week @ 2024-08-16

92,657 每月下载量
用于 27 个crate(其中23个直接使用)

MIT/Apache

530KB
10K SLoC

Rust的Cucumber测试框架

crates.io Rust 1.75+ Unsafe Forbidden
CI Rust docs

Cucumber测试框架的Rust实现。完全原生,无需外部测试运行器或依赖。

使用方法

.feature 文件中描述测试场景

Feature: Eating too much cucumbers may not be good for you
    
  Scenario: Eating a few isn't a problem
    Given Alice is hungry
    When she eats 3 cucumbers
    Then she is full

实现 World 特性和描述步骤

use std::time::Duration;

use cucumber::{given, then, when, World as _};
use tokio::time::sleep;

#[derive(cucumber::World, Debug, Default)]
struct World {
    user: Option<String>,
    capacity: usize,
}

#[given(expr = "{word} is hungry")] // Cucumber Expression
async fn someone_is_hungry(w: &mut World, user: String) {
    sleep(Duration::from_secs(2)).await;
    
    w.user = Some(user);
}

#[when(regex = r"^(?:he|she|they) eats? (\d+) cucumbers?$")]
async fn eat_cucumbers(w: &mut World, count: usize) {
    sleep(Duration::from_secs(2)).await;

    w.capacity += count;
    
    assert!(w.capacity < 4, "{} exploded!", w.user.as_ref().unwrap());
}

#[then("she is full")]
async fn is_full(w: &mut World) {
    sleep(Duration::from_secs(2)).await;

    assert_eq!(w.capacity, 3, "{} isn't full!", w.user.as_ref().unwrap());
}

#[tokio::main]
async fn main() {
    World::run("tests/features/readme").await;
}

Cargo.toml 中添加测试

[[test]]
name = "readme"
harness = false  # allows Cucumber to print output instead of libtest

更多示例请参阅书籍(《当前 | 《最新》)。

Cargo功能

  • macros(默认):启用步骤属性和自动连接。
  • timestamps:启用收集所有 Cucumber 事件的时间戳。
  • output-json(隐含 timestamps):启用以 Cucumber JSON格式 输出的支持。
  • output-junit(隐含 timestamps):启用以 JUnit XML报告 输出的支持。
  • libtest(表示timestamps):启用与Rust libtest的JSON输出格式的兼容性。对于IntelliJ Rust插件集成很有用。
  • tracing:启用与tracing的集成。

支持的包

gherkin包实现了Cucumber的完整Gherkin语言。大部分Gherkin语言的特性已经被解析,并通过相关结构体提供访问。

已知问题

  • 解析器中将Scenario Outline视为与OutlineExample相同(gherkin/#19)。

许可协议

本项目许可协议为以下之一

任选其一。

依赖项

~9–21MB
~299K SLoC