热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

读《golang标准库》第九章

testing方便进行Go包的自动化单元测试、基准测试nethttphttptest提供测试HTTP的工具testing-单元测试测试用例有四种形式:TestX
  • testing 方便进行 Go 包的自动化单元测试、基准测试

  • net/http/httptest 提供测试 HTTP 的工具

testing - 单元测试

测试用例有四种形式: 

TestXxxx(t testing.T) // 基本测试用例 

BenchmarkXxxx(b testing.B) // 压力测试的测试用例 

Example_Xxx() // 测试控制台输出的例子 

TestMain(m *testing.M) // 测试Main函数

 

gotest的变量有这些:

* test.short : 一个快速测试的标记,在测试用例中可以使用testing.Short()来绕开一些测试

* test.outputdir : 输出目录

* test.coverprofile : 测试覆盖率参数,指定输出文件

* test.run : 指定正则来运行某个/某些测试用例

* test.memprofile : 内存分析参数,指定输出文件

* test.memprofilerate : 内存分析参数,内存分析的抽样率

* test.cpuprofile : cpu分析输出参数,为空则不做cpu分析

* test.blockprofile : 阻塞事件的分析参数,指定输出文件

* test.blockprofilerate : 阻塞事件的分析参数,指定抽样频率

* test.timeout : 超时时间

* test.cpu : 指定cpu数量

* test.parallel : 指定运行测试用例的并行数

 

testing包内的结构

* B : 压力测试

* BenchmarkResult : 压力测试结果

* Cover : 代码覆盖率相关结构体

* CoverBlock : 代码覆盖率相关结构体

* InternalBenchmark : 内部使用的结构

* InternalExample : 内部使用的结构

* InternalTest : 内部使用的结构

* M : main测试使用的结构

* PB : Parallel benchmarks 并行测试使用结果

* T : 普通测试用例

* TB : 测试用例的接口

 

func BenchmarkXxx(*testing.B)

 

func BenchmarkHello(b *testing.B) {

    for i := 0; i

        fmt.Sprintf("hello")

    }

}

 

执行 go test -bench=.,输出:

$ go test -bench=.

BenchmarkFib10-4        3000000           424 ns/op

PASS

ok      chapter09/testing    1.724s

基准测试即压力测试

 

go test -run ''      # Run 所有测试。

go test -run Foo     # Run 匹配 "Foo" 的顶层测试,例如 "TestFooBar"。

go test -run Foo/A=  # 匹配顶层测试 "Foo",运行其匹配 "A=" 的子测试。

go test -run /A=1    # 运行所有匹配 "A=1" 的子测试。

 

BUG 覆盖率

go test -cover

go tool cover

 

httptest - HTTP 测试辅助工具

通过 curl 进行简单的测试:

增:curl -i -X POST http://localhost:2017/topic/ -H 'content-type: application/json' -d '{"title":"The Go Standard Library","content":"It contains many packages."}'

查:curl -i -X GET http://localhost:2017/topic/1

改:curl -i -X PUT http://localhost:2017/topic/1 -H 'content-type: application/json' -d '{"title":"The Go Standard Library By Example","content":"It contains many packages, enjoying it."}'

删:curl -i -X DELETE http://localhost:2017/topic/1

 

通过 httptest 进行测试

https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter09/09.6.html

测试 handlePost 函数。

func TestHandlePost(t *testing.T) {

    mux := http.NewServeMux()

    mux.HandleFunc("/topic/", handleRequest)

    reader := strings.NewReader(`{"title":"The Go Standard Library","content":"It contains many packages."}`)

    r, _ := http.NewRequest(http.MethodPost, "/topic/", reader)

    w := httptest.NewRecorder()

    mux.ServeHTTP(w, r)

    resp := w.Result()

    if resp.StatusCode != http.StatusOK {

        t.Errorf("Response code is %v", resp.StatusCode)

    }

}

 

还有很多优秀的第三方测试包,比如 

https://github.com/stretchr/testify 用于增强 testing 进行单元测试,进行 mock 等,有机会会写文章介绍它的使用;

再比如,https://github.com/onsi/ginkgo 用于集成测试等等。

 


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
author-avatar
手机用户2502931241
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有