回答

收藏

使用 go test 跳过一些测试

技术问答 技术问答 251 人阅读 | 0 人回复 | 2023-09-12

是否可以跳过/排除一些正在运行的测试go test?
- i0 g. Y: c: p- l/ Y( f; \我有相当多的集成测试,它们被调用为标准 go 测试编写的休息服务,并使用go test. 在开发新功能时,有时跳过一些测试是有用的。例如,如果新功能没有部署在测试服务器上,我仍然想运行所有现有的测试(除了新测试)新功能)。
2 d$ x. J2 ?! g0 b' T' W8 r, t我知道-run,但我不想指定我想运行的所有测试,这将是一个很长的列表。同时,我不能编写正则表达式来排除测试。5 ?/ ]: V5 h8 A8 s
另一种选择是不提交不在同一分支运行的测试,但更容易指定要排除的内容。& |! [  R+ V2 A2 }5 Q  E
                                                                " }5 I8 f% Q! q" \3 Y9 a) w
    解决方案:                                                                & j" O4 Z% i( g0 C
                                                                build标签3 e2 Z+ w1 ^7 X
    ┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? lsa_test.go  b_test.go  c_test.go& [* A% J" D4 J6 S3 k$ K8 Q! {
a_test.go :
, |4 V; ^# E0 h
    package tagsimport "testing"func TestA(t *testing.T) {}6 d3 n) g- L1 j5 I( ]
b_test.go :) K, g1 j& g) M& P% u
    //  build !feature1package tagsimport "testing"func TestB(t *testing.T) {}0 s% N( n" J, ^3 _, b! B
c_test.go :
# h7 r4 Z3 v3 l
    //  build !feature1//  build !feature2package tagsimport "testing"func TestC(t *testing.T) {}8 ^0 k; A. T) @7 G" _: M
然后使用-tags参数运行测试:0 n5 J7 _9 N/ m4 j
    ┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? go test -v . | grep PASS:--- PASS: TestA (0.00 seconds)--- PASS: TestB (0.00 seconds)--- PASS: TestC (0.00 seconds)┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? go test -v -tags feature1 . | grep PASS:--- PASS: TestA (0.00 seconds)┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? go test -v -tags feature2 . | grep PASS:--- PASS: TestA (0.00 seconds)--- PASS: TestB (0.00 seconds)2 T% l" `3 @& X, T1 Z
// 更新:不同逻辑:
! `# g0 z, d2 O) i9 A2 ja_test.go:
( T  ~  t8 Y1 D
    //  build allpackage tagsimport "testing"func TestA(t *testing.T) {}$ A, Q1 ]- [3 R5 s
b_test.go:
9 P7 X' {- q4 r% J6 z9 u2 U
    //  build all feature1package tagsimport "testing"func TestB(t *testing.T) {}) o) A3 b) e( X( l( T' z
c_test.go:# h$ h9 l- ^2 e+ X
    //  build all feature2package tagsimport "testing"func TestC(t *testing.T) {}┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? go test -v -tags all | grep PASS:--- PASS: TestA (0.00 seconds)--- PASS: TestB (0.00 seconds)--- PASS: TestC (0.00 seconds)┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? go test -v -tags feature1 | grep PASS:--- PASS: TestB (0.00 seconds)┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? go test -v -tags="feature1 feature2" | grep PASS:--- PASS: TestB (0.00 seconds)--- PASS: TestC (0.00 seconds), w. e. s  ~. c, g
或者您根据名称调用特定测试,例如:
/ _7 n2 w7 x  c0 rd_test.go:, M0 @; |. `+ a+ f# w! E! C! W
    package tagsimport "testing"func TestA1(t *testing.T) {}func TestB1(t *testing.T) {}func TestC1(t *testing.T) {}func TestD1(t *testing.T) {}
    0 S" N' w: W" `& m
输出:- M) g& b" D2 h0 @* S: B) p5 f0 ]
    ┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? go test -run="(A|B)1" -v | grep PASS:--- PASS: TestA1 (0.00 seconds)--- PASS: TestB1 (0.00 seconds)┌─ oneofone@Oa [/t/tst-tag]                                                                                                      └──? go test -run="D1" -v | grep PASS:--- PASS: TestD1 (0.00 seconds)
    " v' R; I* d6 P5 R/ b- l* i
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则