首页 > 其他分享 >Rust数据驱动-参数化测试

Rust数据驱动-参数化测试

时间:2024-05-14 15:32:28浏览次数:14  
标签:case tests add 测试 test 驱动 Rust mod

需求

假如有以下测试用例,同样的逻辑,我们需要测试多组数据

mod tests {
    #[test]
    fn test_add() {
        let a = 1;
        let b = 2;
        assert_eq!(a + b, 3);
    }
}

一般情况下我们不在用例中使用for循环(即subtests子测试模式)来验证多组数据。

mod tests {
    #[test]
    fn test_add() {
        for a in [1, 2, 3] {
            assert_eq!(a + a, 2 * a);
        }
    }
}

因为这样只是一个用例,而不是一组数据一个用例,同时前面的数据出错也会导致后面的数据测试不到。

使用三方包-实现数据驱动测试

Rust中想要进行参数化测试,可以使用三方包,或者自己编写宏,常用的数据驱动三方包如下:

  • test-case: 支持通过标记进行参数化
  • rtest:支持参数化标记和自定义fixture依赖
  • test-generator: 支持基于文件的数据驱动
  • datatesgt: 支持基于稳定的数据驱动和通过yaml生成多个结构体数据

以test-case为例

mod tests {
    use test_case::test_case;
    #[test_case(1, 1, 2; "1+1应等于2")]
    #[test_case(2, 3, 5; "2+3应等于5")]
    #[test_case(0, 0, 0; "0+0应等于0")]
    fn test_add(a: i32, b: i32, excepted: i32) {
        assert_eq!(a + b, excepted);
    }
}

测试结果如图:
image

也可以在项目中使用cargo test执行所有测试,结果如下:

running 3 tests
test add_test::tests::test_add::_0_0应等于0 ... ok
test add_test::tests::test_add::_1_1应等于2 ... ok
test add_test::tests::test_add::_2_3应等于5 ... ok

test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

自定义宏-实现数据驱动测试

当然,也可以自己编写宏实现,例如:

macro_rules! make_testcase {
    ($test_func_name:ident, $a:expr, $b:expr, $excepted:expr) => {
        #[test]
        fn $test_func_name() {
            assert_eq!($a + $b, $excepted);
        }
    }
}

mod tests {
    make_testcase!(test_add_0, 1, 2, 3);
    make_testcase!(test_add_1, 2, 3, 5);
    make_testcase!(test_add_2, 0, 0, 0);
}

多轮随机数据测试

上面的数据驱动都是基于明确已有的多组数据进行测试的,如果想要使用多轮随机数据进行测试,可通过 test-case + seq + 自定义宏来实现,例如:

macro_rules! make_testcases {
    ($count:expr) => {
        mod tests {
            use rand::Rng;
            use seq_macro::seq;
            use test_case::test_case;

            seq!(N in 0..$count {
                #(#[test_case(N)])*
                fn test_add(index: usize) {
                    let mut rng = rand::thread_rng();
                    let a =  rng.gen_range(0..10);
                    assert_eq!(a + a, 2 * a)
                }
            });
        }
    };
}

mod tests {
    make_testcases!(3);
}

依赖Cargo.toml

[dependencies]
test-case = "*"
seq-macro  = "*"
rand = "*"

执行效果如下:

image

参考:

标签:case,tests,add,测试,test,驱动,Rust,mod
From: https://www.cnblogs.com/superhin/p/18191312/rust-ddt

相关文章

  • 自动生成测试数据
    AutoFixtureAutoFixture是一个用于.NET的测试工具,它允许开发者在单元测试中自动生成随机的测试数据。它支持广泛的数据类型,包括常见的基元类型、复杂对象、集合等。AutoFixture通过使用继承、接口、属性和构造函数等机制来推断如何创建复杂的对象。安装:Install-PackageAut......
  • 企业组网:构建智慧型网络基础设施,驱动未来商业发展
    随着数字化浪潮的汹涌而至,企业组网已不再是简单的网络连接,而是成为推动企业创新、提升竞争力的重要驱动力。智慧型网络基础设施的构建,不仅为企业内部协作提供了高效平台,更为企业拓展外部市场、应对未来挑战奠定了坚实基础。一、智慧型网络:企业发展的核心引擎在智能化、信息化的......
  • 直播预约丨《袋鼠云大数据实操指南》No.2:实时开发,如何成为数据智能化的有效驱动力
    近年来,新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕。面对这些引领经济转型的新兴概念,为了更好地服务于客户并提供切实可行的实践指导,自3月20日起,袋鼠云将推出全新......
  • 单元测试
    实验项目名称:实验四单元测试2          一、 实验目的1、 掌握单元测试技术,并按单元测试的要求设计测试用例。 2、 掌握一种单元测试工具的使用。二、 实验内容自行学习C#或python或C++的其中一种单元测试工具的使用,自选一段单元代码(不少于15行),进行测试。完......
  • java测试-Xpath定位
     Xpath定位调式方法console方式:$x("xpath表达式")xpath基础语法1、/从该节点的子元素选取2、//从该节点的子孙元素选取$x('//*')匹配所有3、*通配符查找所有4、nodename标签名(不是属性)$x('//input')5、..当前节点的父节点$x("//*[@id='ember61'......
  • 软件评测师笔记08--测试用例设计
    决策表(判定表)测试用例设计步骤1、依据软件规格说明:确定规则个数2、列出所有的条件项和动作桩3、输入条件项4、输入动作项,制定初始判定表5、合并相似规则   场景法设计测试用例步骤1、根据规格说明,描述出程序的基本流及各项备选流2、根据基本流和备选流确定场景3、......
  • WEB自动化测试-CSS定位
    CSS相对定位:1、可维护性更强2、语法更加简洁3、可以解决复杂定位场景调试方法:1、进行浏览器的console:2、输入:$(""),输入内有字符串和外层字符串相反,外单内双,外双内单CSS基础语法4方式1、id:$("#site-logo")格式:$("#+id")2、class:(".logo-big")格式:$("......
  • 使用 Playwright 复用 Cookie:简化自动化测试的高效方法
    前言在进行自动化测试时,有时需要在多个测试用例之间共享相同的会话状态。为了实现这一目标,Playwright提供了一种称为Cookie复用的功能,可以让我们在不同的测试用例之间共享同一组Cookie数据。本文将深入介绍如何使用Playwright复用Cookie,并探讨其使用方法和优势。什么是......
  • 模拟手机设备:使用 Playwright 实现移动端自动化测试
    前言在今天的Web开发中,移动设备已经成为用户访问网站的主要方式之一。因此,确保网站在移动设备上的正确显示和功能正常运行至关重要。Playwright是一个强大的自动化测试工具,可以帮助开发人员模拟各种移动设备,并进行自动化测试。本文将深入介绍如何使用Python编写代码来模拟......
  • 使用 Playwright 脚本录制简化自动化测试:完全指南
    前言自动化测试是软件开发中的重要环节,它可以提高测试效率和代码质量。然而,编写自动化测试脚本可能需要花费大量时间和精力。为了简化这一过程,Playwright提供了一个强大的功能,称为脚本录制,它可以帮助开发人员通过交互式操作自动生成测试脚本。本文将深入介绍如何使用Playwrigh......