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

2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试


🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁

🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐

🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:

☁️🐳 Go语言开发者必备技术栈☸️:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥


在这里插入图片描述

文章目录

    • 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
  • 2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试
    • 🐯 摘要
    • 🌟 引言
    • 📚 正文
      • 🌐 开始使用Fuzzing
      • 🛠️ 编写Fuzz测试
      • 🚀 期望与限制
      • 📅 下一步
    • 📌 总结
    • 🔜 下一篇预告
  • 原创声明

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试

🐯 摘要

嘿,猫头虎博主在这里!今天,我们来聊聊Go生态中的一个激动人心的进展 — Fuzzing技术的Beta测试。对于热爱深入探索和挖掘技术细节的你,这将是一个不可错过的话题!

🌟 引言

2021年6月3日,Katie Hockman和Jay Conrod宣布,Go语言原生Fuzzing技术已经准备好进行Beta测试。Fuzzing是一种自动化测试方法,通过不断变化程序输入来发现潜在的问题,例如panic或bug。这种半随机的数据变异能够揭示现有单元测试可能错过的新代码覆盖区域,并发现那些通常不易察觉的边缘案例bug。由于Fuzzing能够触及这些边缘案例,它对于发现安全漏洞和漏洞尤其有价值。

📚 正文

🌐 开始使用Fuzzing

首先,你需要按照以下步骤安装并运行:

$ go install golang.org/dl/gotip@latest
$ gotip download

这会从master分支构建Go工具链。完成后,gotip命令可以替代go命令使用。现在,你可以运行如下命令:

$ gotip test -fuzz=Fuzz

🛠️ 编写Fuzz测试

Fuzz测试必须在*_test.go文件中作为函数FuzzXxx形式存在。该函数必须传递一个*testing.F参数,类似于TestXxx函数中传递的*testing.T参数。

以下是针对net/url包的Fuzz测试示例:

//go:build go1.18
// +build go1.18package fuzzimport ("net/url""reflect""testing"
)func FuzzParseQuery(f *testing.F) {f.Add("x=1&y=2")f.Fuzz(func(t *testing.T, queryStr string) {query, err := url.ParseQuery(queryStr)if err != nil {t.Skip()}queryStr2 := query.Encode()query2, err := url.ParseQuery(queryStr2)if err != nil {t.Fatalf("ParseQuery failed to decode a valid encoded query %s: %v", queryStr2, err)}if !reflect.DeepEqual(query, query2) {t.Errorf("ParseQuery gave different query after being encoded\nbefore: %v\nafter: %v", query, query2)}})
}

你可以在pkg.go.dev上关于Fuzzing的内容,包括使用Go进行Fuzzing的概述以及新的testing.F类型的godoc文档。

🚀 期望与限制

这是一个仍处于Beta阶段的新功能,因此你应该预期会遇到一些bug和功能不完整的情况。可以通过查看标有“fuzz”标签的问题跟踪器来了解现有的bug和缺失功能。

请注意,Fuzzing在运行时可能会消耗大量内存,并可能影响你的机器性能。go test -fuzz默认在并行的$GOMAXPROCS进程中运行Fuzzing。你可以通过显式设置go test-parallel标志来降低Fuzzing时使用的

进程数量。如果想获取更多信息,可以运行gotip help testflag阅读go test命令的文档。

同时要注意,Fuzzing引擎在运行时会将扩展测试覆盖范围的值写入$GOCACHE/fuzz目录下的Fuzz缓存。目前对Fuzz缓存中可写入的文件数量或总字节数没有限制,因此它可能占用大量存储空间(例如几GB)。你可以通过运行gotip clean -fuzzcache来清除Fuzz缓存。

📅 下一步

该功能将从Go 1.18版本开始提供。

如果你遇到任何问题或对功能有任何建议,请提交问题。

对于该功能的讨论和一般反馈,你也可以参与Gophers Slack中的#fuzzing频道。

祝你Fuzzing愉快!

知识点说明
Fuzzing技术自动化测试方法,用于发现潜在的panic或bug
Beta测试Go原生Fuzzing技术的测试阶段
Fuzz测试编写需在*_test.go文件中作为FuzzXxx函数存在
资源消耗Fuzzing可能消耗大量内存和存储空间
Go版本支持从Go 1.18版本开始提供

📌 总结

本文被猫头虎的Go生态洞察专栏收录,详情点击这里。

🔜 下一篇预告

敬请期待下一篇文章:The Go Collective on Stack Overflow,我们将深入探讨Go语言在Stack Overflow上的集体智慧和互助精神。不见不散!�

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak
    在这里插入图片描述

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

学习复习Go生态

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。

http://www.lryc.cn/news/249418.html

相关文章:

  • 全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性
  • 句子相似度计算
  • 高级IO select 多路转接实现思路
  • C++学不会?一篇文章带你快速入门
  • 【加密相册】 隐私协议
  • 超越基础:释放 Systemd 的全部潜力【systemd 二】
  • Flask学习二:项目拆分、请求与响应、cookie
  • 6、Qt延时的使用
  • 《Effective C++》条款26
  • np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?
  • 1 时间序列模型入门: LSTM
  • 1-Python与设计模式--单例模式
  • Rust之构建命令行程序(一):接受命令行参数
  • Go 谈论了解Go语言
  • 《C++PrimerPlus》第9章 内存模型和名称空间
  • uniapp上架app store详细攻略
  • 面试:线上问题处理
  • Vue3中快速Diff算法
  • ROS2+STM32小车红外对射光电计数器模块资料
  • Android设计模式--桥接模式
  • 1、分布式锁实现原理与最佳实践(一)
  • Autosar通信实战系列03-NM模块要点及其配置介绍
  • Golang模块管理功能
  • 从零构建属于自己的GPT系列1:文本数据预处理、文本数据tokenizer、逐行代码解读
  • scipy 笔记:scipy.spatial.distance
  • java video audio encoder
  • TypeScript 中声明类型的方法
  • 显示器校准软件BetterDisplay Pro mac中文版介绍
  • Element UI 走马灯 实现鼠标滚动切换页面
  • 在Docker上部署Springboot项目