对 Go 程序进行可靠的性能测试
Go 程序进行可靠的性能测试 Changkun Ou https://changkun.de/s/gobench/ Go 夜读系列 |talkgo.org|Talk Go|第 83 期 March 26, 2020 # Go 1.13 / 1.14 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 主要内容 ● 可靠的测试环境 ● benchstat Go 夜读 · 对 Go 程序进行可靠的性能测试 教科书式的性能测试方法论 3 在《Software Testing: Principles and Practices》一书中归纳的性能测试方法论: 1. 搜集需求 2. 编写测试用例 3. 自动化性能测试用例 4. 执行性能测试用例 5. 分析性能测试结果 6. 性能调优 7. 性能基准测试(Performance Benchmarking) 向客户推荐合适的配置 可靠的测试环境 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 什么是可靠的性能基准测试环境 5 影响测试环境的软硬件因素 ● 硬件:CPU 型号、温度、IO 等 ● 软件:操作系统版本、当前系统调度的负载等 指导思想 ● 单次测量结果毫无意义,统计意义下可对比的结果是关键 ○ 分析测试的场景、多次测量、决定统计检验的类型0 码力 | 37 页 | 1.23 MB | 1 年前31.3 七牛如何做HTTP服务测试
七牛如何做 HTTP服务测试? 许式伟 2015-4-18 HTTP服务测试 • 单元测试 – 某个独立子服务的测试 • 集成测试 – 整个集群对外业务API的测试 • Stage环境 • Product环境 怎么测? • 七牛早期做法 – 实现服务逻辑(Service Implementation) Implementation) – 基于客户端SDK写测试案例(Test Case) • 问题 – 客户端SDK修改导致测试案例编不过 – 客户端SDK通常是使用方友好,而不是测试方友好 – 让服务端与客户端SDK耦合,容易过早陷入客户端SDK如何抽象 更合理的细节,而不能专注于测试服务逻辑本身 换个角度 • 直接基于协议测试呢? – 比如,基于 http Client 类直接写测试案例 • 问题 – 代码相对冗长 – 业务逻辑表达不直观 • 写一些辅助函数能够略为改观,不过会有逐步写测试专用SDK的倾向 七牛当前做法 • 引入 httptest DSL 文法 • 更接近基于 http.Client 写测试案例的思路 – 但努力让代码更直白体现测试用意 Hello0 码力 | 27 页 | 422.11 KB | 1 年前3大规模高性能区块链架构设计模式与测试框架-李世敬
大规模高性能区块链架构 设计模式与测试框架 Gopher Meetup 深圳站 2021 年 8 ⽉ 21 号 趣�科技 李世敬 目录 区块链概述 01 大规模高性能区块链架构设计介绍 02 基于Go插件的区块链性能测试工具 03 写在最后 04 区块链概述 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 智慧政务 物联⽹ 能源电⼒ 跨境贸易 ⼯业物联⽹ 智慧城市 ... 不同于完全开 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 智慧政务 物联⽹ 能源电⼒ 跨境贸易 ⼯业物联⽹ 智慧城市 ... 不同于完全开0 码力 | 39 页 | 56.58 MB | 1 年前3Go 入门指南(The way to Go)
goroutine 和 channel 时有多少种不同的模 Go入门指南 - 1 - 本文档使用 看云 构建 式,如何在 Go 语言中使用谷歌 API,如何操作内存,如何在 Go 语言中进行程序测试和如何使用模板来 开发 Web 应用这些高级概念和技巧。 在本书的第一部分,我们将会讨论 Go 语言的起源(第 1 章),以及如何安装 Go 语言(第 2 章)和开发 环境(第 3 章)。 在本书的第二部分,我们将会带领你贯穿 章可以作为你在开发时的一个参考手册, 因为当中包含了众多的有价值的代码片段以及相关的解释说明。 最后要说明的是,你可以通过完整的索引来快速定位你需要阅读的章节。书中所有的代码都在 Go1.4 版本 下测试通过。 这里有一段来自在 C++、Java 和 Python 领域众所周知的专家 Bruce Eckel 的评论: “作为一个有着 C/C++ 背景的开发者,我在使用 Go 语言时仿佛呼吸到了新鲜空气一般,令人心旷神 一个程序的时间只需要数百毫秒到几秒。作为大量使用 C++ 来构建基础设施的谷歌来说,无疑从根本上 摆脱了 C++ 在构建速度上非常不理想的噩梦。这不仅极大地提升了开发者的生产力,同时也使得软件开 发过程中的代码测试环节更加紧凑,而不必浪费大量的时间在等待程序的构建上。 依赖管理是现今软件开发的一个重要组成部分,但是 C 语言中“头文件”的概念却导致越来越多因为依赖 关系而使得构建一个大型的项目需要长达几个0 码力 | 380 页 | 2.97 MB | 1 年前3Go 入门指南(The way to Go)
strings 和 strconv 包 4.8 时间和日期 4.9 指针 - 2 - 本文档使用 书栈(BookStack.CN) 构建 第5章:控制结构 5.1 if-else 结构 5.2 测试多返回值函数的错误 5.3 switch 结构 5.4 for 结构 5.5 Break 与 continue 5.6 标签与 goto 第6章:函数(function) 6.1 介绍 7.3 For-range 结构 7.4 切片重组(reslice) 7.5 切片的复制与追加 7.6 字符串、数组和切片的应用 第8章:Map 8.1 声明、初始化和 make 8.2 测试键值对是否存在及删除元素 8.3 for-range 的配套用法 8.4 map 类型的切片 8.5 map 的排序 8.6 将 map 的键值对调 第9章:包(package) 9.1 第11章:接口(interface)与反射(reflection) 11.1 接口是什么 11.2 接口嵌套接口 11.3 类型断言:如何检测和转换接口变量的类型 11.4 类型判断:type-switch 11.5 测试一个值是否实现了某个接口 11.6 使用方法集与接口 11.7 第一个例子:使用 Sorter 接口排序 11.8 第二个例子:读和写 11.9 空接口 11.10 反射包 11.11 Printf0 码力 | 466 页 | 4.44 MB | 1 年前3Go Web编程
加密和解密数据 9.7 小结 10.国际化和本地化 10.1 设置默认地区 10.2 本地化资源 10.3 国际化站点 4 10.4 小结 11.错误处理,调试和测试 11.1 错误处理 11.2 使用GDB调试 11.3 Go怎么写测试用例 11.4 小结 12.部署与维护 12.1 应用日志 12.2 网站错误处理 12.3 应用部署 12.4 备份和恢复 12.5 小结 13.如何设计一个Web框架 来查看它们: 图1.3 Go命令显示详细的信息 这些命令对于我们平时编写的代码非常有用,接下来就让我们了解一些常用的命令。 go build go build 这个命令主要用于测试编译。在包的编译过程中,若有必要,会同时编译与之相关联的包。 如果是普通包,就像我们在1.2节中编写的mymath包那样,当你执行go build之后,它不会产生任何文件。 如果你需要在$GOP test(.exe) 由go test -c产生 MAINFILE(.exe) 由go build MAINFILE.go产生 我一般都是利用这个命令清除编译文件,然后github递交源码,在本机测试的时候这些编译文件都是和系统相关的, 但是对于源码管理来说没必要 go fmt go fmt 有过C/C++经验的读者会知道,一些人经常为代码采取K&R风格还是ANSI风格而争论不休。在go中,代码则有标准的风0 码力 | 295 页 | 5.91 MB | 1 年前3Go持续集成
每次集成会经过自动构建(包括自动测试) 的 检验,以尽快发现集成错误。 — Martin Fowler 简单 激情 速度快 聚焦 极致 可信赖 持续集成的好处 1. 快速发现修复错误 2. 降低风险 3. 持续发布 4. 减少代码审核时间 5. 减少对个体依赖 简单 激情 速度快 聚焦 极致 可信赖 石器时代 简单 激情 速度快 聚焦 极致 可信赖 分享惨案经历 1. 无单元测试,手工集成测试 无单元测试,手工集成测试 2. 测试用例300多个,需要一个星期 3. 面对业务压力,规则形同虚设 4. 深夜事故 简单 激情 速度快 聚焦 极致 可信赖 原有开发体系的问题 1. 迭代周期漫长 2. 质量缺乏保障 3. 系统可维护性差 4. 开发过程透明度差 简单 激情 速度快 聚焦 极致 可信赖 青铜时代 简单 激情 速度快 聚焦 极致 可信赖 迈出第一步 1. 重构 2. 添加单元测试 添加单元测试 3. 自动化测试系统 简单 激情 速度快 聚焦 极致 可信赖 青铜时代 通知测试 Email测试报告 简单 激情 速度快 聚焦 极致 可信赖 还有问题 1. 自动化测试不能并行 2. 开发过程透明度无改善 3. 代码审核形同虚设 4. 部署过程依然没有完全自动化 简单 激情 速度快 聚焦 极致 可信赖 简单 激情 速度快 聚焦 极致 可信赖 持续…… 1.持续集成0 码力 | 39 页 | 10.74 MB | 1 年前32.游戏战中陪伴助手微服务架构设计与应用
脚本 如何新增策略 初始方案——Lua 脚本 如何修改策略 初始方案——Lua 方案 显而易见的问题 范畴 问题 需求 - 所有策略需求都需要走开发流程 - 迭代周期长:2周开发、测试、上线 运营 - 变更困难,修改策略 = 修改代码 开发 - 代码低内聚,交接难度大 扩展 - 没有考虑扩展 功能 - 难以实现战略推荐 - 早期:先考虑有无 - 引入推荐系统 系统思考——如何评判方案的好坏? 后台技术栈 Lua Go 代码理解成本 >10000 行代码 + 1500 行注释 135 行代码 + 82 行注释 + 开发模式文档 交接周期 未知(未交接过) 1 天(几位开发参与过) 持续测试 无 有 性能和成本优化 第四部分 贵 - 部署:腾讯云 TKE(Tencent Kubernetes Engine);微服务 - 上线前压测: - 预估 CPU:20,000+ 核,其中推荐系统接近 最终效果:2000 核 => 1000 核 DevOps 建设 第五部分 提供针对 token 的测试条件 可测试性建设 提供针对 token 的测试条件 可测试性建设 代码重构或新 token 插件不能影响原有逻辑 自动化测试 - 基于已有的 CI / CD 流水线,加入 CT(持续测试)功能 - 自动化检查、告警、发布 批量对局重放 + token 差异比对输出 总结 & QA0 码力 | 47 页 | 11.10 MB | 1 年前3Golang 入门笔记
只能写在变量的后面,不能写在变量的前面,即,只有 a++, a-- 没有 ++a, --A 错误演示 5. Golang 的设计者去掉了 c/java 中自增和自减的容易混淆的写法,让golang 更加简介,统一(强制性) 测试题目 题目 1. 假如还有 97 天放假,请问:xx 个星期零 xx 天 2. 定义一个变量保存华氏摄氏度,华式摄氏度转换摄氏度的公式为:5/9*(华氏摄氏度-100), 请求出华氏摄氏度的对应摄氏度温度。 类型数据只允许取值 ture 和 flase 2. bool 类型占 1个字节 3. bool 类型适用与逻辑运算,一般用于程序流程控制 运用场景 if 条件控制语句 for 循环控制语句 测试案例 2. 数字类型 int , float32, float64 , Go 语言支持整型和浮点数字,并且支持复数,其中位运算采用补码 数字类型 uint8 无符号 8 位整性 0 - 256 的字符串不同,它是由字节组成的。 如果需要存储单个的字符串字母,一般使用 byte 来保存。 我们直接输出 byte 的时候他是直接输出了字符的码值 如果我们需要输出对应的字符,需要格式化输出 测试案例 实验案例 注意事项(使用细节) 1. Golang 字符串的字节使用 UTF-8编码进行表示 Unicode 文本,这样golang 统一适用了 utf-8 变么,就能避免了中文乱码的问题0 码力 | 2 页 | 511.29 KB | 1 年前3Hello 算法 1.0.0b1 Golang版
写在前面 hello‑algo.com 4 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注释、内容 注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.3. 在动画图解中高效学习 视频和图片相比于文字的信息密度和结构化程度更高,更容易理解。在本书中,知识重难点会主要以动画、图 容(一般在图的上方)对齐到 图中内容,综合来理解。 Figure 0‑3. 动画图解示例 0.2.4. 在代码实践中加深理解 本书的配套代码托管在GitHub 仓库,源代码包含详细注释,配有测试样例,可以直接运行。 ‧ 若学习时间紧张,建议至少将所有代码通读并运行一遍。 ‧ 若时间允许,强烈建议对照着代码自己敲一遍。相比于读代码,写代码的过程往往能带来新的收获。 0. 写在前面 hello‑algo 析,以及优化算法设计。 2.1.2. 效率评估方法 实际测试 假设我们现在有算法 A 和 算法 B ,都能够解决同一问题,现在需要对比两个算法之间的效率。我们能够想到 的最直接的方式,就是找一台计算机,把两个算法都完整跑一遍,并监控记录运行时间和内存占用情况。这种 评估方式能够反映真实情况,但是也存在很大的硬伤。 难以排除测试环境的干扰因素。硬件配置会影响到算法的性能表现。例如,在某台计算机中,算法0 码力 | 190 页 | 14.71 MB | 1 年前3
共 41 条
- 1
- 2
- 3
- 4
- 5