契约测试

业界认为应该让契约测试来替代集成测试。认为你写的2-5%的集成测试和单元测试有重复,或者和其它地方的集成测试存在重复,而且当集成测试失败时,你也不知道发生了什么,不能及时准确定位问题。

一、什么是契约测试

微服务要求有低耦合、高内聚的边界,通常我们使用 DDD 的限界上下文作为微服务边界;而契约测试则是针对这个边界的测试。契约测试是验证服务的Provider是否按照期望的方式与服务的Consumer进行交互,简单的说是Consumer与Provider两者之间的集成。而Contract即合同、契约,就是Provider与Consumer的交互方式。

契约测试通常是基于Consumer驱动的(Consumer Driven Contracts,基于Consumer驱动的契约测试工具有PACT)。基于Consumer驱动的契约测试分两个阶段:1)Consumer生成契约,开发者在Consumer端写测试时Mock掉Provider,运行测试生成契约文件;2)Provider验证契约,开发者拿契约文件直接在Provider端运行测试进行验证。

二、契约测试的特点

1)开发人员编写,采用Mock机制,开发本地就可以运行,没有真实调用,运行快,毫秒级修复反馈周期短;2)Provider与Consumer两两之间的验证,容易定位问题,而且与底层测试或其它契约之间没有重复;3)不需要部署真实的集成环境,稳定且成功率高;4)沟通成本低。(比如一个Consumer端的加入导致服务端API修改,服务端开发人员不必跑去找所有其它Consumer端开发人员沟通确认是否会被影响,直接运行契约测试就能知道结果。

三、扩展

1)还有一个概念叫做design by contract,它规定软件设计人员应为软件组件定义正式、精确和可验证的接口规范,该规范应使用前提条件、后置条件和不变式来扩展抽象数据类型的普通定义。

2)霍尔逻辑中,霍尔三元组对理解程序更友好;P和Q是断言,C是命令 。P叫做前置条件,Q叫做后置条件。霍尔三元组简单理解为:只要P在C执行前的状态下成立,则在执行之后Q也成立。

{P} C {Q}

3)联想到solid原则的里氏替换原则,子类不应该破坏父类定下来的契约。当你发现一个子类没有办法完全替换其父类且并不改变原有的assertion的时候, 你就不该让它们有继承关系. 

四、集成测试

端到端集成测试(简称集成测试)是指系统集成后的自动化测试,是系统或模块真实组装后运行的测试。很多团队用UI端到端来测系统集成后的行为,这类工具很多,比如有Selenium webdriver等。端到端的集成测试反馈与修复的周期比较长、运行速度慢,测试运行不稳定,有时随机失败,维护成本也很高。它不像单元测试,单元测试测具体一个方法或API,定位准确,采用Mock机制,运行速度非常快(毫秒级),又是开发人员在本地执行,反馈修复及时,成本较低。

集成测试的特点:1)真实安装后测试,测试更接近真实使用情况;2)可见性强,容易理解;(比如:看一遍运行关键业务的集成测试,业务人员或客户会觉得很放心。也可以替代验收测试);3)模块真实调用,测试运行慢,秒级别或分钟级别,反馈与修复的周期慢,成本高;4)问题定位难,多个子模块组合安装后的测试,很难定位是哪个模块出的问题;5)真实的安装或环境搭建,不稳定,容易导致测试随机失败;6)沟通成本高,需要不同模块团队间的协调工作;7)与底层测试或集成测试会有重复,集成测试中有的路径已经被单元测试覆盖。


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

推荐阅读更多精彩内容

  • 正如大家所知,最初QA都是手动执行测试用例,开发人员每修改一个版本,QA就要手动测试一遍,随着功能的不断增加,手动...
    ThoughtWorks阅读 2,808评论 1 18
  • 如今,契约测试已经逐渐成为测试圈中一个炙手可热的话题,特别是在微服务大行其道的行业背景下,越来越多的团队开始关注服...
    ariman阅读 12,466评论 28 33
  • 背景 在当前微服务和前后端分离大行其道的行业背景下,越来越多的团队采用了前后端分离和微服务的架构风格。该服务架构下...
    博客已迁移I米阳阅读 24,352评论 2 18
  • 什么是契约 如果从契约产生的阶段来说,现有资料表明最早要追溯到西周时期的《周恭王三年裘卫典田契》,将契约文字刻写在...
    ThoughtWorks阅读 2,923评论 1 12
  • 2018年7月11日 星期三/晴/28-35° 读经第31周第7天 总第224天 读经人员:睿哲、爸爸 读经内容:...
    燕燕_967e阅读 188评论 0 0