Terminator 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Terminator 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Terminator 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Terminator 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Terminator 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 GPLv2
开发语言 Java 查看源码 »
操作系统 跨平台
软件类型 开源软件
开发厂商 百度
地区 国产
提 交 者 红薯
适用人群 未知
收录时间 2013-11-28

软件简介

问题

在开发/测试一个复杂系统的时候我们经常遇到开发/测试中的模块依赖其它服务的情况。比如一个系统有两个模块A和B,A模块依赖于B模块提供的服务:

  1. B部分功能还未完成开发导致A模块开发被阻塞;

  2. B模块有些数据不好构造,开发时无法自测到所有情况;

  3. 对A模块进行集成测试时,写了一些自动化用例。但由于B模块不可控,B模块的数据经常变动导致返回给A模块的数据也变化了,这时候依赖B模块返回数据的断言将失败;

  4. B模块不是自己团队维护,经常出现不稳定,导致开发环境中整个系统不稳定。

解决方案

服务虚拟化指的就是虚拟出不稳定、不可用、未开发完全的服务。通常有两种方法:

  1. 针对协议的通用桩,可以预先设置请求对应的返回值以及匹配条件,这样系统未开发完之前可以使用这个桩来代替真实的服务;

  2. 录制回放方式,在第三方服务可用的时候将链路上的数据录制下来,当不稳定或者不可用时,回放当时录制的数据。

其中方案1主要针对问题一和二,方案2主要针对问题三和四。Terminator(寓意:明暗交界线)实现了以上两种方式。

Terminator中每个链路可以看成是一个代理,运行在两个服务之间,现在支持四种工作模式:

Function Summary

TUNNEL:隧道模式,链路服务负责接收和转发链路上的数据,但不做任何存储,相当于通透状态;

RECORD:录制模式,链路服务将链路上的请求和响应存储下来,并记录请求响应的对应关系;

REPLAY:回放模式,链路服务不会连接后端的依赖服务,当请求过来时当符合某些条件时直接返回当时录制的响应;

STUB:通用桩模式,链路服务能够预设返回结果与匹配规则,当请求过来时符合匹配规则即返回预设结果。

整体架构

Terminator Architecture

  1. 网络通信:主要在TCP层建立Socket收发链路上的通信数据,这里采用的是netty框架;

  2. 协议编解码器:主要将二进制数据包解析为协议数据或者反过来将协议数据转化为二进制数据,netty本身提供了HTTP、SSL/TLS、WebSockets、Google Protocol Buffer的编解码器,如果需要扩展可以自己定义协议编解码器;

  3. 工作模式处理器:本系统的核心,现在提供的录制回放、通用桩都是这里实现的。这里提供了较多的扩展接口,可以基于定制化需求实现新的模式, 比如当后端服务down掉的情况下启动之前的录制数据。另外对于录制回放模式,签名类是一个核心组件,它的作用是如何标识一个请求,对于不同系统可能有不 一样的实现;对于通用桩模式,抽取类是一个核心组件,他的作用是如何提取一个请求,涉及到如何设置匹配条件,对于不同系统(特别是协议)也可能有不一样的 实现。所以这些都是系统提供的可扩展接口。

  4. APIs:为了使用上的方便(比如持续集成),系统基本所有的功能都通过REST API提供。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (1)

加载中
你好,该工具的源码为什么不能直接导入eclipse中运行? #Terminator#
2015/04/20 15:31
回复
举报
更多评论
暂无内容
2016/10/06 13:03

Terminator 安装与使用

对Linux系统进行管理时,我们经常需要通过终端窗口输入各种操作命令。在GNOME桌面环境下,GNOME终端(gnome-terminal) 是我们经常使用的终端程序,每次运行该程序都将打开一个单独的终端窗口。当我们进行命令行操作时,有时需要打开多个终端窗口,并且希望这些窗口能同时平铺显示,那该怎么办呢?其实,借助一款小巧而实用...

0
0
发表了博客
2016/12/26 12:44

terminator 安装与配置

1.安装 sudo apt-get install terminator 1 1 2.配置 cd ~/.config/terminator/ && sudo gedit config 1 1 3.修改配置文件 [global_config] title_transmit_bg_color = "#d30102" focus = system suppress_multiple_term_dialog = True [keybindings] [profiles] [[default]] palette = "#2d2d2d:#f2777a:#9...

0
0
发表于大前端专区
2018/11/17 21:56

baidu

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> </head> <style type="text/css"> *{ padding:0; margin:0; /* 无内外间距 */} body{width:1540px; height:1000px; /* 可以向下拉页面 */ overf......

0
0
发表了博客
2016/08/26 13:48

Amigo---Android hotfix terminator

Amigo released finally, it's a so cool lib, hope it will help you

0
1
发表了博客
2012/09/26 10:13

Ubuntu设置默认Terminal为Terminator

首先,安装Terminator: sudo apt-get install terminator 其次,安装dconf-tools : sudo apt-get install dconf-tools 最后,使用这两个命令: gsettings set org.gnome.desktop.default-applications.terminal exec /usr/bin/terminator gsettings set org.gnome.desktop.default-applications.terminal exec-arg "-x"...

0
2
发表了博客
2018/05/24 11:45

baidu uuid

https://blog.csdn.net/gaoshili001/article/details/79126695 <!-- https://mvnrepository.com/artifact/com.xfvape.uid/uid-generator --> <dependency> <groupId>com.xfvape.uid</groupId> <artifactId>uid-generator</artifactId> <version>0.0.4-RELEASE</version> </dependency> https://blog.csdn.net/qq_2738476...

0
0
2020/07/18 07:19

DevSecOps in Baidu

作者:Ensec Team DevSecOps方向:快乐小鱼、oxen、c0debreak、lSHANG、隐形人真忙、arnoxia、KeyKernel、lixin1234qqq、omego、t1ddl3r、jackzhangsky、yinhuochong、ErwinDarg、TYYShell、WDD、lingling、Jesse......

0
0
发表于服务端专区
2016/09/23 11:27

baidu面试

下午到了百度大厦感觉这一生有幸再一次来到这里真心高兴。梦开始的地方不能忘。不忘初心方的始终。 第一面 基础知识面试 首先问了hashmap是如何存储数据、找数据的。 第一点,单个数据是什么结构 jdk1.6 ```java transient Entry[] table; ``` hashmap允许key值为空放置 ```java public V put(K key, V value) { if (key...

2
0
发表了博客
2018/04/09 14:29

Linux Terminator(终结者)的配置整理

# 下载 ``` sudo apt-get install terminator ``` # 下载字体 ``` https://github.com/fangwentong/dotfiles/raw/master/ubuntu-gui/fonts/Monaco.ttf ``` # 配置代码 > 打开,双列终端 ```bash [global_config] focus = system suppress_multiple_term_dialog = True title_transmit_bg_color = "#d30102" window_state...

0
0
发表于运维专区
2019/10/18 21:04

解决流氓baidu

今天用SimpleDnscrypt的时候发现2345/baidu/hao123/sogou这几个域名每隔半分钟就被进行一次lookup,就像一个timer似的。 把Chrome关了之后该timer就停了,这一点让我误以为是我的Chrome插件有问题。一番操作,不能...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
1 评论
12 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部