携程是如何在测试时做精准流量筛选的

发布于:2020 年 9 月 16 日 10:10

携程是如何在测试时做精准流量筛选的

一、前言

2019 年携程酒店团队开发了比对自动化平台,极大地提高了测试效率,但在使用过程中慢慢也发现了以下一些问题:

1)为了能够覆盖更多的场景,每次拉取很多流量运行,运行数据量比较大;

2)运行数据量大导致运行时间长,等待运行的场景积压多,运行不稳定;

3)每次运行的流量都是随机性拉取,导致流量场景覆盖不稳定;

4)每次拉取的流量没有一个具体数据度量,代码覆盖率是多少;

5)不能自动发现流量覆盖新的场景,而是通过人工偶然发现,手动标识;

根据以上问题,我们设计开发了精准流量筛选。在使用过程中提高了测试精准性和测试效率,并在此基础上根据业务人员需求相继开发了手动流量筛选,自动流量筛选,用例智能推荐等。

本文将从比对平台如何和流量筛选结合以及手动流量筛选,自动流量筛选,用例智能推荐的方面,分享精准流量筛选,希望能给遇到同样问题的小伙伴带来一些启发和借鉴。

二、整体介绍

2.1 手动流量筛选流程图

携程是如何在测试时做精准流量筛选的

2.2 自动流量筛选流程图

携程是如何在测试时做精准流量筛选的

2.3 用例智能推荐流程图

携程是如何在测试时做精准流量筛选的

2.4 相关技术

流量筛选我们主要采用和公司内部的代码覆盖率平台(采用开源代码覆盖 Jacoco 开发的内部系统)结合获取流量的代码覆盖率数据,以及分布式多线程运行,筛选流量使用杰卡德相似度算法。

通过该方式可以解决:

1)获取流量的代码覆盖率数据问题;

2)流量筛选速度比较慢的问题;

3)流量筛选不精确的问题;

关于杰卡德相似度算法:两个集合 A 和 B 交集元素的个数在 A、B 并集中所占的比例,称为这两个集合的杰卡德系数,流量相似度越高杰卡德系数近于 1。

相关公式:

携程是如何在测试时做精准流量筛选的

2.5 模块关系图

携程是如何在测试时做精准流量筛选的

精准流量筛选由三个模块组成:手动流量筛选模块,自动流量筛选模块,用例智能推荐模块。

手动流量筛选模块,自动流量筛选模块是两个相对独立的模块。手动筛选可以指定具体哪些流量进行筛选,更具有针对性;自动化流量筛选是在机器空闲的时候(通常是晚上),根据用户配置随机获取流量数据,然后对流量进行筛选,更具随机性,用户可以根据业务需求选择筛选方式。

用例智能推荐模块,推荐的用例是手动流量筛选模块和自动流量筛选模块筛选的流量用例,在筛选的过程中标识出新发现的场景流量用例,把这些新发现的流量用例推荐给用户,方便用户精确地写接口自动化用例。

三、模块介绍

3.1 手动流量筛选

筛选原理:比对自动化平台和公司的代码覆盖率平台打通,通过回放场景流量用例,获取流量用例的代码覆盖率信息,对流量用例的代码覆盖率数据进行相似度计算,剔除覆盖率数据相似的流量用例,留下代码覆盖率数据不同的流量用例。

回放的流量来源:

  • 手动配置
  • ES 保留
  • ES 手动拉取
  • Clog 手动拉取
  • CK 手动拉取

流量筛选详情页配置

  • 流量请求地址
  • 请求的 header 信息
  • 流量筛选块数量

运行方式

  • 手动执行

执行方式

  • 分布式
  • 多线程

运行结果查看页

  • 查看去除的相似的流量用例
  • 查看流量用例的行覆盖率信息
  • 查看流量用例的方法覆盖率信息
  • 查看整体流量用例的覆盖率趋势图
  • 查看实时流量筛选运行步骤信息

3.2 自动流量筛选

筛选原理:每天凌晨开始,自动到配置的数据源拉取配置数量的流量,对流量进行回放,获取流量用例的代码覆盖率信息,对流量用例的代码覆盖率数据进行相似度计算,剔除覆盖率数据相似的流量用例,留下代码覆盖率数据不同的流量用例。

回放的流量来源:

  • 手动配置
  • ES 保留
  • ES 实时拉取
  • Clog 实时拉取
  • CK 实时拉取

流量筛选详情页配置

  • 流量请求地址
  • 请求的 header 信息
  • 流量筛选块数量

运行方式

  • 晚上自动执行

执行方式

  • 分布式
  • 多线程

运行结果查看页

  • 查看去除的相似的流量用例
  • 查看流量用例的行覆盖率信息
  • 查看流量用例的方法覆盖率信息
  • 查看整体流量用例的覆盖率趋势图
  • 查看实时流量筛选运行步骤信息

3.3 用例智能推荐

推荐原理:手动流量筛选和自动流量筛选在筛选用例的时候,标识出新发现的场景流量用例(覆盖了新的方法或者新的代码行),把这些新发现的流量用例推荐给用户,方便用户精确地写用例。

推荐用例数据来源:

  • 手动流量筛选的用例
  • 自动流量筛选的用例

运行结果查看页

  • 根据时间查询推荐的用例
  • 根据方法查询推荐的用例

四、使用效果

以某一使用流量筛选的场景为例:

  • 从目前 4 万多的流量中挑选出 1000 个新场景,后续还在自动流量筛选中;
  • 代码覆盖率从 23% 提升到 41%(流量筛选发现新场景该覆盖率还会继续提升);

五、总结

目前流量筛选已稳定运行半年,相比之前有以下变化:

  • 比对场景用例覆盖率稳步提升
  • 比对场景运行效率更高
  • 比对场景运行稳定性增加
  • 流量筛选过程中发现很多新的场景流量
  • 智能推荐了很多有效的新场景流量用例

为了更好的满足用户需求,对于流量筛选,后续我们将持续迭代。

作者介绍

文杰,携程高级测试经理,主要从事测试框架和平台的研发,现负责自动化与工具平台,热衷于研究技术提升测试工作效率。

本文转载自公众号携程技术(ID:ctriptech)。

原文链接

携程是如何在测试时做精准流量筛选的

阅读数:454 发布于:2020 年 9 月 16 日 10:10

更多 语言 & 开发、文化 & 方法、测试 相关课程,可下载【 极客时间 】App 免费领取 >

评论 (1 条评论)

发布
用户头像
智能有点言过其实了,没有推理能力的系统不值得称为智能。基于相似度的流量筛选,阈值选择权衡,文章没有提及。
2020 年 09 月 16 日 11:09
回复
没有更多评论了