go的测试编写、断言、性能测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: go的测试编写、断言、性能测试

一、要点

源文件以_test结尾:xxx_test.go

测试方法名以Test开头:func TestXXX(t *testing.T){...}

二、例子

package constant_test
 
import "testing"
 
const (
  Monday = iota + 1
  Tuesday
  Wednesday
)
const (
  Readable = 1 << iota
  Writable
  Executable
)
 
func TestConstantTry(t *testing.T) {
  t.Log(Monday, Tuesday, Wednesday)
}
 
func TestConstantTry1(t *testing.T) {
  a := 7 //o111
  t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable)
}
 
 
=== RUN   TestConstantTry
    constant_try_test.go:17: 1 2 3
--- PASS: TestConstantTry (0.00s)
=== RUN   TestConstantTry1
    constant_try_test.go:22: true true true
--- PASS: TestConstantTry1 (0.00s)
PASS
package fib
 
import (
  "fmt"
  "testing"
)
 
//菲波拉数列 变量赋值
func TestFibList(t *testing.T) {
  //var a int = 1
  //var b int = 1
  //var(
  //  a int=1
  //  b=1
  //)
  a := 1
  b := 1
  fmt.Print(a, " ")
  for i := 0; i < 5; i++ {
    fmt.Print(" ", b)
    tem := a
    a = b
    b = tem + a
  }
  fmt.Println()
}
 
func TestExchange(t *testing.T) {
  a := 1
  b := 2
  a, b = b, a
  t.Log(a, b)
}
 
=== RUN   TestFibList
1  1 2 3 5 8
--- PASS: TestFibList (0.00s)
=== RUN   TestExchange
    fib_test.go:32: 2 1
--- PASS: TestExchange (0.00s)
PASS
package try_test
 
import "testing"
 
func TestFirstTry(t *testing.T) {
  t.Log("My first try!")
}
=== RUN   TestFirstTry
    first_test.go:6: My first try!
--- PASS: TestFirstTry (0.00s)
PASS

三、Fail、Fatal

package testing
 
func square(op int) int {
  return op * op
}
package testing
 
import (
  "fmt"
  "testing"
)
 
//Fail,Error:该测试失败,该测试继续,其他测试继续执行
//FailNow,Fatal:该测试失败,该测试中止,其他测试继续执行
func TestSquare(t *testing.T) {
  inputs := [...]int{1, 2, 3}
  expected := [...]int{1, 2, 3}
  for i := 0; i < len(inputs); i++ {
    ret := square(inputs[i])
    if ret != expected[i] {
      t.Errorf("iput is %d,the expected is %d,the actual %d", inputs[i], expected[i], ret)
    }
  }
}
 
func TestErrorInCode(t *testing.T) {
  fmt.Println("start")
  t.Error("Error")
  fmt.Println("end")
}
 
func TestFailInCode(t *testing.T) {
  fmt.Println("start")
  t.Fatal("Error")
  fmt.Println("end")
}
=== RUN   TestSquare
    function_test.go:16: iput is 2,the expected is 2,the actual 4
    function_test.go:16: iput is 3,the expected is 3,the actual 9
--- FAIL: TestSquare (0.00s)
 
=== RUN   TestErrorInCode
start
    function_test.go:23: Error
end
--- FAIL: TestErrorInCode (0.00s)
 
=== RUN   TestFailInCode
start
    function_test.go:29: Error
--- FAIL: TestFailInCode (0.00s)
 
FAIL

四、代码测试覆盖率

go test -v -cover

五、断言

安装依赖

go get -u github.com/stretchr/testify/assert

//使用断言
func TestSquareWithAssert(t *testing.T) {
  inputs := [...]int{1, 2, 3}
  expected := [...]int{1, 4, 9}
  for i := 0; i < len(inputs); i++ {
    ret := square(inputs[i])
    assert.Equal(t, expected[i], ret)
  }
}
=== RUN   TestSquareWithAssert
--- PASS: TestSquareWithAssert (0.00s)
PASS

