一种埋点测试方法及设备与流程

文档序号:20838390发布日期:2020-05-22 17:10阅读:266来源:国知局
一种埋点测试方法及设备与流程
本申请涉及大数据处理领域,特别涉及一种埋点测试方法及设备。
背景技术
:在大数据领域,埋点数据的准确性是一切数据的源头。如果源头的数据质量不能保证,就好像做一道菜,巧妇难为无米之炊。埋点是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。但是现阶段,由于产品需要不断地迭代,大家往往只关注功能方面的质量,而忽略埋点的质量,导致每次产品升级后,埋点都有可能被丢失或者错埋,从而导致数据仓库的数据不准确,影响到决策或者其他用到数据的产品。埋点可能在两种场景下出错:(1)新埋点第一次就埋错或者遗漏,但是没有人发现;(2)老埋点在产品升级过程中丢失或者被修改。第一个问题或许可能用人工来解决,每次新增埋点需求都去验证,但实际操作过程中也常被忽略;第二个问题无法用人工来解决。对产品测试来说,如果每次都要回归测试所有埋点的质量,工作量是非常大的。一个页面中的埋点通常有几十个,如果是整个产品,都人工回归,可能需要处理成百上千个埋点。可见,如果埋点测试的方式仅仅只靠手工测试,一个个核对,几乎是不现实的。因此,每一次产品发布前,如何快速回归埋点,是亟待解决的技术问题。技术实现要素:鉴于上述问题,本申请提供了一种埋点测试方法及装置,以方便、准确地对埋点进行测试。本申请公开了一种埋点测试方法,包括:通过解析工具分析埋点代码,收集埋点精准定位数据;根据埋点精准定位数据测试埋点。较佳的,所述通过解析工具分析埋点代码,收集埋点精准定位数据包括:针对不同代码格式的埋点文件采用对应的解析工具进行解析;根据不同的埋点方式采用对应的方法从解析结果中收集埋点精准定位数据。较佳的,所述针对不同代码格式的埋点文件采用对应的解析工具进行解析包括:基于代码格式对应的解析库,将代码解析为抽象语法树,并输出代码和埋点信息。较佳的,所述针对不同代码格式的埋点文件采用对应的解析工具进行解析包括:对于java格式的代码,基于javaparser库,通过javaparser.parse(filefile)将java代码文本解析为compilationunit类型的抽象语法树,该树接受voidvisitoradapter对象compilationunit.accept(voidvisitoradapter,null)在语法树上进行搜索遍历,然后根据遇到的节点的类型调用具体的回调,当在voidvisit(methoddeclarationn,objectarg)回调中判断方法内存在埋点代码时,输出包名、类名、方法名+参数+行数、埋点key+行数+方式。较佳的,所述针对不同代码格式的埋点文件采用对应的解析工具进行解析包括:对于kotlin格式的代码,通过kotlin编译器库中的相关类将kotlin代码文本解析为ktfile类型的抽象语法树,该树接受kttreevisitorvoid对象ktfile.acceptchildren(kttreevisitorvoid)在语法树上进行搜索遍历,然后根据遇到的节点的类型调用具体的回调,当在voidvisitnamedfunction(ktnamedfunctionfunction)回调中判断方法内存在埋点代码时,输出包名、类名、方法名+参数+行数、埋点key+行数+方式。较佳的,所述针对不同代码格式的埋点文件采用对应的解析工具进行解析包括:对于xml格式的代码,基于beautifulsoup库,对xml代码文本进行处理,生成剖析树,在树上进行搜索遍历,输出所有符合条件的子节点属性值,查找所有包含android:contentdescription属性的子节点,并输出文件名、控件id+行数、埋点key+行数+方式。较佳的,所述根据不同的埋点方式采用对应的方法从解析结果中收集埋点精准定位数据包括:对于静态代码埋点,判断是否调用埋点方法,如果调用,则从回掉参数中截取埋点key;对于动态代码埋点,判断自定义对话框按钮的回调参数中是否有数字,如果有,则从中截取该数字作为埋点key;对于可视化埋点,判断android:contentdescription属性是否存在且为数字,如果是,则从中截取该数字为埋点key。较佳的,所述根据埋点精准定位数据测试埋点包括:根据埋点精准定位数据,确认新埋点是否埋错或者遗漏,并在测试通过后,将埋点精准定位数据作为埋点精准定位归档数据进行存储;根据埋点精准定位归档数据和埋点精准定位数据,校验老埋点,确认是否丢失或者被修改。本申请还公开了一种埋点测试设备,包括:处理器,所述处理器用于:通过解析工具分析埋点代码,收集埋点精准定位数据;根据埋点精准定位数据测试埋点。较佳的,所述处理器具体用于:针对不同代码格式的埋点文件采用对应的解析工具进行解析;根据不同的埋点方式采用对应的方法从解析结果中收集埋点精准定位数据。较佳的,所述处理器具体用于:基于代码格式对应的解析库,将代码解析为抽象语法树,并输出代码和埋点信息。较佳的,所述处理器具体用于:对于java格式的代码,基于javaparser库,通过javaparser.parse(filefile)将java代码文本解析为compilationunit类型的抽象语法树,该树接受voidvisitoradapter对象compilationunit.accept(voidvisitoradapter,null)在语法树上进行搜索遍历,然后根据遇到的节点的类型调用具体的回调,当在voidvisit(methoddeclarationn,objectarg)回调中判断方法内存在埋点代码时,输出包名、类名、方法名+参数+行数、埋点key+行数+方式。较佳的,所述处理器具体用于:对于kotlin格式的代码,通过kotlin编译器库中的相关类将kotlin代码文本解析为ktfile类型的抽象语法树,该树接受kttreevisitorvoid对象ktfile.acceptchildren(kttreevisitorvoid)在语法树上进行搜索遍历,然后根据遇到的节点的类型调用具体的回调,当在voidvisitnamedfunction(ktnamedfunctionfunction)回调中判断方法内存在埋点代码时,输出包名、类名、方法名+参数+行数、埋点key+行数+方式。较佳的,所述处理器具体用于:对于xml格式的代码,基于beautifulsoup库,对xml代码文本进行处理,生成剖析树,在树上进行搜索遍历,输出所有符合条件的子节点属性值,查找所有包含android:contentdescription属性的子节点,并输出文件名、控件id+行数、埋点key+行数+方式。较佳的,所述处理器具体用于:对于静态代码埋点,判断是否调用埋点方法,如果调用,则从回掉参数中截取埋点key;对于动态代码埋点,判断自定义对话框按钮的回调参数中是否有数字,如果有,则从中截取该数字作为埋点key;对于可视化埋点,判断android:contentdescription属性是否存在且为数字,如果是,则从中截取该数字为埋点key。较佳的,所述设备中还包括存储器;其中:所述处理器具体用于:根据埋点精准定位数据,确认新埋点是否埋错或者遗漏,并在测试通过后,将埋点精准定位数据作为埋点精准定位归档数据存储到存储器中;根据所述存储器存储的埋点精准定位归档数据和收集的埋点精准定位数据,校验老埋点,确认是否丢失或者被修改。本申请还公开了一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质存储指令,所述指令在由处理器执行时使得所述处理器执行如前所述的埋点测试方法的步骤。本申请还公开了一种电子设备,包括如前所述的非易失性计算机可读存储介质、以及可访问所述非易失性计算机可读存储介质的所述处理器。由上述技术方案可见,本申请提供的埋点测试方法及设备,通过解析工具分析埋点代码,收集埋点精准定位数据,并根据埋点精准定位数据测试埋点,可以实现对新埋点的检查,检查是否埋错或者遗漏,也可以通过比对对老埋点进行校验,从而无需全部回归,大大节省了系统测试时间。附图说明图1为本申请收集埋点精准定位数据的流程示意图;图2为本申请埋点测试方法设备的组成结构示意图。具体实施方式为使本申请的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本申请作进一步详细说明。本申请提出的埋点测试方法主要包括以下步骤:步骤1:通过解析工具分析埋点代码,收集埋点精准定位数据。其中,本步骤可以包括以下两部分内容:1)根据埋点方式定义埋点精准定位数据;2)通过解析工具分析埋点代码,并根据不同的埋点方式采用对应的方法收集埋点精准定位数据。步骤2:根据埋点精准定位数据测试埋点。测试埋点包括:测试新埋点和旧埋点,具体包括:1)根据埋点精准定位数据,确认新埋点是否埋错或者遗漏;2)根据埋点精准定位归档数据和埋点精准定位数据,校验老埋点,确认是否丢失或者被修改。下面对上述方法予以详细说明。一、添加埋点的方式以及埋点上报方式。以安卓客户端为例,添加埋点的方式有三种:1)静态代码埋点:在java/kotlin代码的方法中添加埋点,并在调用方法时上报;2)可视化埋点:在xml布局的控件属性(android:contentdescription)中添加埋点,并在aop(面向切面编程:aspectorientedprogramming)切入点击事件时上报;3)动态代码埋点:在自定义对话框按钮的回调参数中添加埋点,并在用户点击按钮时上报。其他客户端添加埋点方式和埋点上报方式也基本一致,比如ios客户端的objective-c和swift代码埋点。二、通过解析工具分析埋点代码,收集埋点精准定位数据。本申请收集埋点精准定位数据的流程如图1所示,主要包括:针对不同代码格式的埋点文件采用对应的解析工具进行解析,并根据不同的埋点方式采用对应的方法从解析结果中收集埋点精准定位数据。以安卓客户端为例,代码解析方式有三种:1)java代码解析基于javaparser库,通过javaparser.parse(filefile)将java代码文本解析为一棵compilationunit类型的抽象语法树,该树接受voidvisitoradapter对象(compilationunit.accept(voidvisitoradapter,null))在语法树上进行搜索遍历,然后根据遇到的节点的类型调用具体的回调,当在voidvisit(methoddeclarationn,objectarg)回调中判断方法内存在埋点代码时,输出包名、类名、方法名+参数+行数、埋点key+行数+方式等数据。2)kotlin代码解析通过kotlin编译器库中的相关类将kotlin代码文本解析为一棵ktfile类型的抽象语法树,该树接受kttreevisitorvoid对象(ktfile.acceptchildren(kttreevisitorvoid))在语法树上进行搜索遍历,然后根据遇到的节点的类型调用具体的回调,当在voidvisitnamedfunction(ktnamedfunctionfunction)回调中判断方法内存在埋点代码时,输出包名、类名、方法名+参数+行数、埋点key+行数+方式等数据。具体数据举例如表1所示:表13)xml代码解析基于beautifulsoup库,对xml代码文本进行处理,生成剖析树(parsetree),在树上进行搜索遍历,输出所有符合条件的子节点属性值,查找所有含android:contentdescription属性的子节点,并输出文件名、控件id+行数、埋点key+行数+方式等数据。具体数据如表2所示:文件类型文件名控件id控件id行数埋点key埋点行数埋点方式xmlfingerprints_login_page.xml@+id/user_name231611832aop切入xmlfingerprints_login_page.xml@+id/fingerprint_image361612044aop切入表2针对上述三种不同的埋点方式,本申请提供三种对应的截取埋点key的方法:对于静态代码埋点,判断是否调用埋点方法,如果调用,则从回调参数中截取埋点key;对于动态代码埋点,判断自定义对话框按钮的回调参数中是否有数字,如果有,则从中截取该数字作为埋点key;对于可视化埋点,判断android:contentdescription属性是否存在且为数字,如果是,则从中截取该数字为埋点key。这里,埋点key是埋点的唯一标识,可用于对埋点进行索引。其他客户端的代码基于对应的解析库,也可将代码解析为抽象语法树,输出代码和埋点信息,比如ios客户端的objective-c和swift代码可基于clang库解析抽象语法树。三、通过埋点精准定位数据测试埋点通过埋点精准定位数据测试埋点场景可分为3个:1.开发新增埋点后,收集新埋点的埋点精准定位数据来确认是否埋错或者遗漏。具体而言:比如计划新增100个埋点,可以预先将需要新增的埋点的相关信息整理出来,在新增埋点后,采用本申请上述方法收集新埋点的埋点精准定位数据,通过将计划新增的埋点数据与收集的埋点精准定位数据进行自动比对,即可确认是否存在埋错或遗漏的情况。例如:假设只收集到98个埋点的埋点精准定位数据,则意味着遗漏了2个埋点,通过埋点key即可准确定位是哪2个埋点遗漏了。再例如:通过比对发现某一个埋点的行数与原计划不符,即可确认该埋点埋错了。2.完成新埋点验证后,收集新埋点的埋点精准定位数据,将其归档为老埋点数据进行存储,本申请称为:埋点精准定位归档数据。3.产品经迭代过程后,采用本申请上述方法收集老埋点的埋点精准定位数据,将之与埋点精准定位归档数据进行对比校验,确认是否丢失或者被修改。具体而言:如前所述,埋点可以用埋点key进行索引,产品迭代后,通过收集老埋点的埋点精准定位数据,并将之与之前存储的埋点精准定位归档数据进行对比,如果某一个埋点的行数不符,则可确认该埋点被修改。或者,某埋点key不存在,即可确认该埋点丢失。对应于上述方法,本申请提供了一种埋点测试设备,其组成结构如图2所示,至少包括:处理器,所述处理器用于:通过解析工具分析埋点代码,收集埋点精准定位数据;根据埋点精准定位数据测试埋点。其中,所述处理器可以具体用于:针对不同代码格式的埋点文件采用对应的解析工具进行解析;根据不同的埋点方式采用对应的方法从解析结果中收集埋点精准定位数据。其中,所述处理器可以具体用于:基于代码格式对应的解析库,将代码解析为抽象语法树,并输出代码和埋点信息。其中,所述处理器可以具体用于:对于java格式的代码,基于javaparser库,通过javaparser.parse(filefile)将java代码文本解析为compilationunit类型的抽象语法树,该树接受voidvisitoradapter对象compilationunit.accept(voidvisitoradapter,null)在语法树上进行搜索遍历,然后根据遇到的节点的类型调用具体的回调,当在voidvisit(methoddeclarationn,objectarg)回调中判断方法内存在埋点代码时,输出包名、类名、方法名+参数+行数、埋点key+行数+方式。其中,所述处理器可以具体用于:对于kotlin格式的代码,通过kotlin编译器库中的相关类将kotlin代码文本解析为ktfile类型的抽象语法树,该树接受kttreevisitorvoid对象ktfile.acceptchildren(kttreevisitorvoid)在语法树上进行搜索遍历,然后根据遇到的节点的类型调用具体的回调,当在voidvisitnamedfunction(ktnamedfunctionfunction)回调中判断方法内存在埋点代码时,输出包名、类名、方法名+参数+行数、埋点key+行数+方式。其中,所述处理器可以具体用于:对于xml格式的代码,基于beautifulsoup库,对xml代码文本进行处理,生成剖析树,在树上进行搜索遍历,输出所有符合条件的子节点属性值,查找所有包含android:contentdescription属性的子节点,并输出文件名、控件id+行数、埋点key+行数+方式。其中,所述处理器可以具体用于:对于静态代码埋点,判断是否调用埋点方法,如果调用,则从回掉参数中截取埋点key;对于动态代码埋点,判断自定义对话框按钮的回调参数中是否有数字,如果有,则从中截取该数字作为埋点key;对于可视化埋点,判断android:contentdescription属性是否存在且为数字,如果是,则从中截取该数字为埋点key。图2所示设备中还可以包括存储器,所述处理器具体用于:根据埋点精准定位数据,确认新埋点是否埋错或者遗漏,并在测试通过后,将埋点精准定位数据作为埋点精准定位归档数据存储到存储器中;根据所述存储器存储的埋点精准定位归档数据和收集的埋点精准定位数据,校验老埋点,确认是否丢失或者被修改。此外,本申请还提供了一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质存储指令,所述指令在由处理器执行时使得所述处理器执行如前所述的埋点测试方法的步骤。此外,本申请还提供了一种电子设备,包括如上所述的非易失性计算机可读存储介质、以及可访问所述非易失性计算机可读存储介质的所述处理器。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1