16 个版本
0.3.4 | 2021 年 12 月 18 日 |
---|---|
0.3.3 | 2021 年 11 月 17 日 |
0.2.1 | 2020 年 11 月 20 日 |
0.2.0 | 2020 年 5 月 29 日 |
0.0.1 | 2018 年 3 月 30 日 |
#853 in 解析器实现
每月 221 次下载
1.5MB
2K SLoC
测试数据生成
快速测试数据生成!
描述
对于需要为软件测试生成真实测试数据的软件开发团队,这个测试数据生成库是一个轻量级的模块,它通过实现马尔可夫决策过程机器学习来快速轻松地分析样本数据,创建算法,并生成代表性的测试数据,无需持久化数据源、数据清理或远程服务。与其他解决方案不同,这个开源解决方案可以集成到您的测试源代码中,或封装成网络服务或独立实用程序。
问题
为了使测试数据代表生产环境(即真实),您需要执行以下操作之一:
- 将生产环境中的数据加载到非生产环境中,这需要 ETL(例如:掩码、模糊化等)
- 建立一个预先加载的“配置文件”数据库,该数据库是随机抽样的,这需要从另一个测试数据源或生产环境准备样本数据(如上所述的选项 1)
解决方案
通过在测试运行时从之前分析的数据样本中加载算法并在测试运行时生成测试数据,将此库集成到您的软件测试源代码中。
目录
新增功能
以下是新增功能...
0.3.4
关于
测试数据生成
使用 马尔可夫决策过程 机器学习来创建算法,使测试数据生成无需测试数据数据库、安全数据提供(例如:掩码、模糊化)或建立远程服务。
该算法基于以下基础构建:
- 字符模式
- 模式频率
- 字符位置
- 起始和结束字符
- 实体长度(字符串、日期、数字)
使用方法
使用测试数据生成库有多种方法。这完全取决于您的意图。
配置文件
最简单的方法是使用配置文件。`profile`模块提供了在数据样本(字符串)上创建配置文件的功能。一旦创建了一个配置文件,就可以通过调用`pre_generate()`和`generate()`函数来生成数据,顺序如下。
extern crate test_data_generation;
use test_data_generation::profile::profile::Profile;
fn main() {
// analyze the dataset
let mut data_profile = Profile::new();
// analyze the dataset
data_profile.analyze("Smith, John");
data_profile.analyze("Doe, John");
data_profile.analyze("Dale, Danny");
data_profile.analyze("Rickets, Ronney");
// confirm 4 data samples were analyzed
assert_eq!(data_profile.patterns.len(), 4);
// prepare the generator
data_profile.pre_generate();
// generate some data
println!("The generated name is {:?}", data_profile.generate());
// save the profile (algorithm) for later
assert_eq!(data_profile.save(&String::from("./tests/samples/sample-00-profile")).unwrap(), true);
// later... create a new profile from the saved archive file
let mut new_profile = Profile::from_file(&String::from("./tests/samples/sample-00-profile"));
new_profile.pre_generate();
// generate some data
println!("The generated name is {:?}", new_profile.generate());
}
数据样本解析器
如果您正在使用数据样本的CSV文件,那么您可能希望使用数据样本解析器。`data_sample_parser`模块提供了读取样本数据、解析和分析它的功能,以便基于配置文件生成测试数据。
extern crate test_data_generation;
use test_data_generation::data_sample_parser::DataSampleParser;
fn main() {
let mut dsp = DataSampleParser::new();
dsp.analyze_csv_file(&String::from("./tests/samples/sample-01.csv"), None).unwrap();
println!("My new name is {} {}", dsp.generate_record()[0], dsp.generate_record()[1]);
// My new name is Abbon Aady
}
您还可以将数据样本解析器(算法)保存为存档文件(json)...
extern crate test_data_generation;
use test_data_generation::data_sample_parser::DataSampleParser;
fn main() {
let mut dsp = DataSampleParser::new();
dsp.analyze_csv_file(&String::from("./tests/samples/sample-01.csv"), None).unwrap();
assert_eq!(dsp.save(&String::from("./tests/samples/sample-01-dsp")).unwrap(), true);
}
并在以后使用它。
extern crate test_data_generation;
use test_data_generation::data_sample_parser::DataSampleParser;
fn main() {
let mut dsp = DataSampleParser::from_file(&String::from("./tests/samples/sample-01-dsp"));
println!("Sample data is {:?}", dsp.generate_record()[0]);
}
您还可以根据提供的数据样本生成新的csv文件。
extern crate test_data_generation;
use test_data_generation::data_sample_parser::DataSampleParser;
fn main() {
let mut dsp = DataSampleParser::new();
dsp.analyze_csv_file(&String::from("./tests/samples/sample-01.csv"), None).unwrap();
dsp.generate_csv(100, &String::from("./tests/samples/generated-01.csv"), None).unwrap();
}
示例
该库包含以下示例。要运行示例。
- 演示1:演示了库的基本功能,从内置的演示数据集中生成日期和人们的名字。
cargo运行 --示例01_demo
- 演示2:演示了库的基本功能,从CSV文件生成日期和人们的名字。
cargo运行 --示例02_demo
- 演示3:演示了将新分析数据连续添加到现有配置文件的能力。
cargo运行 --示例03_demo
如何贡献
有关如何贡献的详细信息,请参阅CONTRIBUTING文件。
许可证
test-data-generation主要在Apache许可证(版本2.0)的条款下分发。
有关详细信息,请参阅LICENSE-APACHE "Apache License。
依赖关系
~5.5–8MB
~136K SLoC