本文来自阿网易云社区

作者:孙婷婷

白盒测试起因

17年下半年我开始介入部门新项目的服务v2版本的功能测试。刚接手项目时,感到十分头疼,首先它不像我刚接触测试时做的to C端项目,主要是页面展示操作,黑盒测试足够;其次它不像我刚来网易介入的图像项目,主要通过接口判断图片属性,撸撸产品需求也能通过黑盒测试覆盖功能。

相比之下新项目的项目特点则是:

A.    是一个服务端项目,主要是接口测试;

B.    接口参数需要特定的加密格式加密后传输,服务端需要解密后处理,数据不透明;

C.    接口参数量多达至少30个,接口最后返回类型多达30种,逻辑复杂;

总结起来,它就是一个数据不透明、逻辑复杂的后台接口服务项目。刚拿到项目的时候我基本处在无从下手的阶段,加密解密太复杂,我连接口测试都不会实现。被逼无奈,先把开发的单元测试用例拿来跑一跑,边跑边了解摸索,慢慢就走上了白盒测试的道路。

测试摸索

我在测试过程中,主要按照通过数据追溯主干,需求用例发散旁支,bug追因查看细节的思路,来一步步抓大放小学习开发代码,同时完成测试任务。

1.追溯主干:

在项目介入过程中,我喜欢通过关注数据的流动来快速了解一个项目的主要实现过程,即撸清从调用一个接口传入参数到获得结果这个过程中数据经过哪些模块,经过加工后落入哪个存储模块。

举例来说,在本次测试摸索过程中,首先梳理项目各个接口的主要功能、梳理接口参数和返回值。由于项目的主要功能接口是collect接口和check接口,则在代码层主要关注这两个相关模块。

接着根据接口参数的数据流向走读或者DEBUG代码,查看在主干链路上的流向。由于项目的主要参数是收集的设备和行为信息CheckData,就可以重点关注CheckData的数据处理。在实践中,遵循从上层深入底层的原则,本项目中都是http接口,则可以从代码Controller层入手,跟踪CheckData数据经过哪些系统、模块处理,是否经过kafka、redis、nos等模块,最终存入何处。这步操作,对于后续在测试过程中进一步校验测试数据处理是否正确会有很大帮助;同时面对分布式系统,能让你快速了解整个项目的模块、依赖和架构,分分钟画出系统架构图。

2.发散旁支:

在接触接口后,可以在功能用例的基础上查看重点需求代码发散旁支,了解需求细节,查看或者跟开发讨论了解具体实现方法。结合测试用例,可以边测试边了解代码,补全用例没运行到的代码场景。例如下图中在测试collect接口功能时,已经通过梳理主干看到代码中参数会被解密后解析,此时就可以详细去查看数据处理方法decode和parse,增加些解密解析中的异常场景,也便于后续校验传参是否合理、解析是否正确等。

3.bug追因查看细节

当测试过程中输出结果不符合预期却又不能肯定定性为bug时,就是白盒测试上台的最好时机啦。将项目配置成远程debug模式,复现问题场景,在触发场景过程中单步调试代码,查看代码实现细节,确认每一步是否符合预期最终定位问题原因。将结果自信反馈给相关开发。

对于DEBUG这个过程,没有接触过远程DEBUG的小伙伴,可以首先尝试把代码下载到本地review代码;review熟了可以求助开发,帮着先把代码在本地跑起来进行本地debug;当本地debug玩的飞起的时候,远程debug就也不是问题啦~(为了避免一些环境配置问题,测试环境测试还是比本地环境测试靠谱的)

可以参考二组小伙伴宋亚敏写的远程debug配置:http://ks.netease.com/blog?id=8113

总结:

完成白盒测试,首先建立在非常了解需求的基础上,其次,对于代码有一定的热情,最后也要熟悉java基本知识(如果开发使用其他语言,还需要了解相应的技术知识)。不过还没上道的小伙伴也不用心急,会看到这里,说明你也是感受到了代码的迷人之处准确尝试啦,平时注意积累技术知识,拿一个合适的项目介入实践,白盒测试并不是一个遥远的话题。

在测试实践过程中,由于项目测试确实投入了大量的时间和精力,让我途中质疑过白盒测试的意义,同一个bug,用功能测试方法能否测出来?是否更节省时间人力呢?认真思考后我觉得白盒测试作为一个高技巧的测试手段,在这个过程中我还是收获更多的:

1.     对于业务,有了更加深刻的认识和理解,在和开发产品沟通的时候能更好的传达双方的需求,也获得大家的认可;

2.     技术实力提升,白盒测试虽然增加了阅读代码的时间投入,但是减少了bug沟通成本,让我们有更多的机会去了解开发的技术,扩充技术知识面,提升测试信心。

当然,这个过程确实投入了大量的时间,有些异常顺着开发思路也容易造成异常漏测。不过我觉得这不全是白盒测试的锅,更多的是我一开始黑盒用例设计不完善以及过多依赖白盒的原因,因此以后项目测试中对于多种测试方式的使用分配还需要再磨炼。

最后,以前QA向开发提bug时对话是这样的:

QA:你这个功能实现好像有个bug……

