Go项目Github Actions执行go test报127.0.0.1:8069连接拒绝如何解决
问题成因
- 测试执行失败的核心原因是
github.com/Zaprit/Reflow/technicapi包的测试代码尝试请求本地8069端口的HTTP服务,但GitHub Actions的运行环境中没有提前启动该端口对应的依赖服务,因此触发连接被拒绝的报错,和IPv6支持无关,你之前的排查方向有误。 - 你当前贴出的CI配置只有代码检查(golangci-lint)的逻辑,没有添加测试执行、依赖服务启动的相关步骤,也是测试无法正常运行的直接原因。
解决方案
你可以根据测试的类型选择以下任意一种方案处理:
- 单元测试场景:Mock外部依赖
用Go标准库的net/http/httptest或者第三方Mock工具模拟你要调用的8069端口接口的返回值,单元测试不需要真实发起网络请求,也不需要依赖外部服务运行,从根源避免环境依赖问题。 - 集成测试场景:补充CI依赖服务启动步骤
如果你跑的是集成测试必须依赖真实服务运行,需要修改你的CI配置,在执行go test前先启动对应8069端口的服务,同时补充测试执行的步骤,修改后的CI示例如下:# This lints and tests the Reflow project name: Lint & Test on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Go environment uses: actions/setup-go@v2.1.3 with: go-version: 1.17.1 stable: true token: ${{ github.token }} - name: Run golangci-lint uses: golangci/golangci-lint-action@v2.5.2 # 新增:启动依赖服务 - name: Start dependent 8069 port service run: | # 替换为你实际的服务启动命令 go run your/service/path/main.go & # 等待服务完成启动 sleep 10 # 新增:执行测试生成覆盖率 - name: Run test with coverage run: go test -race -coverprofile=coverage.txt -covermode=atomic ./... - 临时跳过测试场景:给集成测试加标签过滤
如果你暂时不需要在CI跑这类依赖外部服务的集成测试,可以给对应的测试文件加上构建标签,比如在测试文件头部添加//go:build integration,执行测试时添加参数过滤:go test -tags "!integration" -race -coverprofile=coverage.txt -covermode=atomic ./...,即可跳过这类集成测试,避免报错。
内容的提问来源于stack exchange,提问作者Henry Asbridge
相关产品推荐
相关产品推荐

