Golang中如何多次运行make test?

Golang中如何多次运行make test? 某个代码仓库有一个Makefile,其中包含测试操作。运行“make test”时,会执行一些启用了-race标志的Ginkgo测试。

在不修改该Makefile的情况下,是否可以多次运行它?类似于“go test -count”命令,我还希望它在每次运行前清理缓存。

1 回复

更多关于Golang中如何多次运行make test?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中多次运行make test而不修改Makefile,可以通过以下几种方式实现:

方法1:使用shell循环(推荐)

# 运行3次,每次清理缓存
for i in {1..3}; do
    go clean -testcache
    make test
done

方法2:创建包装脚本

创建一个run-tests-multiple.sh脚本:

#!/bin/bash
COUNT=${1:-1}  # 默认运行1次

for ((i=1; i<=COUNT; i++)); do
    echo "=== 运行第 $i 次测试 ==="
    go clean -testcache
    make test
    
    if [ $? -ne 0 ]; then
        echo "测试失败于第 $i 次运行"
        exit 1
    fi
done

使用方式:

# 运行5次
./run-tests-multiple.sh 5

方法3:使用xargs命令

# 运行4次,每次清理缓存
seq 4 | xargs -I {} sh -c 'go clean -testcache && make test'

方法4:结合time命令进行性能测试

# 运行3次并计时
for i in {1..3}; do
    echo "第 $i 次运行:"
    go clean -testcache
    time make test
    echo "------------------------"
done

方法5:使用Makefile调用(不修改原Makefile)

创建新的Makefile(如Makefile.test):

.PHONY: test-multiple
test-multiple:
    @for i in $$(seq 1 $(COUNT)); do \
        echo "Running test iteration $$i"; \
        go clean -testcache; \
        $(MAKE) -f original.Makefile test; \
        if [ $$? -ne 0 ]; then \
            echo "Test failed on iteration $$i"; \
            exit 1; \
        fi; \
    done

使用方式:

# 运行10次
make -f Makefile.test test-multiple COUNT=10

这些方法都能在不修改原始Makefile的情况下,实现多次运行测试并清理缓存的需求。

回到顶部