当前位置: 首页 > news >正文

golang testing使用

testing包服务于自动化测试

基本测试

Table Drvien Test

基于表的测试通过表形式进行测试每种情况的输入和期望输出,从而测试程序的正确性

func TestFib(t *testing.T) {var fibTests = []struct {in       int // inputexpected int // expected result}{{1, 1},{2, 1},{3, 2},{4, 3},{5, 5},{6, 8},{7, 13},}for _, tt := range fibTests {actual := Fib(tt.in)if actual != tt.expected {t.Errorf("Fib(%d) = %d; expected %d", tt.in, actual, tt.expected)}}
}

反馈测试情况接口

  • 跳过测试
    • SkipNow(): 跳过测试
    • Skip(): 跳过测试并输出log
    • Skipf(): 跳过测试并格式化输出log
  • 失败但继续
    • Fail(): 标记测试失败,但继续执行
    • FailNow(): 标记测试失败,不继续执行
    • Error(): 标记测试失败,并输出
    • Errorf(): 标记测试失败,并格式化输出
  • 输出
    • Log(): 输出
    • Logf(): 格式化输出
  • 失败且中断
    • Fatal(): 相当于FailNow() + Log()
    • Fatalf(): 相当于FailNow() + Logf()

Parallel()

Parallel方法表示会和其他带有Parallel方法的测试并行执行

ExampleXXX()

ExampleXXX方法中如果含有Output: 开头的行注释,则会在运行测试期间,将输出和注释中的值相比较

如果是不确定的顺序,则可以以Unordered output: 作为开头

但如果没有这样的注释,这就是一个普通函数,不能被直接运行

压力测试

压力测试方法以func BenchmarkXXX(*testing.B)函数名展现。

函数体格式如下

func BenchmarkHello(b *testing.B) {for i := 0; i < b.N; i++ {// do sth}
}

压力测试会自动调整b.N使得持续足够长时间

重置计时器

如果想要跳过不需要计时的耗时工作,那么可以通过b.ResetTimer()重置计时器

并行测试

如果想并行压力测试,那么可以通过RunParallel实现

func BenchmarkHelloParallel(b *testing.B) {b.RunParallel(func(pb *testing.PB) {// do sth})
}

内存统计

ReportAllocs方法用于打开内存统计功能

输出结果就会变成如下形式

// 方法名		迭代总次数		平均每次迭代时间		平均每次迭代分配字节数		平均每次迭代的内存分配次数
BenchmarkHello        2000000           898 ns/op         368 B/op           9 allocs/op

自定义度量值

ReportMetric(n float64, unit string)汇报自定义度量值

  • 如果度量值是每次迭代的,你应该将其除以 b.N。按照惯例,单位应该以 “/op” 结尾。
  • ReportMetric 会覆盖同一单位的任何先前报告的值。
  • 如果单位是空字符串,或者单位包含任何空格,ReportMetric 会引发 panic。
  • 如果单位是基准测试框架本身通常报告的单位(如 “allocs/op”),ReportMetric 会覆盖该度量值。将 “ns/op” 设置为 0 将禁止该内置度量值。
	testing.Benchmark(func(b *testing.B) {var compares int64for i := 0; i < b.N; i++ {s := []int{5, 4, 3, 2, 1}sort.Slice(s, func(i, j int) bool {compares++return s[i] < s[j]})}// This metric is per-operation, so divide by b.N and// report it as a "/op" unit.b.ReportMetric(float64(compares)/float64(b.N), "compares/op")// This metric is per-time, so divide by b.Elapsed and// report it as a "/ns" unit.b.ReportMetric(float64(compares)/float64(b.Elapsed().Nanoseconds()), "compares/ns")})

子测试

子测试也就是可以在测试中测试,子测试可以共用初始化等公共操作,并可以做父测试执行前的必要操作

func TestSubTest(t *testing.T) {t.Run("sub1", func(t *testing.T) {t.Log("sub1")})t.Run("sub2", func(t *testing.T) {t.Log("sub2")})t.Run("sub3", func(t *testing.T) {t.Log("sub3")})
}

模糊测试

模糊测试方法名为func FuzzXXX(f *testing.F)

func FuzzReverse(f *testing.F) {// 为模糊测试添加用例到种子语料库testcases := []string{"Hello, world", " ", "!12345"}for _, tc := range testcases {f.Add(tc)  // Use f.Add to provide a seed corpus}// 进行模糊测试。对于string类型的参数,将生成随机字符串// 对于本测试中的Reverse方法是可逆的,因此可以通过两次逆行操作来验证其正确性f.Fuzz(func(t *testing.T, orig string) {rev := Reverse(orig)doubleRev := Reverse(rev)if orig != doubleRev {t.Errorf("Before: %q, after: %q", orig, doubleRev)}if utf8.ValidString(orig) && !utf8.ValidString(rev) {t.Errorf("Reverse produced invalid UTF-8 string %q", rev)}})
}

运行模糊测试有go testgo test -fuzz两种方式,前者仅会运行手动添加的用例,而后者则会随机生成数据

值得注意的是如果go test -fuzz执行之后存在运行错误的用例会添加到语料库文件中,那么即使下次执行的是go test也依然会执行语料库文件中的用例

Ref

  1. https://go.dev/doc/tutorial/fuzz
  2. https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter09/09.0.html

相关文章:

golang testing使用

testing包服务于自动化测试 基本测试 Table Drvien Test 基于表的测试通过表形式进行测试每种情况的输入和期望输出&#xff0c;从而测试程序的正确性 func TestFib(t *testing.T) {var fibTests []struct {in int // inputexpected int // expected result}{{1, 1}…...

在Excel中使用正则提取单元格内容

在办公自动化的浪潮中&#xff0c;Excel 作为数据处理的利器&#xff0c;一直在不断进化。最近&#xff0c;我注意到了不坑盒子Office插件一个非常实用的功能更新——bk_regex_string 公式。这个功能对于我们这些日常需要处理大量文本和数据的办公人员来说&#xff0c;无疑是一…...

SQL查询语句(二)逻辑运算关键字

上一篇文章中我们提到了条件查询除了一些简单的数学符号之外&#xff0c;还有一些用于条件判断的关键字&#xff0c;如逻辑判断 关键字AND,OR,NOT和范围查找关键字BETWEEN,IN等&#xff1b;下面我们来介绍一些这些关键字的用法以及他们所表达的含义。 目录 逻辑运算关键字 AND…...

矿山机械自动化中的激光雷达技术探索

在矿山机械自动化技术的快速发展中&#xff0c;激光雷达技术作为其关键组成部分&#xff0c;正发挥着越来越重要的作用。本文将深入探讨激光雷达在矿山机械自动化中的应用&#xff0c;以及其所面临的挑战与未来发展趋势。 一、激光雷达在矿山机械自动化中的应用 激光雷达技术…...

MOSFET场效应管栅极驱动电流的计算

MOSFET驱动 MOSFET场效应管是电压驱动器件&#xff0c;输入有电容&#xff0c;因此为可靠驱动MOSFET&#xff0c;栅极需要施加较大的驱动电流。 功率MOSFET开关模型 该模型显示了影响开关性能的最重要的寄生器件。 栅极所需驱动电流计算公式 一个很重要的参数是计算栅极驱…...

Python 爬虫:Spring Boot 反爬虫的成功案例

前言 在当今数字化时代&#xff0c;网络数据成为了信息获取和分析的重要来源之一。然而&#xff0c;随着网络数据的广泛应用&#xff0c;爬虫技术也逐渐成为了互联网行业的热门话题。爬虫技术的应用不仅可以帮助企业获取有价值的信息&#xff0c;还可以用于数据分析、市场研究…...

计算机毕业设计Python+Vue.js天气预测系统 中国气象质量采集与可视化 天气数据分析 天气可视化 天气大数据 天气爬虫 大数据毕业设计

摘要 随着科技技术的不断发展&#xff0c;人民物质生活质量不断提高&#xff0c;我们越来越关注身边的气象、空气等地理环境。对于普通居民我们会选择合适的气象进行出游&#xff0c;提高精神层面的生活质量&#xff1b;对于企业会关注气象变换状况&#xff0c;来定制相关的生产…...

【busybox记录】【shell指令】tr

目录 内容来源&#xff1a; 【GUN】【tr】指令介绍 【busybox】【tr】指令介绍 【linux】【tr】指令介绍 使用示例&#xff1a; 转换字符 - 默认 转换字符 - 不翻译指定字符数组 此指令目前接触少&#xff0c;用得少&#xff0c;把精力放到其他常用指令上 常用组合指令…...

Mac虚拟机软件哪个好用 mac虚拟机parallels desktop有什么用 Mac装虚拟机的利与弊 mac装虚拟机对电脑有损害吗

随着多系统使用需求的升温&#xff0c;虚拟机的使用也变得越来越普遍。虚拟机可以用于创建各种不同的系统&#xff0c;并按照要求设定所需的系统环境。另外&#xff0c;虚拟机在Mac电脑的跨系统使用以及测试软件系统兼容性等领域应用也越来越广泛。 一、Mac系统和虚拟机的区别 …...

Type-C转音频(USB2.0数据传输)+PD充电芯片乐得瑞LDR6500/LDR6023

LDR6500 USB-C DRP 接口 USB PD 通信芯片概述 Type-C转音频(USB2.0数据传输)PD充电芯片乐得瑞LDR6500LDR6500是乐得瑞科技针对USB Type-C标准中的Bridge设备而开发的USB-C DRP&#xff08;Dual Role Port&#xff0c;双角色端口&#xff09;接口USB PD&#xff08;Power Deliv…...

【busybox记录】【shell指令】expand

目录 内容来源&#xff1a; 【GUN】【expand】指令介绍 【busybox】【expand】指令介绍 【linux】【expand】指令介绍 使用示例&#xff1a; 把制表符转化为空格 - 默认输出 把制表符转化为空格 - 修改制表符转空格的个数 把制表符转化为空格 - 修改制表符转空格的个数…...

软件测试—— 接口测试之通讯流程相关概念

通讯流程 1、协议 通讯规则 2、HTTP协议 协议的一种 3、接口规范文档 如何发请求的要求文档&#xff0c;获取什么响应内容的说明文档&#xff08;相当于菜单&#xff09;...

AT32 雅特力CAN详细使用说明配置细则

CAN 过滤器使用说明 CAN 过滤器相当于关卡&#xff0c;每当收到一条报文时&#xff0c;CAN 要先将收到的报文从这些过滤器上"过滤"一下&#xff0c;能通 过的报文是有效报文&#xff0c;收进相关联 FIFO&#xff08;FIFO0 或 FIFO1&#xff09;&#xff0c;不能通过的…...

【机器学习】集成方法---Boosting之AdaBoost

一、Boosting的介绍 1.1 集成学习的概念 1.1.1集成学习的定义 集成学习是一种通过组合多个学习器来完成学习任务的机器学习方法。它通过将多个单一模型&#xff08;也称为“基学习器”或“弱学习器”&#xff09;的输出结果进行集成&#xff0c;以获得比单一模型更好的泛化性…...

AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…...

鸿蒙内核源码分析(工作模式篇) | CPU的七种工作模式

本篇说清楚CPU的工作模式 工作模式(Working mode) 也叫操作模式&#xff08;Operating mode&#xff09;又叫处理器模式&#xff08;Processor mode&#xff09;&#xff0c;是 CPU 运行的重要参数&#xff0c;决定着处理器的工作方式&#xff0c;比如如何裁决特权级别和报告异…...

5月6(信息差)

&#x1f30d;一次预测多个token&#xff0c;Meta新模型推理加速3倍&#xff0c;编程任务提高17% https://hub.baai.ac.cn/view/36857 &#x1f384; LeetCode 周赛超越 80% 人类选手&#xff0c;推理性能超 Llama3-70B。 ✨ 我国量子计算机实现“四算合一” 实现通算、…...

Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点 关键类&#xff1a;QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…...

springboot拦载器

1、拦载器 package com.Interceptor;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.security.auth.login.Log…...

知道创宇安全服务实习

自我介绍攻防演练讲一下&#xff0c;我讲到了内网利用&#xff0c;用到了frp/nps这种nps直接扫不会有被发现吗&#xff1f;cs搭建在vps&#xff0c;有做什么隐藏吗&#xff0c;&#xff08;端口或者cdn之类的&#xff09;域前置了解吗cs上传的木马免杀了吗问了linux怎么查看进程…...

大模型面试100问:从Transformer到RAG,互联网大厂AI岗位必备!

本文主要针对想要或者正在从事大语言模型、知识库、搜索增强生成&#xff08;RAG&#xff09;的研发、产品和测试同学&#xff0c;在面试中会遇到什么样的问题&#xff1f; 以下主要来自于各位从事大模型研发、产品和测试的伙伴、朋友在面试互联网大厂、AI科技公司的相关AI岗位…...

UE5实战:手把手教你用AIController和PathFollowingComponent实现NPC智能移动(含源码解析)

UE5智能寻路实战&#xff1a;从零构建NPC导航系统 在虚幻引擎5的游戏开发中&#xff0c;AI角色的自主移动能力直接影响着游戏体验的真实感。许多开发者初次接触UE5的AI系统时&#xff0c;往往会被NavigationSystem、AIController和PathFollowingComponent等模块的复杂关系所困扰…...

3分钟搞定OFD转PDF:免费开源工具Ofd2Pdf完整使用指南

3分钟搞定OFD转PDF&#xff1a;免费开源工具Ofd2Pdf完整使用指南 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 还在为打不开OFD文件而烦恼吗&#xff1f;今天我要向你推荐一个完全免费、简单高效的…...

手把手教你用UE5 C++为角色添加动态攀爬:支持移动平台与高度自适应

手把手实现UE5动态攀爬系统&#xff1a;移动平台与高度自适应全解析 在当代3A级动作游戏中&#xff0c;角色与环境的动态交互已成为沉浸感的核心要素。想象一个场景&#xff1a;玩家在摇晃的空中浮岛上追逐目标&#xff0c;需要连续攀爬移动中的平台&#xff1b;或是潜入敌方基…...

告别命令行!用这个免费软件5分钟搞定Abaqus三维Voronoi泡沫模型

五分钟可视化构建Abaqus三维Voronoi泡沫模型&#xff1a;零代码解决方案全指南 在材料科学与工程仿真领域&#xff0c;三维Voronoi泡沫结构的建模一直是学术研究和工业应用的热点。这种仿生多孔结构因其优异的力学性能和轻量化特性&#xff0c;被广泛应用于缓冲材料、骨科植入物…...

Fast-GitHub架构解析:基于Manifest V3的浏览器扩展网络加速方案

Fast-GitHub架构解析&#xff1a;基于Manifest V3的浏览器扩展网络加速方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 技术架…...

点支式玻璃幕墙张拉索杆结构设计原理

点支式玻璃幕墙张拉索杆结构设计原理 一、问题的提出   张拉索杆结构点支式玻璃幕墙在我国使用时间虽然不长,但其发展相当迅猛,2002年达到年使用量约70万m2。我们必须清醒的看到此类结构在国内出现时间不长,同工程应用相比,理论研究相对滞后,对此类结构还缺乏深入研究,…...

告别手动操作:用Python自动化COMSOL仿真的3个关键突破

告别手动操作&#xff1a;用Python自动化COMSOL仿真的3个关键突破 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 你是否也曾为COMSOL的重复性仿真任务感到疲惫&#xff1f;每天花费数小…...

2026年高清家用投影仪推荐:明基W系列领衔

一、前言&#xff1a;高清家用投影仪的核心&#xff0c;在于4K清晰度与真实色彩还原2026年的家用投影仪市场&#xff0c;“高清”早已不是简单的1080P&#xff0c;而是全面迈入4K UHD时代。但真正意义上的“高清家用投影仪”&#xff0c;不仅需要830万像素的真4K分辨率&#xf…...

雀巢冰淇淋在华投资的首家冰淇淋工厂迎来成立40周年 | 美通社头条

、美通社消息&#xff1a;近日&#xff0c;雀巢冰淇淋华南生产基地 —— 广州冷冻食品有限公司迎来成立40周年。该工厂是雀巢冰淇淋在华投资的首家冰淇淋工厂&#xff0c;陪伴一代代华南消费者成长的经典甜筒、飞鱼脆皮等产品皆出自广冻厂。1986年&#xff0c;在改革开放的时代…...