一个古老的面试问题:“给你个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. Caché,Cache数据库下载

    Caché数据库主要用于医疗领域,国内的开发人员比较少接触,使用环境相对封闭,前段时间刚才用到,下载也费了许多时间,特记录一下,帮助那些需要的人. 顺便说一下,TreeSoft数据库管理系统,目前支持 ...

  2. Java工程师学习指南第5部分:Java网络编程与NIO

    本文整理了微信公众号[Java技术江湖]发表和转载过的Java网络编程相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧. 深度解读 Tomcat 中的 NIO 模型 [Java基本功]浅 ...

  3. 齐治堡垒机前台远程命令执行漏洞(CNVD-2019-20835)分析

    一.基本信息 漏洞公告:https://www.cnvd.org.cn/flaw/show/1632201 补丁信息:该漏洞的修复补丁已发布,如果客户尚未修复该补丁,可联系齐治科技的技术支持人员获得具 ...

  4. Git速成学习第六课:Bug分支

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 当你接到一个修复代码为101的任务的时候,很自然的你想创建一个分支issue-101来修复它,但 ...

  5. Java文章翻译

    一.基础 1.String 使用" "还是构造函数创建字符串? 画图说明字符串的不变性 在Java中字符串为什么是不可变的 Java中的字符串是按引用传递? 排名前十的Java字符 ...

  6. 冲刺Noip2017模拟赛6 解题报告——五十岚芒果酱

    1.ksum(ksum) [问题描述] Peter喜欢玩数组.NOIP这天,他从Jason手里得到了大小为n的一个正整数 数组. Peter求出了这个数组的所有子段和,并将这n(n+)/2个数降序排序 ...

  7. Centos 配置jdk环境变量

    1.安装方法 windows 下载,复制到 linux,解压,配置环境变量 linux 使用 wget 下载,解压,配置环境变量 linux 使用 yum 直接安装,环境变量自动配置好 2.查看是否已 ...

  8. 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧

    目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...

  9. Python基础总结之第八天开始【while循环以及for循环,循环嵌套等循环相关的知识点】(新手可相互督促)

    ennnnn,年薪20万的梦想是不是又进了一步: 循环,什么是循环,循环就是电池有电,手机屏幕可以循环一整天的使用:循环就是地球不毁灭,太阳日复一日的出现...... 不接受反驳,谢谢!~ 只要条件满 ...

  10. 测试sigaction重启动标识

    #include <stdio.h>#include <unistd.h>#include <signal.h>#include <string.h># ...