一个古老的面试问题:“给你个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. .Netcore 2.0 Ocelot Api网关教程(9)- QoS

    本文介绍Ocelot中的QoS(Quality of Service),其使用了Polly对超时等请求下游失败等情况进行熔断. 1.添加Nuget包 添加 Ocelot.Provider.Polly  ...

  2. ansible实践

    ansible常用module ansible-doc -l List available modules -s Show playbook snippet for specified module( ...

  3. VScode中文乱码的问题

    在vscode中打开文件,文件中的中文乱码了.解决方案: 1.vscode右下角,点击utf-8 (选择编码) 2.出现下面选择框,点击第一个 3.输入gb2312,如图选择 4.此刻解决乱码问题了. ...

  4. python遍历文件夹中所有文件夹和文件,os.walk

    python中可以用os.walk来遍历某个文件夹中所有文件夹和文件. 例1: import os filePath = 'C:/Users/admin/Desktop/img' for dirpat ...

  5. How To Use Rocketbots As A Dialogflow CRM

    Ever wished you had a CRM for Dialogflow? We did too, so we built one. This is a best practices arti ...

  6. shell学习笔记1-文件安全与权限

    1,创建文件的用户和他所属的组拥有该文件,文件的属主可以设定谁具有读.写.执行该文件的权限,根用户可以改变任何普通用户的设置. 2,一个文件一经创建,就具有三种访问权限:读(可以显示该文件的内容).写 ...

  7. Java学习笔记-Lambda表达式

    Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数是接口)的实例 意义 自从Java 8开始,Java支持Lambda表达 ...

  8. C#规范整理·异常与自定义异常

    这里会列举在C#中处理CLR异常方面的规范,帮助大家构建和开发一个运行良好和可靠的应用系统. 前言   迄今为止,CLR异常机制让人关注最多的一点就是"效率"问题.其实,这里存在认 ...

  9. Junk-Mail Filter 【并查集虚父节点】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2473 题目大意: n个点,m个操作,操作时,输入M a b,表示a, b在一个集合里, 输入S a 表 ...

  10. TensorFlow 官方文档 Programmer's Guide 中文翻译 —— 引言

    TensorFlow Programmer's Guide (Introduction) TensorFlow 编程手册 (引言) #(本项目对tensorflow官网上给出的指导手册(TF1.3版本 ...