六、Benchmark性能测试

func BenchmarkConcatStringByAdd(b *testing.B) {
 
  elems := []string{"1", "2", "3", "4", "5"}
  b.ResetTimer()
  for i := 0; i < b.N; i++ {
    ret := ""
    for _, elem := range elems {
      ret += elem
    }
  }
  b.StopTimer()
}
func BenchmarkConcatStringByBytesBuffer(b *testing.B) {
  elems := []string{"1", "2", "3", "4", "5"}
  b.ResetTimer()
  for i := 0; i < b.N; i++ {
    var buf bytes.Buffer
    for _, elem := range elems {
      buf.WriteString(elem)
    }
  }
  b.StopTimer()
}

使用bytes.Buffer处理字符串,性能更优。

goos: windows
goarch: amd64
pkg: jike_introduction/src/ch35/benchmark
cpu: AMD Ryzen 7 4800H with Radeon Graphics
BenchmarkConcatStringByAdd
BenchmarkConcatStringByAdd-16           10294040               117.0 ns/op
PASS
 
goos: windows
goarch: amd64
pkg: jike_introduction/src/ch35/benchmark
cpu: AMD Ryzen 7 4800H with Radeon Graphics
BenchmarkConcatStringByBytesBuffer
BenchmarkConcatStringByBytesBuffer-16           16814658                70.41 ns
/op
PASS

七、BDD

安装依赖

go get -u github.com/smartystreets/goconvey/convey

测试编码

import (
  . "github.com/smartystreets/goconvey/convey"
  "testing"
)
 
func TestSpec(t *testing.T) {
  Convey("Given 2 even number", t, func() {
    a := 2
    b := 4
    Convey("when add two numbers", func() {
      c := a + b
      Convey("Then the result is still even", func() {
        So(c%2, ShouldEqual, 0)
      })
    })
  })
}

运行结果

=== RUN   TestSpec
.
1 total assertion
 
--- PASS: TestSpec (0.00s)
PASS
修改数值,错误结果
=== RUN   TestSpec
x
Failures:
 
  * F:/myCode/goland/jike_introduction/src/ch36/bdd/bdd_spec_test.go 
  Line 15:
  Expected: '0'
  Actual:   '1'
  (Should be equal)
 
 
1 total assertion
 
--- FAIL: TestSpec (0.00s)
 
FAIL

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
2天前
|
测试技术 Go
go语言中测试工具
【10月更文挑战第22天】
10 4
|
10天前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
31 7
|
4天前
|
NoSQL 测试技术 Go
自动化测试在 Go 开源库中的应用与实践
本文介绍了 Go 语言的自动化测试及其在 `go mongox` 库中的实践。Go 语言通过 `testing` 库和 `go test` 命令提供了简洁高效的测试框架,支持单元测试、集成测试和基准测试。`go mongox` 库通过单元测试和集成测试确保与 MongoDB 交互的正确性和稳定性,使用 Docker Compose 快速搭建测试环境。文章还探讨了表驱动测试、覆盖率检查和 Mock 工具的使用,强调了自动化测试在开源库中的重要性。
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
2月前
|
监控 中间件 测试技术
『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!
该文章指出软件测试工程师不仅需要掌握黑盒和白盒测试,还应该了解性能测试的重要性及其实现方法,包括负载测试、压力测试等多种性能测试类型及其在保证软件质量中的作用。
『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!
|
3月前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
3月前
|
SQL 安全 测试技术
[go 面试] 接口测试的方法与技巧
[go 面试] 接口测试的方法与技巧
|
3月前
|
算法 安全 测试技术
Go - 常用签名算法的基准测试
Go - 常用签名算法的基准测试
29 2
|
4月前
|
弹性计算 Prometheus Cloud Native
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
|
3月前
|
测试技术 索引 CDN
hyengine wasm业务性能测试问题之测试设备如何解决
hyengine wasm业务性能测试问题之测试设备如何解决