go test工具 go test用于编译单元测试,检测方法函数是否有问题,熟悉下相关参数,可以让测试过程更新快捷 直接运行编译整个项目的测试文件 go test 测试单个测试文件,被测文件和对应单元测试成对出现 ,顺序可调换 go test math.go math_test.go 查看详细结果 go test -v 只测试某个函数,或者某几个函数,-run支持正则,如只测试 TestAddMore ,TestAddMoreAndMore go test -v -run="TestAddMore" 生成test的二进制文件,加 -c 参数 go test -c 执行这个text测试文件 go单元测试 创建一个math.go,写一个add的Func函数,如下 package main func Add(x, y int) int { return x + y } 同级建立一个math_test.go (0.00s) // PASS go单元测试编写原则 单元测试以_test.go结尾,最好就是 被测试文件_test.go, 单元测试函数名必须以 Test开口,如TestAdd 单元测试函数接口一个指向
我们来了解golang的测试之前我们,先了解一下go语言自带的测试工具 go test工具 Go语言中的测试依赖go test命令。 编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。 在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中。 在*_test.go文件中有三种类型的函数,单元测试函数、基准测试函数和示例函数。 go test命令会遍历所有的*_test.go文件中符合上述命名规则的函数,然后生成一个临时的main包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件。
本篇文章主要讲解在 go 语言中进行模糊测试的基础知识。通过模糊测试,随机数据会针对您的测试运行,以尝试找出漏洞或导致崩溃的输入。 想要在 go 中使用模糊测试,需要安装 go1.18beta1 以上版本,具体的安装就不过多叙述了。 运行测试 使用命令 go test 进行测试以保证种子正确,如果您在该文件中有其他测试,您也可以运行go test -run=FuzzReverse,并且您只想运行模糊测试。 FAIL github.com/overstarry/funzz-demo 0.950s 模糊测试时发生故障,导致问题的输入被写入将在下次运行的种子语料库文件中 go test, 小结 本篇文章主要介绍在 go 中如何进行模糊测试。
go 性能测试 基准测试 基准测试主要是通过测试CPU和内存的效率问题,来评估被测试代码的性能,进而找到更好的解决方案。 ("%d",num) } } 基准测试的代码文件必须以_test.go结尾 基准测试的函数必须以Benchmark开头,必须是可导出的 基准测试函数必须接受一个指向Benchmark类型的指针作为唯一参数 ,因为需要反复调用测试的代码,才可以评估性能 ➜ go test -bench=. test 命令,加上 -bench= 标记,接受一个表达式作为参数, .表示运行所有的基准测试 因为默认情况下 go test 会运行单元测试,为了防止单元测试的输出影响我们查看基准测试的结果,可以使用 Testing flags go 测试后面可以跟哪些参数 Testing flags 常用flag -bench regexp:性能测试,支持表达式对测试函数进行筛选。
image.png module github.com/mutex73/ga go 1.12 require ( go.uber.org/atomic v1.4.0 // indirect go.uber.org/multierr v1.1.0 // indirect go.uber.org/zap v1.10.0 ) image.png
好久没有写Go了,这才突然觉察到,又重新复习了一波Go语言的基础语法。顺带着之前留下的好习惯,每个学习的框架和工具都用Java和Go写一遍。 这次也分享一下Go语言的Kafka基础入门,以及生产者的简单测试场景。 我用的是shopify出的sarama,依赖如下github.com/Shopify/sarama v1.38.1。 Go中的go关键字起routine来执行。 如果习惯了Go语言的习惯,对于做测试来说上手要比Java快一些。再买个坑,改天测试一下两者之间的性能差异。理论上Go要比Java好一些。 -- By FunTester FunTester原创专题推荐~ 900原创合集 2021年原创合集 2022年原创合集 接口功能测试专题 性能测试专题 Groovy专题 Java、Groovy、Go、
测试对于互联网应用软件开发来说非常重要,它对软件可靠性保证具有重要意义,通过测试能够尽可能发现并改正软件中的错误,提高软件质量。 这里我们主要讲解Go语言如何实现单元测试和性能测试。 go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,你可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例 单元测试 创建目录test,在目录下创建add.go、add_test.go两个文件,add_test.go为单元测试文件。 使用testing库的测试框架需要遵循以下几个规则如下: 文件名必须是_test.go结尾的,这样在执行go test的时候才会执行到相应的代码 你必须import testing这个包 所有的测试用例函数必须是 *"表示测试全部的压力测试函数 在压力测试用例中,请记得在循环体内使用testing.B.N,以使测试可以正常的运行 文件名也必须以_test.go结尾 在test目录下创建 reflect_test.go
测试分为4个层次 单元测试:对代码进行测试 集成测试:对一个服务的接口测试 端到端测试(链路测试):从一个链路的入口输入测试用例,验证输出的系统的结果 UI测试 常犯的错误: 没有断言。 Go 单元测试工具 gomonkey 引入 gomonkey 有如下好处: 隔离被测代码 加速执行测试 使执行变得确定 模拟特殊情况 功能列表 支持为一个函数打一个桩 支持为一个函数打一个特定的桩序列 可通过命令行参数 -gcflags=-l (go1.10 版本之前)或-gcflags=all=-l(go1.10 版本及之后)关闭内联优化。 gomonkey 对于私有成员方法的打桩失败。 go1.6 版本的反射机制支持私有成员方法的查询,而 go1.7 及之后的版本却不支持,所以当用户使用 go1.7 及之后的版本时,gomonkey 对于私有成员方法的打桩会触发异常。 我们禁用下内联,然后执行,go test -v -gcflags=-l mock_func_test.go 执行结果: === RUN TestFunc expected %v, got %v 2
工具介绍 gomock 是一个 Go 语言的测试框架,在实际项目中,需要进行单元测试的时候。 二、安装 要安装 gomock,你可以使用 Go 包管理器 go get: go install go.uber.org/mock/mockgen@latest 三、使用 首先确保你已经安装了gomock =internal/repository/cache/redismocks/cmdable.mock.go github.com/redis/go-redis/v9 Cmdable @go mod tidy 进行单元测试的验证 三、小黄书Service层单元测试 这里我们已注册接口为例子,代码如下: // gmock/webook/backend/internal/web/user.go func (u /webook/internal/service/mocks/user.mock.go 接着我们编写单元测试,代码如下: // gmock/webook/backend/internal/web/user_test.go
在Go语言中,提供了测试函数性能(CPU和Memory)的测试方法,基准测试。 基准测试主要用来测试CPU和内存的效率问题,来评估被测代码的性能。 使用规则如下所示: 1.基准测试的代码文件必须以_test.go结尾。 2.基准测试的函数必须以Benchmark开头。 3.基准测试函数必须接受一个指向testing.B类型的指针作为唯一参数。 2.用例介绍: 文件结构为:benchmark.go, benchmark_test.go,测试用例的写法,参看右边的测试代码。 3.运行基准测试: $ go test -bench=. (三) | 怎么写Go基准测试(性能测试):https://razeencheng.com/post/go-how-to-write-benchmark.html Go语言实战笔记(二十二)| Go 基准测试:https://www.flysnow.org/2017/05/21/go-in-action-go-benchmark-test.html 1.
简介 testify可以说是最流行的(从 GitHub star 数来看)Go 语言测试库了。testify提供了很多方便的函数帮助我们做assert和错误信息输出。 testify核心有三部分内容: assert:断言; mock:测试替身; suite:测试套件。 1. assert assert 子库提供了便捷的断言函数,可以大大简化测试代码的编写。 熟悉其他语言测试框架的开发者对assert的相关用法应该不会陌生。 3. suite testify提供了测试套件的功能(TestSuite),testify测试套件只是一个结构体,内嵌一个匿名的suite.Suite结构。 测试套件中可以包含多个测试,它们可以共享状态,还可以定义钩子方法执行初始化和清理操作。钩子都是通过接口来定义的,实现了这些接口的测试套件结构在运行到指定节点时会调用对应的方法。
测试与性能 作为一名合格的开发者,不应该在程序开发完之后才开始写测试代码。使用 Go 语言的测试 框架,可以在开发的过程中就进行单元测试和基准测试。 和 go build 命令类似,go test 命 令可以用来执行写好的测试代码,需要做的就是遵守一些规则来写测试。而且,可以将测试无缝 地集成到代码工程和持续集成系统里。 1. 1.1 单元测试 testing是Go语言的一个Package,它提供自动化测试功能,通过 go test 命令能够自动执行如下形式的函数: func TestXxx( *testing .T) **miniredis**是一个纯go实现的用于单元测试的redis server。 依旧使用之前的素数判断的程序./02_testing/test02.go(注意把7对应的值修改为true,不然无法通过测试),现在使用go test工具运行单元测试,和前几次不一样的是,要显示测试覆盖率
1. monkey打桩测试最近遇到一种编码场景,我需要对一个库函数进行测试,但是这个函数的调用可能会影响现网数据,因此需要做一点欺骗。 monkey就是一种常见的单元测试打桩测试工具,给我的感觉有点像Java的动态代理AOP,直接将函数在运行时注入,实现动态的函数,使得目标函数或者方法逻辑跳转到桩实现上。 :图片只是注意要在执行命令的时候加上“-gcflags=-l”的选项,以免出现内联优化:go test -run=TestMyFunc -v -gcflags=-l。 但是在最开始使用Go测试框架的时候发现没有断言这种东西,感觉不可思议,没有断言怎么能成为单元测试。goconvey工具就提供了很好用的单元测试断言支持。 go get github.com/smartystreets/goconvey/convey@v1.7.2还是利用上面的例子,将convey和monkey结合起来使用,改造一下上面的例子,将KPI的返回从
package mytest import ( "fmt" "testing" ) //go本身提供一套轻量级的测试框架,符合规则的测试代码会在测试的时候被自动识别并且执行。 //单元测试源文件的命名规则是在需要测试的包下面创建以"_test"结尾的go文件,形式如[^.] *_test.go //单元测试函数分两类:功能测试函数和性能测试函数,分表以Test和Benchmark为函数名前缀并以*testing.T为单一参数的函数。 下面是例子 //这里的测试文件最好单独放到一个文件夹下面,不放到一个文件夹下面。 可能会执行其他测试文件 //要执行功能测试 执行:go test mytest.go这样就行 //执行性能测试,执行:go test -bench 6_test.go func testAdd(t *
虽然我学习 Go 语言有一段时间了,对于基准测试还没有涉猎,下面就分享Go 语言的基准测试入门实践。 Go 语言的基准测试 Go 语言的基准测试用于评估代码的性能表现,尤其是函数和操作的执行时间。它通过多次运行相同的代码片段,计算平均耗时,提供准确的测试结果。 基准测试实践 编写规范 在开始之前,我们先来看看 Go 语言的基准测试用例编写过程中,需要遵循的一些规范。 在 Go 语言中,编写基准测试时遵循一定的规范是非常重要的,这有助于确保测试的准确性、可读性和可维护性。 循环测试:在基准测试中,使用 b.N 来控制循环次数,确保基准测试运行足够多次,以获取稳定的性能数据。b.N 的值由 Go 的测试框架自动管理,以避免人为干预。
13 Aug 2016 关于单元测试(go) 在最近开发过程中,需要每个模块都写单元测试,由于之前开发没有写单元测试的习惯,突然要求写单元测试,还不知道从何入手 case失败时,打印如下: --- FAIL: TestIsValidHostName (0.00s) demo_test.go:17: case 2: demo_test.go:18: input = host cc demo_test.go:19: expected output = true demo_test.go 附上完整代码: demo.go(需要进行单元测试的代码) package demo import "unicode" func IsValidHostName(hostName string) bool isLower { return false } } return true } demo_test.go(单元测试代码) package demo
++ { a := rand.Intn(100) x = append(x, byte(a+33)) } return x } 测试文件必须是 *_test.go结尾 package ce import "testing" func Test_getmd5(t *testing.T) { for i := 0; i
++ { a := rand.Intn(100) x = append(x, byte(a+33)) } return x } 测试文件必须是 *_test.go结尾 package ce import "testing" func Test_getmd5(t *testing.T) { for i := 0; i
本文实验 gin框架下 测试代码的编写功能代码package mainimport ( "github.com/gin-gonic/gin")func setupRouter() *gin.Engine c.String(200, "pong") }) return }func main() { r := setupRouter() r.Run(":8080")}测试代码 router.ServeHTTP(w, req) assert.Equal(t, 200, w.Code) assert.Equal(t, "pong", w.Body.String())}这里需要注意的是测试代码文件的命名 必须以 *_test.go 格式 , 我当前的是 main_test.go执行测试代码go test -v main_test.go
不论是开源项目,还是日常程序的开发,测试都是必不可少的一个环节。今天我们开始进入 Go 测试模块 testing 的介绍。 差不多两周没有更新 Go 文章了,最近状态不是太好。 测试的编写规则 Go 的测试必须按规则方式编写,不然 go test 将无法正确定位测试代码的位置,主要三点规则。 从最容易想到的通过 main 测试方法到使用 go testing 中编写单元测试,接着介绍了一个测试案例,由此引入了 Go 中推荐 "Table Driven" 的测试方式。 参考 Unit Testing make easy in Go gotests go test 单元测试 testing - 单元测试 Writing table driven tests in Go How to write benchmarks in Go Go 如何写测试用例 ----