NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

  • 2020-09-16
  • 本文字数:1912 字

    阅读完需:约 6 分钟

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

一、前言

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)。


原文链接


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


2020-09-16 10:101374

评论 2 条评论

发布
用户头像
什么级别的数据量,es撑得住么
2020-11-03 15:14
回复
用户头像
智能有点言过其实了,没有推理能力的系统不值得称为智能。基于相似度的流量筛选,阈值选择权衡,文章没有提及。
2020-09-16 11:09
回复
没有更多了
发现更多内容

Python对系统数据进行采集监控——psutil

Python研究者

8月日更

手撸二叉树之二叉树的层平均值

HelloWorld杰少

数据结构与算法 8月日更

【LeetCode】反转字符串 IIJava题解

Albert

算法 LeetCode 8月日更

数字化为企业带来哪些价值?

boshi

数字化转型

Springboot+quartz源码探索

4ye

Java 后端 springboot quartz 8月日更

再谈安全架构《一》

I

读书笔记 方法论 安全架构 企业安全 安全建设

BPM敏捷Activiti开发平台,工作流引擎springboot整合activiti

金陵老街

Java MySQL Vue springboot Activiti

埋土灰

箭上有毒

8月日更

【设计模式】模板方法模式

Andy阿辉

C# 后端 设计模式 8月日更

Linux之alias命令

入门小站

Linux

ASCII对照表

入门小站

工具

SpringBoot 自动装配源码解析

Rubble

8月日更

图解:为什么非公平锁的性能更高?

王磊

Java 8月日更

架构训练营模块三作业

高铎

方法调用:一看就懂,一问就懵?

阿Q说代码

8月日更 虚方法 非虚方法 静态分派 动态分派

sql task2 基础查询与排序

橙橙橙橙汁丶

NDK 编译代码(一)

Changing Lin

8月日更

数据传输过程的序列化,你了解吗

卢卡多多

序列化 8月日更

微博评论高性能高可用架构设计

tjudream

高可用架构 微博评论 高性能计算架构 多级负载均衡 多级缓存

【Flutter 专题】62 图解基本 Button 按钮小结 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

DCS_FunTester分布式压测框架更新(三)

FunTester

分布式 性能测试 测试框架 测试开发 FunTester

架构训练营模块四作业

高铎

架构实战营

Vue进阶(四十八):Vue.js 2.0 移动端拍照压缩图片预览及上传

No Silver Bullet

Vue 8月日更

想知道你未来宝宝长什么样吗?

华为云开发者联盟

modelarts 图像 图像生成 父母照片 照片

架构训练营模块二作业

高铎

架构实战营

LeetCode题解:2. 两数相加,迭代,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

字节跳动《实时音视频通讯技术》学习笔记之服务器端开发入门

Regan Yue

git 字节跳动 Go 语言 8月日更

vue入门:element组件与动画使用

小鲍侃java

8月日更

Python代码阅读(第14篇):列表求并集

Felix

Python 编程 Code Programing 阅读代码

是时候封装限制 UITextField、UITextView 的最大字符长度了

fuyoufang

swift iOS 知识体系 8月日更

面试侃集合 | LinkedBlockingQueue篇

码农参上

队列 Queue 8月日更

携程是如何在测试时做精准流量筛选的_语言 & 开发_文杰_InfoQ精选文章