开发gg:什么bug,你环境是测试环境吗,代码有重新部署吗?

QA:最新的测试环境……

开发gg:数据发的对吗?参数接口有没有调错?

QA:确认了好像没错

开发gg:那你重现一下试试?

QA:好……

现在的对话则是这样的:

QA:你这段代码逻辑跟需求不符啊

开发gg:啊,是的是的,我改一下

QA:你这段代码是不是粗心了哇,true和false弄反了哎

开发gg:哎呀好像是的,我改一下

(彩蛋:)

开发gg:你们这边有没有自测用例,让我先自测一下看有没有问题哦~~

最大收获:无形之中,我已经推动了开发自测啦!!

网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区。

相关文章:
【推荐】 盘点大数据在游戏行业中的应用

后台服务项目的白盒测试之旅相关推荐

  1. 微服务项目后台技术栈

    微服务项目后台相关技术整理 主要技术 ORM框架-Mybatis Plus Mybatis Plus核心功能 MyBatis Plus与SpringBoot集成 MyBatis Plus集成Sprin ...

  2. 微服务项目中引入全链路监控平台:Pinpoint、SkyWalking、Zipkin怎么选?

    来源:www.jianshu.com/p/92a12de11f18 0 问题背景 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上, ...

  3. 一场B站服务端开发面试之旅

    作者 | 蓝 来源 | 我是程序员小贱(ID:Lanj1995Q) 此次B站服务端开发面试之旅可谓惊险,不过通过对大部分面试题套路的掌握,不出意外还是拿下了,下面我们来看看这些题是不是常见的不能再常见 ...

  4. Web后台服务开发——数据库查询之引入TypeORM

    文章转自 极客论坛 前置条件 首先按照  Web后台服务开发--安装MySQL 和 Web后台服务开发--安装HeidiSQL 安装MySQL: 然后创建一个数据库,假定名称为test,你也可以选择其 ...

  5. bootstrap4 左侧导航栏 优秀 大气_志愿服务嘉年华|“持志隽永 赴愿奔行优秀志愿服务项目展示第六期...

    原标题:志愿服务嘉年华|"持志隽永 赴愿奔行"优秀志愿服务项目展示第六期 近日烟雨环绕 小楼几度听风语 可听见十一月的脚步正悄然靠近 小海狮们期盼已久的 第五届志愿服务嘉年华即将拉 ...

  6. xunsearch: 开启后台服务,索引……随笔记录

    重启后台服务: cd $prefix ; bin/xs-ctl.sh restart 索引: # 导入 MySQL 数据库的 dbname.tbl_post 表到 demo 项目中,并且平滑重建 ut ...

  7. 若依微服务版后台服务通过jar包部署到Windows服务器

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在前 ...

  8. 认证服务器的搭建_SpringCloud搭建的认证中心和资源服务器的微服务项目源码分享...

    本项目基于spring-cloud-starter-oauth2搭建的认证中心和资源服务器的微服务项目,项目不仅仅简单的demo,项目的出发点在于实战应用.本项目为笔者花了不少时间和精力整理出来的,只 ...

  9. 打造跨平台.NET Core后台服务

    续之前讲的在TopShelf上部署ASP.NET Core程序,作为后台服务运行,自从.NET Core 3.0出现以后,出现了自带的Generic Host,使得自托管服务变为可能.这种方式和Top ...

最新文章

  1. NC:中科院微生物所陈义华组发现新颖的聚酮类化合物起始机制
  2. 15.PHP_PHP与Ajax
  3. jenkins+findbugs+checkstyle+PMD静态代码检查(二)
  4. 一分钟了解阿里云产品:阿里云解析五大热点技术问题分析
  5. java常见_Java 常用类
  6. VMware vsphere client报错问题
  7. 追加内容到文件末尾的几种常用方法
  8. 关于health的原理
  9. Windows安装 ANT
  10. MIT新研究:算法比硬件更有用
  11. Win7小工具“概念时钟”,v2.1.8.6
  12. Hibernate POJO在序列化(JSON)时遇到的若干问题
  13. LoadRunner11完美破解
  14. Concis组件库封装——Avatar头像
  15. 1分钟看懂区块链和分布式网络
  16. 牛!各大公司【薪资待遇】一览,我心动了
  17. 全景Engine智能管理软件7.0-PLG模式全新上线
  18. 用opencv简单绘图
  19. 2011年国外最受欢迎的15个汽车网站
  20. Session超时管理以及Session实现自动登录——java web实验

热门文章

  1. 回调函数在C/C++中的使用
  2. 【FFmpeg】设置H264参数
  3. linux隐藏文件的方法,Linux下隐藏文件的操作方法
  4. java.sql在哪_我的Java访问MS SQL的程序错在哪了?谢谢!
  5. python arp扫描_基于python的局域网arp扫描
  6. oracle生成xml方法,oracle存储过程生成xml==转
  7. array用法 numpy_NumPy总结(基础用法)
  8. 【基础知识】截长图的方法以及防止截图时下拉框自动收回的方法
  9. NodeJS 使用redis实现定时执行方法
  10. linux 故障注入_阿里巴巴开源故障注入工具_chaosblade