【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

  • 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:101376

评论 2 条评论

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

写作社区划线笔记新功能全新上线!给你带来不一样的写作学习体验~

InfoQ写作社区官方

写作平台 玩转写作平台 热门活动

读书时,如何提炼文章架构形成思维导图

dd多了个多

读书笔记 读书感悟

《深度工作》学习笔记(4)

石云升

学习 读书笔记 习惯 专注 深度工作

垃圾回收

Mr.Monkey

Kafka集群缩容实战

我是个bug

大数据 kafka 运维 Big Data

JVM 垃圾回收原理

周冬辉

第九周总结

andy

周子衡 | 数字资产、数字支付及跨境活动——以美元数字化为例

CECBC

加密货币 数字资产

Java 垃圾回收

dongge

汇丰坠落:世间已无「日不落」

钛禾产业观察

汇丰 财经

百度安全研究院:区块链智能合约介绍

百度安全

比特币 区块链 智能合约 以太坊

1.8w字 | 初中级前端 JavaScript 自测清单 - 2

pingan8787

Java 大前端

起伏激荡的以太网,抱上这条大腿才能乘风破浪

脑极体

第九周作业

andy

极客大学

什么是零代码?零代码开发可以带来的好处

代码制造者

可视化 零代码 编程效率

一位区块链产品经理讲述“区块链”的通知 重点方向包括区块链安全

CECBC

物联网 区块链技术 联盟链

读书,区分一二三四手知识

dd多了个多

读书笔记

总结

chenzt

糟糕,你写的 BUG 要被存1000年了!

华为云开发者联盟

GitHub 开源 代码 bug 卤化银胶片

我是如何写读书笔记的

dd多了个多

读书笔记

VIPKID 在线教育场景下的实时计算技术落地和实践

Apache Flink

flink

消息队列面试热点一锅端

yes

kafka 面试 RocketMQ 消息队列

前端面试vue部分(1)——谈谈你对MVVM的理解

dd多了个多

面试 Vue 大前端 Web

大厂的人才衡量标准

池建强

人才标准

湾区金科沙龙,华青融天技术总监吴伟平详解旁路式应用性能监控

DT极客

前端面试 vue 部分 (2)——Vue是如何实现双向绑定的

dd多了个多

面试 Vue 大前端 Web

架构训练营第九周作业

张锐

架构师训练营第9周

大丁💸💵💴💶🚀🐟

区块链在这些生活场景中悄然落地了......

CECBC

区块链 落地应用

作业1

chenzt

应用开发基础知识-文件系统

superman

文件系统

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