一个古老的面试问题:“给你个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测试开发就用这三板斧的更多相关文章

  1. 笔试测试开发题三道(python)

    笔试遇到的三道测试开发题,虽然都不难,但关键还是思路吧!我想在开发东西的时候应该具备的就是思路,有了思路尝试去写,或查相关文档或代码,在此基础上需要不断调整最终达到需求.思路又是在不断练习中获得的. ...

  2. 【Android测试】【随笔】与 “58同城” 测试开发交流

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5384698.html 初衷 一直都有一个这样的想法: 虽然 ...

  3. 什么是测试开发工程师-google的解释

    什么是测试开发工程师-google的解释 “ 软件测试开发工程师[SET or Software Engineer in Test],和软件开发工程师一样是开发工程师,主要负责软件的可测试性.他们参与 ...

  4. Poptest学员之当小厨师变成测试开发工程师

    没开玩笑,这是我们的真实案例.做培训以来,各行各业转行做测试的学员见得太多了.修车的.客服的.销售的.司机的.医护的.前台的等等.职位虽然不分贵贱,但是薪资却分多少.每个人心中都有让家人和自己过上好日 ...

  5. 翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)

    翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)   以下文章是送给来poptest学习测试开发工程师的学员们,很多人想测试工程 ...

  6. 测试开发Python培训:实现屌丝的图片收藏愿望(小插曲)

    测试开发Python培训:实现屌丝的图片收藏愿望(小插曲) 男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追 ...

  7. POPTEST 测试开发 免费培训课程报名

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  8. 测试开发Python培训:模拟登录新浪微博-技术篇

    测试开发Python培训:模拟登录新浪微博-技术篇   一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技 ...

  9. 测试开发Python培训:抓取新浪微博抓取数据-技术篇

    测试开发Python培训:抓取新浪微博抓取数据-技术篇   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的se ...

随机推荐

  1. FPGA回忆记事(一):基于Nios II的LED实验

    实验一:基于Nios II的LED实验 一.    创建Quartus II工程 1.打开Quartus II环境.开始->程序->Altera->Quartus II 9.1. 2 ...

  2. [BAT] cmd 管理员权限 右键菜单 运行

    将下面保存为 *.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\runa ...

  3. Fabric1.4 背书策略 .yam文件

    { identities: [ // 以下几项自动编号为[0,1,2] { role: { name: "member", mspId: "peerOrg1" ...

  4. 小技巧 Mongodb 动态查询 除去 _class 条件

    最近在做通用模板标准示例项目,在使用  spring data jpa  Mongodb 的时候,动态查询会代入 _class条件. 为什么这么做其实也很好理解,写入数据库的数据中是有这个字段的.接受 ...

  5. shell 入门学习

    目录 shell 入门学习 注释 执行与启动 变量 语法 调试 title: shell 入门学习 date: 2019/7/16 15:47:49 toc: true --- shell 入门学习 ...

  6. eXosip的register注册

    转载于:http://blog.sina.com.cn/s/blog_4868f98601018ioh.html 这个测试程序是从eXosip原有的测试程序改造的.原程序是tools 目录下的 sip ...

  7. 利用js对象将iframe数据缓存, 实现子页面跳转后, 返回时不丢失之前填写的数据

    利用js对象将iframe数据缓存, 实现子页面跳转后, 返回时不丢失之前填写的数据 实现描述:将数据存放在js对象中, 然后放在父页面的document对象中, 在页面刷新的时候将父页面的值取出来, ...

  8. 在springMVC框架中集成quartz作业调度器

    1.首先需要导入这几个jar包,如下图: 其中log4j,quartz,slf4j-api,slf4j-log4j12我是在项目中都引用了 2.引用完jar包后,新建一个作业调度类,执行作业调度逻辑, ...

  9. JavaScript(js)笔记

    js注释 JavaScript注释与Java注释相同 // 单行注释 /* 多行注释 */ js五大基本类型:   number(数值型).string(字符串性).boolean(布尔型).unde ...

  10. 关于centOS安装配置xampp那点事

    1.到官网下载centOS对应版本的xampp,应该是以tar.gz为后缀的 2.tar -zxf 下载的包 3.mv lampp /opt 4.service mysqld stop因xampp里自 ...