为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Golang 测试资源管理器或自动测试运行程序时设置机密凭据

使用 Golang 测试资源管理器或自动测试运行程序时设置机密凭据

Go
蓝山帝景 2022-09-26 15:43:22
我正在为一些需要API凭证才能上传和列出数字海洋空间存储桶中的文件的函数进行一些单元测试。这些值已使用 CLI 标志进行设置。我正在使用 Go 测试资源管理器来运行测试,我注意到这两个测试由于凭据为空而失败。有谁知道是否有一种方法可以在测试中设置envars,而不必在执行“go test-run”之前在commmand行中显式设置它们?
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

go 1.17刚刚添加了通过 T.Setenv 在测试期间更改环境变量的功能。


从文档中:


T.Setenv calls os.Setenv(键,值)并在测试后使用“清理”将环境变量还原到其原始值。


这不能用于并行测试。


用法示例:


func getCreds() (u, p string) {

    u, p = os.Getenv("USER"), os.Getenv("PASS")

    return

}


func TestEnv(t *testing.T) {

    t.Setenv("USER", "xxx")

    t.Setenv("PASS", "yyy")


    u, p := getCreds()

    t.Logf("creds: %q / %q", u, p) // will get local testing env settings

}


func TestNoEnv(t *testing.T) {


    u, p := getCreds()

    t.Logf("creds: %q / %q", u, p) // will get nothing

}

https://play.golang.org/p/QBl3hV6WjWA


编辑:从评论中可以看出,您的(或DigialOcean)的测试函数使用命令行选项(如果您在问题中共享一些测试代码,可能会有所帮助)。无论如何,如果是这种情况,调用和传递参数的正确方法是这样的:FlagSetgo test


go test -args -spaces-key="KEY" -spaces-secret="S3CR3T"

如果你想通过ENV VAR,那么你之前的做法是正确的:


SCOREKEEPER_SPACES_KEY="key" SCOREKEEPER_SPACES_SECRET="s3cr3t" go test


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信