Testing 如何在rust中将github操作的参数传递给单元测试
我想使用github secrets将一个秘密API密钥注入到我的单元测试函数中,以防止源代码中存在ay API密钥: 我的(简化的)测试是将APIKEY定义为字符串常量 const APIKEY:&str=“ddbe2befdeadbeefa2d20f09b4a694”; #[测试] fn测试_apikey(){ 断言!(usekey(APIKEY).is_ok()); } 现在,我想从测试可执行文件在运行时获得的参数中获取API密钥:Testing 如何在rust中将github操作的参数传递给单元测试,testing,rust,arguments,github-actions,github-secret,Testing,Rust,Arguments,Github Actions,Github Secret,我想使用github secrets将一个秘密API密钥注入到我的单元测试函数中,以防止源代码中存在ay API密钥: 我的(简化的)测试是将APIKEY定义为字符串常量 const APIKEY:&str=“ddbe2befdeadbeefa2d20f09b4a694”; #[测试] fn测试_apikey(){ 断言!(usekey(APIKEY).is_ok()); } 现在,我想从测试可执行文件在运行时获得的参数中获取API密钥: > cargo test -- ddbe2bef
> cargo test -- ddbe2befdeadbeefa2d20f09b4a694";
但是当我尝试使用以下代码获取第一个参数时:
let args:Vec=env::args().collect();
设apikey=&args[1];
我意识到,每当我为货物测试--
提供参数时,我的测试将不再被处理
以下是不提供参数的调用:
▶ cargo test -v --
[..]
Finished test [unoptimized + debuginfo] target(s) in 0.05s
Running `/home/pat/git/myprg/target/debug/deps/myrg-7e0bdeadbeef95ff`
running 7 tests
test tests::test_cityid ... ok
test tests::test_coordinate ... ok
test tests::test_apikey ... ok
test tests::test_city ... ok
test tests::test_language ... ok
test tests::test_units ... ok
test tests::test_cities ... ok
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
但当我尝试在测试的参数中提供apikey时,不会处理任何测试:
▶ cargo test -v -- ddbe2befdeadbeefa2d20f09b4a694
[..]
Finished test [unoptimized + debuginfo] target(s) in 0.05s
Running `/home/pat/git/myprg/target/debug/deps/myprg-7e0bdeadbeef95ff ddbe2befdeadbeefa2d20f09b4a694";`
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 7 filtered out
您可以看到,连接了apikey的测试被正确调用
我不明白为什么会发生这种情况,深入研究锈蚀测试文档并没有让我找到有用的东西
你有什么建议吗?似乎通过程序参数给出秘密并不是这样做的 相反,请使用以下方法:
fn apikey()->字符串{
匹配std::env::var(“APIKEY”){
Ok(键)=>键,
错误(\u r)=>{
eprintln!(“错误:使用环境有效的API密钥设置API密钥”);
“”.to_字符串()
}
}
}
…我可以通过以下操作将API密钥注入github操作中的测试:
env:
APIKEY:${{secrets.APIKEY}}
工作:
建造:
步骤:
-名称:运行测试
运行:货物测试——详细
谢谢你的帮助 您可以将APIKEY作为机密添加到工作流上的局部变量(
env:API_KEY=${{secrets.APIKEY}}
)中,然后将其作为env变量导入测试函数以使用它。python中的示例:apikey=os.environ['API\u KEY']
。你试过那样吗?谢谢!我可以成功地实现一个从环境中获取密钥的fn apikey()
,正如您所建议的:通过使用std::env::var(“apikey”)