微服务实战测试之理论篇

目录

  • 测试的考量
  • 测试的分类
  • 测试的模式
  • 测试金字塔
  • 单元测试的原则
  • 测试的策略
  • 测试用例的组织
  • 测试的过程
  • 参考资料

测试的重要性尽人皆知,这里从做点小小的总结

测试的考量

1. 测试的时机

不是东西做出来再测,而是测好了东西才能出来 各个大小公司,独立的测试团队都在削减人员,不是测试不重要,而是需要全员从一开始就要做测试, 全过程测试, 早期注重单元测试和组件测试, 后期注重集成测试和端到端测试。在一个迭代尽量做一个相对完整的功能, 及时做集成, 而不是最后再一起做集成测试

(个人以为独立专业的测试团队还是很有必要的, 自己测自己写的东西, 很难发现意想不到的问题)

2. 测试的效率

讲究有效性,稳定性和性能,一定要自动化,跨越多个组件的端到端测试必须有,可是不宜多,而且应该是聚焦在于功能性,无需过度测试,有必要才测, 代码对测试友好, 也就是易于测试。 测试要讲究有效性,稳定性和性能。

从思维定势的角度来看, 单元测试可以自己做, 组件测试和集成测试最好换位思考, 结对测试或交由测试专家来做

3. 测试的度量

测试要有覆盖率,哪怕仅作参考 性能测试更要有数据,比如 CPS TPS QPS 最耗时间的函数等在测试过程中收集到的度量数据

4. 测试的对象

测试到底测什么?
测试目的要明确, 检查点是先定义好. 哪些值, 状态, 还是行为要检查?
测试范围更要定义清楚, 单元,组件,系统内部还是端到端的用户操作?

测试的分类

  • 黑盒测试
  • 白盒测试

  • 手工测试
  • 自动测试

  • 冒烟测试
  • 回归测试
  • 探索性测试

  • 单元测试
  • 组件测试
  • 消费者测试
  • 集成测试
  • 端到端测试

  • 压力测试
  • 异常测试

测试的模式

Mike Clifton 曾经总结过测试的若干模式, 可以参看原文, 回头找时间翻译一下

Pass/Fail Patterns 通过/失败测试模式

Data Driven Test Patterns 数据驱动测试模式

Data Transaction Patterns 数据处理事务测试模式

Collection Management Patterns 集合管理测试模式

Performance Patterns 性能测试模式

Process Patterns 流程处理测试模式

Simulation Patterns 仿真测试模式

Multithreading Patterns 多线程测试模式

Stress-Test Patterns 压力测试模式

Presentation Layer Patterns 展现层测试模式

测试金字塔

Test pyramid

因为越往上测试的实现和维护成本就越高, 测试速度也越慢, 所以提倡多写单元测试, 少写端到端的测试, 少写不等于不写, 上层的测试着重测一些主要的路径, 不需要面面俱到, 不然费时费力

单元测试的原则

有本书单元测试之道总结了若干单元测试的原则, 先来回顾一下

Pragmatic Unit Testing by Andrew Hunt and David Thomas

FIRST 原则

  • Fast 快速的
  • Isolated 隔离
  • Repeatable 可重复
  • Self-Validating 自验证
  • Timely 及时的

参见 https://github.com/ghsukumar/SFDC_Best_Practices/wiki/F.I.R.S.T-Principles-of-Unit-Testing (ottinger, langr)

Right-BICEP 测试原则

英文 中文
Right - Are the results right? 结果是否正确?
B - are all the boundary conditions correct? 所有的边界条件测试结果正确吗
I - can you check the inverse relationships? 有没有检查反向关系
C - can you cross-check results using other means? 能不能用其他方法交叉检查结果?
E - can you force error conditions to happen? 能不能强制错误情况发生?
P - are performance characteristics within bounds? 性能特性在不在允许范围之内?

CORRECT 检查原则

英文 中文
C - Conformance - does the value conform to an expected format? 一致性 - 值是否符合预期的格式?
O - Ordering - is the set of values ordered or unordered as appropriate? 排序 - 值的集合是否根据需要进行排序或无序?
R - Range - is the value within reasonable minimum and maximum values? 范围 - 值是否在合理的最小值和最大值范围之内?
R - Reference - does the code reference anything external that isn't under direct control of the code itself? 引用 - 代码是否引用了不受代码本身直接控制的外部依赖?
E - Existence - does the value exist (e.g. is not null, non-zero, present in a set)? 存在 - 值是否存在(例如,不为null,非零,是否存在于集合中)?
C - Cardinality - are there exactly enough values? 基数 - 是否有足够的值?
T - Time (absolute and relative) - is everything happening in order? At the right time? In time? 时间(绝对和相对) - 一切事件是否有序? 是否在正确的时间? 是否及时?

测试相关框架与库

林林总总, 不胜枚举, C++的googletest, gmock, Java的 Junit, TestNG, Mockito, PowerMock, JavaScript 的 Qunit, Python 的 unittest, Lua 的 luaunit, 等等

其实他们都是脱胎于 JUnit , 使用起来也是大同小异

测试的策略

测试要分类,分组,而且要能快速定位和诊断测试的失败之处

在开始系统级测试之前, 最好能列一个测试矩阵 Test matrix 把所有已知条件, 场景和输入, 或变化的因子列出来, 以免遗漏

Components Scenario IE7 IE8 IE9 IE10 IE11 Edge Chrome Firefox Opera
Portal Login pass pass pass pass pass pass pass pass pass

测试用例的组织

Given-When-Then

BDD 说明 示例
Given 先决条件 广告部定制了企业的服务电话语音为最近一次促销活动广告
When 行为或事件 用户拔打 800 服务电话
Then 期待的变化或结果 欢迎声后听到最近一次促销广告

测试的过程

测试四步法

Four Phase Test

测试是个大题目, 未尽之言, 在下面两篇总结中详述

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 喧闹的世界,我喜欢寻找一份宁静。 四点半的闹铃,把我从梦里唤醒。睁开朦胧的双眼,天色微亮,窗外蛐蛐...
    晴天_zh阅读 358评论 0 4
  • 当我决定把写的东西贴出来的时候,我就觉得自己要进入一个“万劫不复”的深渊了,深知自己文笔没多好,想着感情来凑一凑,...
    二月古刹阅读 745评论 3 2
  • 文|黄信云 最近部门略有动荡,我一直在思考我们团队的方向、团队的动力、以及团队如何成长...
    黄信云阅读 410评论 0 0
  • 案件回顾:“2016年11月3日,中国女留学生江歌在日本租住的公寓门前被杀害。凶手是室友刘鑫的前男友陈世峰,凶案发...
    葱椒不吃姜阅读 6,032评论 12 5