Go语言 仅运行受最近更改影响的测试

hrysbysz  于 2023-08-01  发布在  Go
关注(0)|答案(5)|浏览(114)

有没有一种方法可以只执行那些受Go最近更改影响的测试?我们有一个大型的单元测试套件,现在它开始需要一段时间才能完成。我们认为我们只运行那些在第一次通过时受到代码更改影响的测试。
Python有这样的东西:https://github.com/tarpas/pytest-testmon
在Go中有没有办法做到这一点?

flseospp

flseospp1#

不,在Go中没有办法做到这一点。您所能做的就是将代码拆分为多个包,并一次测试一个包

go test some/thing

字符串
而不是全部

go test ./...

ijxebb2r

ijxebb2r2#

go test在Go 1.10及更新版本中会在包级别自动执行此操作;任何没有变化的包将返回缓存的测试结果,而有变化的包将被重新测试。
如果一个包的测试仍然花费太长时间,那就说明你的测试有问题; Go语言中好的测试通常执行得非常快,这意味着你可能需要回顾测试本身,并结合以下几点:

  • 使用构建标记隔离集成测试。访问外部资源的测试往往会比较慢,因此将它们设置为可选将有助于加快只需要单元测试结果的运行速度。
  • 使用short tests,以便您可以选择更频繁地快速通过。
  • 检查你的单元测试-你是否有不必要的测试或测试用例?您的测试是否过于复杂?您是否正在阅读可以保存在常量中的黄金文件?当你可以通过编程方式创建对象时,你是否将静态JSON反序列化为对象?
  • 优化单元测试。测试仍然是代码,性能差的代码可以进行性能优化。在单元测试中有很多情况下,我们很乐意选择方便性而不是性能,而在生产代码中我们不会这样做,但是如果性能是一个问题,那么必须重新考虑这种选择。
  • 检查您的测试执行-您是否使用了无法缓存的参数到go test,从而阻止了它缓存结果?您是否出于习惯而使用竞争检测器、分析器或代码覆盖率报告(在不必要的情况下)?
vawmfj5a

vawmfj5a3#

Nabaz可能是你正在寻找的。
来自他们的README.md的示例是

export CMDLINE="go test"
export PKGS="./..." # IMPORTANT make sure packages are written SEPERATLY
nabaz test --cmdline $CMDLINE --pkgs $PKGS .

字符串

5f0d552i

5f0d552i4#

你可以使用make。如果测试文件中没有更改,它将不会再次重新运行测试。
第一个月
这就是如何编写Makefile。

# To run commands just use "make" and make function name
# ex- <make run> use for run go run main.go
# Go parameters
execution: echo "** Executing Makefile**"
GOCMD=go

GOINSTALL=$(GOCMD) install
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
GORUN=$(GOCMD) run
BINARY_NAME=reservations
BINARY_UNIX=$(BINARY_NAME)_unix

execute:
    - echo "Running the build - reservations"
    - ~/go/bin/reservations-backend

install:
    - echo "Building the module"
    # will create a executable file at $GOPATH
    - $(GOINSTALL)

run:
    - @echo "Running the application - reservations"
    - $(GORUN) $(BINARY_NAME)

#NOTE: @ before a command will stop showing that command.
test:
    - @echo "** Running Tests **"
    - $(GOTEST) -race ./test -v

字符串

2exbekwf

2exbekwf5#

不能仅对最后编辑的文件重新运行测试。但是有几种优化运行测试的方法。首先,您必须将项目拆分为逻辑分离的包。这将导致一个变更只需要在包中重新运行测试的情况(在大多数情况下)。其次,您可以只对您要更改的包运行测试,方法是输入

go test mypkg

字符串
或者你可以使用build tags。最后一种优化方法是使用short测试功能。

相关问题