前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >互联网大厂服务端测试流程

互联网大厂服务端测试流程

作者头像
Bug挖掘机
发布2022-09-28 14:58:44
1K0
发布2022-09-28 14:58:44
举报
文章被收录于专栏:测试开发基础测试开发基础

大家好,我是洋子,现在是一名服务端测试开发工程师,今天给大家讲解一下服务端的测试步骤

测试步骤概述

  • code review
  • 部署测试环境
  • 接口测试
  • 白盒测试

code review

通过code review 可以发现5类错误,分别是语法错误,边界行为错误,经验错误,算法错误,部分算法错误

1 语法错误

这类语法错误,如果使用IDE环境,大多就能够直接发现,也有部分语法错误在编译阶段时会通过,而在运行阶段才能发现错误。下面有3个语法错误的例子

1.1 参数少传 (以下函数需要传入2个参数)

代码语言:javascript
复制
func test(a int,b int)(c int){
	return a+b
}

test(1)  //少传了1个参数

1.2 数组索引越界(以下数组最大索引为2)

代码语言:javascript
复制
var arr =[3]int{1,2,3}
fmt.Println(arr[3])

1.3 未初始化数组直接使用(引发空指针异常)

代码语言:javascript
复制
//错误写法:未初始化map直接赋值
var a map[string]string
a["123"]="123"

//正确写法:
var a map[string]string
a= make(map[string]string)  //给map初始化
a["123"]="123"

2 边界行为错误

在执行代码过程中,因为边界条件,导致程序崩溃或者超时。比如经典的除0错误,以下代码若b取值为0,那么函数就会抛出异常

代码语言:javascript
复制
func test(a int, b int)(c int){
	c=a/b
	return c
}

3 经验错误

通过程序编写的过往经验进行判断错误。

下面的if 语句少了一个=号,变成了赋值语句,这样if判断就永远返回为true了,这样输入非3的任何数字,也无法走到else里面的逻辑了

代码语言:javascript
复制
func test(a int)(){
	
	if(a=3){
		fmt.Println("hello world")
	}else{
	    fmt.Println("come on")
	}
}

4 算法错误

指当前设计的功能与预期完全不符合 比如设计一个抽奖的算法,当有1000人进行抽奖时,会触发大奖,但实际上1000人已抽奖时并没有触发大奖,这就与预期完全不符合

5 部分算法错误

指当前设计的功能与预期部分符合,但一些特殊场景下会出现不符合的情况

如以下的加法函数,如果数字a或者b已经超出了int的最大范围,则不会返回预期的结果

代码语言:javascript
复制
func add(a int,b int)(c int){
	return a+b
}

部署测试环境

测试环境可以是一台物理机(虚拟机),也可以是一个容器。在一台物理机上分割出许多容器,说到容器,你第一时间可能会想到docker。容器比物理机更节约空间。在互联网大厂,为了充分利用服务器的资源并适配自己公司的环境,目前都有自己的容器化解决方案

在测试环境当中,我们需要安装一些必要的软件,比如mysql,redis,nginx,hhvm等。有了这些软件,我们服务端上的代码才能正常运行和进行请求转发

完成以上步骤后,我们可以利用git 去拉取代码,拉取代码后,需要在测试环境上部署好我们的测试代码,然后就可以开始接口测试和白盒测试了

附上一张git命令速查表

git常用命令

接口测试

到了第三步接口测试,这一步我们可以根据研发提供的接口文档,传入指定的参数到postman当中调用接口,看一下返回值当中的每个字段是否符合预期

postman接口返回值

白盒测试

在白盒测试当中,有三种覆盖率统计方式

  • 行覆盖(语句覆盖):度量该代码行是否被测试到,这里要求最低的覆盖率标准
  • 判定覆盖(分支覆盖):度量程序当中每个判定的分支被测试到
  • 条件覆盖:度量判定中的每个条件的取值至少满足一次

如果接口测试没有问题,这并不以为着服务端测试就结束了,我们通常情况下还会进行白盒测试,特别是针对代码当中的if语句,循环语句。至少要做到判定覆盖或条件覆盖

下面举一个例子 if(m>0 && n>0) 做行覆盖时,只需要执行到这条语句就行;做判定覆盖时,需要覆盖到该"m>0 && n>0" 为true和false 各一次;做条件覆盖时,需要"m>0" 取 true 和false 各一次 ,同时要"n>0" 取 true 和false 各一次。

可见条件覆盖比判定覆盖更加严格。在测试时间允许的情况下,最好能做到条件覆盖

下面再举两个我在实际工作当中的测试的代码示例

例子:嵌套if

代码语言:javascript
复制
if(!empty($a["white_list"])&&!empty($name)){
    $namelist=explode(',',$a["white_list"]);
    if(!in_array($name,$namelist)){
        echo "not in list";
    }
}

可以看到这是两个嵌套if的结构,如果要做到条件覆盖,我们需要设计一共4*2个测试case,即 真真真,真真假,真假真,真假假,假真真,假真假,假假真,假假假

代码语言:javascript
复制
语句1
if($a=="" && ($b !=0 || $b != 1));
语句2
if($a=="" && ($b !=0 && $b != 1));

我们再看下面这个例子,观察一下两个if的区别,可以看到语句1,在变量A等于"" 的情况下,变量b无论取任何值,$b !=0 || $b != 1返回的结果都是真。但语句2当中,$b !=0 && $b != 1,变量b,如果取1或者0为假,取非0和非1的数为真。综上我们可以看出,语句1当中的$b !=0 || $b != 1无法做到条件限制,如果if的body部分是抛出异常,那么b取任何值,该程序都会抛出异常,这样程序就无法正常执行了

总结

本文对服务端测试4个步骤进行了说明。code review其实是最先能暴露问题的环节,它要求测试人员需要有一定的代码能力才能发现问题。要想发现代码最深层次的问题,还是得进行白盒测试

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发Guide 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试步骤概述
  • code review
    • 1 语法错误
      • 2 边界行为错误
        • 3 经验错误
          • 4 算法错误
            • 5 部分算法错误
            • 部署测试环境
            • 接口测试
            • 白盒测试
            • 总结
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档