Go测试开发就用这三板斧
一个古老的面试问题:“给你个XX,你怎么测试?”
时间穿越到9102,Go语言成为了新生代的代名词。老问题变成了“给你Golang程序,你怎么测试?”
看完本文后,读者可以拍着胸脯回答,“一共三种方式,分别是:
• 功能测试
• 性能测试
• 覆盖率测试
具体怎么做,老司机带着大家撸一撸代码,速成一下!
准备活动:开一个Go project,创建一个目录,比如命名“gotest”。
里面放第一个go程序,计算一下圆面积,叫“CircleArea.go”比如看起来这样:
package gotest
import "math"
func GetCircleArea(radius float32) float32 {
return math.Pi * radius * radius
}
首先,功能测试:
编写一个测试它的程序,用Go语言测试Go程序,原汤化原食,没问题吧?^_^
命名有讲究:待测程序名后面加”_test”。原程序叫“CircleArea.go”,那么测试用例程序就叫“CircleArea_test.go”,看起来这样的:
package gotest
import "testing" // 必须引入这个包
func TestGetCircleArea(t *testing.T) {
area := GetCircleArea(4.0)
if area != 50.265484 { // 预期结果
t.Error("测试未通过!")
} else {
t.Log("测试通过")
}
}
执行很简单,在命令行执行:go test -v
结果看起来一目了然:
然后,压力测试:
简单的“压力测试”其实是执行多轮测试。
把刚才的测试用例,套个循环就完成了。
package gotest
import "testing"
const N = 3
func TestGetCircleArea(t *testing.T) {
for i:=0;i<N;i++ {
area := GetCircleArea(4.0)
if area != 50.265484 {
t.Error("测试未通过!")
} else {
t.Log("测试通过")
}
}
}
按之前方式执行:
或者使用”-bench”参数,结果更简洁:
聪明的小伙伴们一定想清楚了,循环次数可以定制,测试用例和预期结果都可以参数化。
程序稍微一修改就可以了。
比较讲究的小伙伴可以再进一步,保留原来的测试用例函数,增加一个用于benchmark测试的,比如:
func BenchmarkGetCircleArea(b *testing.B) {
for i:=0;i<N;i++ {
area := GetCircleArea(4.0)
if area != 50.265484 {
b.Error("测试未通过!")
} else {
b.Log("测试通过")
}
}
}
最后,覆盖率测试
命令行直接执行 go test -cover
结果很通俗易懂:
特别说明:写的代码是如果有用来接住panic跑出的“异常”的,那么测试覆盖率不会达到100%,因为走不到。小伙伴们自己写个例子就知道了。
作 者:Testfan Arthur
出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接
Go测试开发就用这三板斧的更多相关文章
- 笔试测试开发题三道(python)
笔试遇到的三道测试开发题,虽然都不难,但关键还是思路吧!我想在开发东西的时候应该具备的就是思路,有了思路尝试去写,或查相关文档或代码,在此基础上需要不断调整最终达到需求.思路又是在不断练习中获得的. ...
- 【Android测试】【随笔】与 “58同城” 测试开发交流
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5384698.html 初衷 一直都有一个这样的想法: 虽然 ...
- 什么是测试开发工程师-google的解释
什么是测试开发工程师-google的解释 “ 软件测试开发工程师[SET or Software Engineer in Test],和软件开发工程师一样是开发工程师,主要负责软件的可测试性.他们参与 ...
- Poptest学员之当小厨师变成测试开发工程师
没开玩笑,这是我们的真实案例.做培训以来,各行各业转行做测试的学员见得太多了.修车的.客服的.销售的.司机的.医护的.前台的等等.职位虽然不分贵贱,但是薪资却分多少.每个人心中都有让家人和自己过上好日 ...
- 翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)
翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛) 以下文章是送给来poptest学习测试开发工程师的学员们,很多人想测试工程 ...
- 测试开发Python培训:实现屌丝的图片收藏愿望(小插曲)
测试开发Python培训:实现屌丝的图片收藏愿望(小插曲) 男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追 ...
- POPTEST 测试开发 免费培训课程报名
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
- 测试开发Python培训:模拟登录新浪微博-技术篇
测试开发Python培训:模拟登录新浪微博-技术篇 一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技 ...
- 测试开发Python培训:抓取新浪微博抓取数据-技术篇
测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的se ...
随机推荐
- python3 安装pip提示没有distutils.util模块错误的解决
Python3 安装pip 提示ModuleNotFoundError: No module named 'distutils.util' 环境ubutun14,python版本是python3. ...
- 用Python给你的代码上个进度条吧 | 【代码也要面子的】
微信公众号:AI算法与图像处理如果你觉得对你有帮助,欢迎关注.转发以及点赞哦-( ̄▽ ̄-)~ 前言 最近在跑一些代码的时候,很烦...因为有时候不知道这段程序什么时候能执行完,现在执行哪里了,如果报错 ...
- OpenCV.CV_FOURCC
1.c++ - how to use CV_CAP_PROP_FOURCC_ - Stack Overflow.html(https://stackoverflow.com/questions/223 ...
- [AT2062] ~K Perm Counting
AT2602 , Luogu 求对于 \(n\) 个数的排列 , 有多少种方案满足对于所有的 \(i\) , \(|P_i - i| != K\) , 答案对 \(924844033\) 取模 . \ ...
- 【计算机网络】-传输层-Internet传输协议-TCP
[计算机网络]-传输层-Internet传输协议-TCP TCP介绍 在不可靠的互联网上提供一个可靠的端到端字节流 面向连接的.可靠的.端到端的.基于字节流的传输协议 TCP位置 TCP服务模型 应用 ...
- 【第一季】CH08_FPGA_Button 按钮去抖动实验
[第一季]CH08_FPGA_Button 按钮去抖动实验 按键的消抖,是指按键在闭合或松开的瞬间伴随着一连串的抖动,这样的抖动将直接影响设计系统的稳定性,降低响应灵敏度.因此,必须对抖动进行处理,即 ...
- luogu P4762 [CERC2014]Virus synthesis (回文自动机)
大意: 初始有一个空串, 操作(1)在开头或末尾添加一个字符. 操作(2)在开头或末尾添加该串的逆串. 求得到串$S$所需最少操作数. 显然最后一定是由某个偶回文通过添加字符得到的, 那么只需要求出所 ...
- LocalDate与Date转化
// 01. java.util.Date --> java.time.LocalDateTimepublic void UDateToLocalDateTime() { java.util.D ...
- Java并发与多线程教程(3)
Java中的锁 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂.因为锁(以及其它更高级的线程同步机制)是由synchronized同步 ...
- java Lesson08总结
package com.xt.java.FirstExciple.oop; public class NokiaPhone { //成员变量 String name="np001" ...