测试脚本代码的封装方法及装置
文献发布时间:2024-04-18 19:58:26
技术领域
本公开涉及自动化测试技术领域,具体涉及页面测试技术领域,更具体地涉及一种测试脚本代码的封装方法、装置、设备、存储介质和程序产品。
背景技术
在UI端自动化测试脚本编写的过程中,为了提高工作效率,测试人员通常会采用一些带脚本录制功能的自动化测试工具来进行自动化脚本编写,当测试人员开始编制脚本时,通过自动化测试工具记录测试人员在浏览器中完成操作,测试工具自动形成对应的自动化测试脚本,相较于手工逐行编写的方式,使用该方式能够大幅提升自动化测试脚本的编写效率。
相关技术中,随着自动化测试脚本资产的大量积累,部分企业引入公共代码片段相似度分析的智能分析方式,对出现频度高的公共代码片段通过自动提取公共模块的方式,统一封装,供后续自动化脚本资产管理和新脚本编制使用。
然而这种只采用代码片段相似度分析的模式下,会出现部分基础流程被封装为公共模块,不同的细分场景被封装为其他公共模块的情况,导致细分的场景流程被封装到两个公共代码模块中,当某个细分流程由于客户化改造基础流程也有变动时,之前封装的两个公共代码模块均无法适配,公共模块自动封装方法实效,需要测试人员对该类脚本进行手工重新编写的情况。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
鉴于上述问题,本公开提供了提高自动化测试工作的效率的测试脚本代码的封装方法、装置、设备、介质和程序产品。
根据本公开的第一个方面,提供了一种测试脚本代码的封装方法,所述方法包括:
响应于测试脚本代码的封装指令,对测试脚本源代码进行第一相似度分析,以确定初始公共代码段;
对所述初始公共代码段进行聚类分析,以生成多个公共代码聚类;
将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合;
基于所述公共代码片段集合进行公共脚本封装,以确定目标公共代码段;以及
将目标公共代码段按照预设封装规则进行二次封装,以生成目标公共代码块。
根据本公开的实施例,所述对所述初始公共代码段进行聚类分析,以生成多个公共代码聚类包括:
对所述初始公共代码段进行第二相似度分析,以生成多个公共代码聚类。
根据本公开的实施例,所述对所述初始公共代码段进行第二相似度分析,以生成多个公共代码聚类包括:
将任一初始公共代码段作为一类,计算其他初始公共代码段与所述任一初始公共代码段的相似度;
将所述相似度大于第二预设阈值的初始公共代码段进行合并形成新的分类;以及
进行多轮聚类直至当前初始公共代码段之间的相似度小于第二预设阈值。
根据本公开的实施例,所述将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合包括:
统计所述公共代码聚类中初始公共代码段的被调用次数;以及
将所述被调用次数大于第一预设阈值的初始公共代码段进行排序,以生成公共代码片段集合。
根据本公开的实施例,所述基于所述公共代码片段集合进行公共脚本封装,以确定目标公共代码段包括:
通过文本内容比对确定公共代码片段集合中的相同代码片段和不同代码片段;
对所述相同代码片段进行合并处理;以及
对所述不同代码片段进行分支判断处理。
根据本公开的实施例,所述将目标公共代码段按照预设封装规则进行二次封装,以生成目标公共代码块包括:
根据所述目标公共代码段中的操作对象类型确定目标封装规则;以及
根据所述目标封装规则对所述目标公共代码段进行封装,以生成目标公共代码块。
根据本公开的实施例,所述根据所述公共代码中的操作对象类型确定目标封装规则包括:
若确定所述操作对象类型为获取浏览器连接操作,则确定所述目标封装规则为在获取浏览器连接操作后增加等待和窗口最大化操作;
若确定所述操作对象类型为点击操作,则确定所述目标封装规则为在点击操作后增加等待时间;以及
若确定所述操作对象类型为输入操作,则确定所述目标封装规则为在输入操作前增加同元素的点击操作。
根据本公开的实施例,在生成目标公共代码块之后,还包括:
对所述目标公共代码块的有效性进行验证;以及
根据有效性验证结果生成公共代码块管理清单。
根据本公开的实施例,所述对所述目标公共代码块的有效性进行验证包括:
将所述目标公共代码块替换测试脚本中对应公共代码片段,以生成目标测试脚本;
执行所述目标测试脚本,以获取所述目标测试脚本的执行成功率;
当确定所述执行成功率大于等于第三预设阈值,则确定所述目标公共代码块有效;以及
当确定所述执行成功率小于第三预设阈值,则确定所述目标公共代码块无效。
根据本公开的实施例,所述对测试脚本源代码进行第一相似度分析,以确定初始公共代码段包括:
对测试脚本源代码进行预处理,以生成目标测试脚本代码信息;
使用文本关键词抽取算法对所述目标测试脚本代码信息进行词频分析,以生成词频分析结果;以及
确定所述目标测试脚本代码信息中词频大于第四预设阈值的代码为初始公共代码段。
根据本公开的实施例,所述对测试脚本源代码进行预处理,以生成目标测试脚本代码信息包括:
对测试脚本源代码进行扫描,以识别所述测试脚本源代码中的测试页面操作对象;
根据所述测试页面操作对象确定所述测试页面操作对象的操作动作信息和处理方法信息;
对所述测试页面操作对象进行哈希运算,以生成哈希值;以及
根据所述测试页面操作对象信息、所述操作动作信息、所述处理方法信息和所述哈希值生成目标测试脚本代码信息。
根据本公开的实施例,所述使用文本关键词抽取算法对所述目标测试脚本代码信息进行词频分析,以生成词频分析结果包括:
根据预设步长按照脚本执行顺序对所述目标测试脚本代码进行抽取,以生成第一目标代码;
计算所述第一目标代码的词频信息;以及
根据所述词频信息生成词频分析结果。
本公开的第二方面提供了一种测试脚本代码的封装装置,所述装置包括:
初始公共代码段确定模块,用于响应于测试脚本代码的封装指令,对测试脚本源代码进行第一相似度分析,以确定初始公共代码段;
聚类分析模块,用于对所述初始公共代码段进行聚类分析,以生成多个公共代码聚类;
公共代码片段集合生成模块,用于将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合;
目标公共代码段确定模块,用于基于所述公共代码片段集合进行公共脚本封装,以确定目标公共代码段;以及
目标公共代码块生成模块,用于将目标公共代码段按照预设封装规则进行封装,以生成目标公共代码块。
根据本公开的实施例,所述聚类分析模块包括聚类分析子模块;
聚类分析子模块,用于对所述初始公共代码段进行第二相似度分析,以生成多个公共代码聚类。
根据本公开的实施例,所述聚类分析子模块包括:相似度计算单元、合并单元和聚类单元。
相似度计算单元,用于将任一公共代码段作为一类,计算其他公共代码段与所述任一公共代码段的相似度;
合并单元,用于将所述相似度大于第二预设阈值的公共代码段进行合并形成新的分类;以及
聚类单元,用于进行多轮聚类直至当前公共代码段之间的相似度小于第二预设阈值。
根据本公开的实施例,所述公共代码片段集合生成模块包括统计子模块和公共代码片段集合生成子模块。
统计子模块,用于统计所述公共代码聚类中初始公共代码段的被调用次数;以及
公共代码片段集合生成子模块,用于将所述被调用次数大于第一预设阈值的初始公共代码段进行排序,以生成公共代码片段集合。
根据本公开的实施例,所述目标公共代码段确定模块包括:比对子模块、合并子模块和分支判断处理子模块。
比对子模块,用于通过文本内容比对确定公共代码片段集合中的相同代码片段和不同代码片段;
合并子模块,用于对所述相同代码片段进行合并处理;以及
分支判断处理子模块,用于对所述不同代码片段进行分支判断处理。
根据本公开的实施例,目标公共代码块生成模块包括:第一确定子模块和目标公共代码块生成子模块。
第一确定子模块,用于根据所述目标公共代码段中的操作对象类型确定目标封装规则;以及
目标公共代码块生成子模块,用于根据所述目标封装规则对所述目标公共代码段进行封装,以生成目标公共代码块。
根据本公开的实施例,第一确定子模块包括第一确定单元、第二确定单元和第三确定单元。
第一确定单元,用于若确定所述操作对象类型为获取浏览器连接操作,则确定所述目标封装规则为在获取浏览器连接操作后增加等待和窗口最大化操作;
第二确定单元,用于若确定所述操作对象类型为点击操作,则确定所述目标封装规则为在点击操作后增加等待时间;以及
第三确定单元,用于若确定所述操作对象类型为输入操作,则确定所述目标封装规则为在输入操作前增加同元素的点击操作。
根据本公开的实施例,还包括:验证模块和公共代码块管理清单生成模块。
验证模块,用于对所述目标公共代码块的有效性进行验证;以及
公共代码块管理清单生成模块,用于根据有效性验证结果生成公共代码块管理清单。
根据本公开的实施例,公共代码块管理清单生成模块包括:目标测试脚本生成子模块、获取子模块、第二确定子模块和第三确定子模块。
目标测试脚本生成子模块,用于将所述目标公共代码块替换测试脚本中对应公共代码片段,以生成目标测试脚本;
获取子模块,用于执行所述目标测试脚本,以获取所述目标测试脚本的执行成功率;
第二确定子模块,用于当确定所述执行成功率大于等于第三预设阈值,则确定所述目标公共代码块有效;以及
第三确定子模块,用于当确定所述执行成功率小于第三预设阈值,则确定所述目标公共代码块无效。
根据本公开的实施例,初始公共代码段确定模块包括:预处理子模块、词频分析子模块和第四确定子模块。
预处理子模块,用于对测试脚本源代码进行预处理,以生成目标测试脚本代码信息;
词频分析子模块,用于使用文本关键词抽取算法对所述目标测试脚本代码信息进行词频分析,以生成词频分析结果;以及
第四确定子模块,用于确定所述目标测试脚本代码信息中词频大于第四预设阈值的代码为初始公共代码段。
根据本公开的实施例,预处理子模块包括:扫描单元、第四确定单元、哈希值计算单元和目标测试脚本代码信息生成单元。
扫描单元,用于对测试脚本源代码进行扫描,以识别所述测试脚本源代码中的测试页面操作对象;
第四确定单元,用于根据所述测试页面操作对象确定所述测试页面操作对象的操作动作信息和处理方法信息;
哈希值计算单元,用于对所述测试页面操作对象进行哈希运算,以生成哈希值;以及
目标测试脚本代码信息生成单元,用于根据所述测试页面操作对象信息、所述操作动作信息、所述处理方法信息和所述哈希值生成目标测试脚本代码信息。
根据本公开的实施例,词频分析子模块包括:第一目标代码生成子模块、计算子模块和词频分析结果生成子模块。
第一目标代码生成子模块,用于根据预设步长按照脚本执行顺序对所述目标测试脚本代码进行抽取,以生成第一目标代码;
计算子模块,用于计算所述第一目标代码的词频信息;以及
词频分析结果生成子模块,用于根据所述词频信息生成词频分析结果。
本公开的第三方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述测试脚本代码的封装方法。
本公开的第四方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述测试脚本代码的封装方法。
本公开的第五方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述测试脚本代码的封装方法。
通过本公开的实施例提供的一种测试脚本代码的封装方法,在确定初始公共代码段之后,对初始公共代码段进行聚类分析得到多个公共代码聚类,统计每个公共代码聚类中初始公共代码段的被调用次数,将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合,对公共代码片段集合进行封装,确定目标公共代码段,将目标公共代码段按照预设封装规则进行二次封装,以生成目标公共代码块,提高了公用代码模块封装的完整性,减少公共代码块的脚本数量,便于公共代码块的保险维护。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的测试脚本代码的封装方法、装置、设备、介质和程序产品的应用场景图;
图2示意性示出了根据本公开实施例提供的一种测试脚本代码的封装方法的流程图;
图3a示意性示出了根据本公开实施例提供的一种初始公共代码段的确定方法的流程图之一;
图3b示意性示出了根据本公开实施例提供的一种初始公共代码段的确定方法的流程图之二;
图3c示意性示出了根据本公开实施例提供的一种初始公共代码段的确定方法的流程图之三;
图4a示意性示出了根据本公开实施例提供的一种公共代码聚类分析方法的流程图之一;
图4b示意性示出了根据本公开实施例提供的一种公共代码聚类分析方法的流程图之二;
图5示意性示出了根据本公开实施例提供的一种公共代码片段集合生成方法的流程图;
图6示意性示出了根据本公开实施例提供的一种目标公共代码片段的确定方法的流程图;
图7a示意性示出了根据本公开实施例提供的一种目标公共代码块的封装方法的流程图之一;
图7b示意性示出了根据本公开实施例提供的一种目标公共代码块的封装方法的流程图之二;
图8a示意性示出了根据本公开实施例提供的目标公共代码块验证方法的流程图之一;
图8b示意性示出了根据本公开实施例提供的目标公共代码块验证方法的流程图之二;
图9示意性示出了根据本公开实施例的一种测试脚本代码的封装装置的结构框图;以及
图10示意性示出了根据本公开实施例的适于实现测试脚本代码的封装方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
基于上述技术问题,本公开的实施例提供了一种测试脚本代码的封装方法,所述方法包括:响应于测试脚本代码的封装指令,对测试脚本源代码进行第一相似度分析,以确定初始公共代码段;对所述初始公共代码段进行聚类分析,以生成多个公共代码聚类;将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合;基于所述公共代码片段集合进行公共脚本封装,以确定目标公共代码段;以及将目标公共代码段按照预设封装规则进行二次封装,以生成目标公共代码块。
图1示意性示出了根据本公开实施例的测试脚本代码的封装方法、装置、设备、介质和程序产品的应用场景图。
如图1所示,根据该实施例的应用场景100可以包括页面测试脚本自动化测试场景。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是为页面测试脚本管理服务器,针对用户通过应用服务器发起的测试脚本代码的封装指令,例如响应于用户利用终端设备101、102、103所发出的测试脚本代码的封装指令,该页面测试脚本管理服务器对存量测试脚本代码进行预处理,词频分析抽取出公共代码部分,对公共代码进行聚类分析,将同一类的公共代码进行合并并按照预设封装规则进行封装生成公共代码块。
需要说明的是,本公开实施例所提供的测试脚本代码的封装方法一般可以由服务器105执行。相应地,本公开实施例所提供的测试脚本代码的封装装置一般可以设置于服务器105中。本公开实施例所提供的测试脚本代码的封装方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的测试脚本代码的封装装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
需要说明的是,本公开实施例确定的测试脚本代码的封装方法和装置可用于自动化测试技术领域,也可用于金融技术领域,还可用于除金融领域之外的任意领域,本公开实施例确定的测试脚本代码的封装方法和装置的应用领域不做限定。
以下将基于图1描述的场景,通过图2~图8对本公开实施例的测试脚本代码的封装方法进行详细描述。
图2示意性示出了根据本公开实施例提供的一种测试脚本代码的封装方法的流程图。如图2所示,该实施例的测试脚本代码的封装方法包括操作S210~操作S250,该方法可以由自动化测试脚本代码模块智能封装装置执行。
在操作S210,响应于测试脚本代码的封装指令,对测试脚本源代码进行第一相似度分析,以确定初始公共代码段。
一个示例中,在类似功能或者同交易类型的业务场景所对应的自动化测试脚本中,存在大量的重复代码片段;此外由于不同测试开发人员的开发习惯,导致相同功能的代码不完全一致,当该重复代码片段中对应功能发生变动时,所有相关自动化测试脚本都需要进行调整,产生了大量的重复冗余工作量。为了减少测试脚本源代码中存在的大量冗余代码,对源代码进行相似度分析,将相似的代码片段作为公共代码段封装使用,在某个系统功能发生变更,对应的自动化测试脚本代码进行保鲜维护时,大大降低测试开发人员对存量自动化测试脚本的保鲜维护成本,以及对高频使用公共模块进行模块化封装的工作成本,提高自动化测试工作的效率,降低资源投入。具体相似度分析过程可参见图3a~图3c所示出的操作步骤,在此不再赘述。
在操作S220,对所述初始公共代码段进行聚类分析,以生成多个公共代码聚类。
在操作S230,将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合。
在操作S240,基于所述公共代码片段集合进行公共脚本封装,以确定目标公共代码段。
一个示例中,在金融业务中,由于细分业务场景不同导致同一功能的脚本代码可能被封装成多个初始公共代码段,例如不同理财产品的购买流程,“添利宝”产品购买时需要选择介质类型,“全鑫权益”和“鑫稳利”产品需要选择分支机构和资金账号,持此不同以外,整体购买流程是相同的,均需要输入购买金额、阅读产品说明书及进行U盾验签。使用U盾进行企网登录时,不同厂家的U盾弹出的界面样式不同,也会导致脚本被封装到不同的公共代码模块中。为了减少公共代码块的数量,便于后期的保鲜维护,对操作S210得到的初始公共代码段进行聚类分析,将业务类别不同实际功能相同或相似的代码片段合并为同一个公共代码聚类,公共代码聚类生成过程可参见图4a和图4b所示的操作步骤。
一个示例中,在生成多个公共代码聚类后,对每个公共代码聚类进行二次分析,具体的,确定每个公共代码聚类中的每一初始公共代码段的被调用次数,若被调用次数少于等于第一预设阈值,则确定该公共代码段使用较少,无需进行公共脚本封装。若被调用次数大于第一预设阈值,则确定该公共代码段使用频次较高,需要进行公共脚本封装以提高公共代码块的质量,将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合,具体过程可参见图5所示的操作S231和操作S232。
在形成公共代码片段集合之后,基于公共代码片段集合进行公共脚本封装,对公共代码片段进行合并形成新的公共代码段,即目标公共代码段,具体过程可参见图6所示的操作241~操作S243。
在操作S250,将目标公共代码段按照预设封装规则进行二次封装,以生成目标公共代码块。
一个示例中,为了提高公共代码模块化的执行成功率,在确定目标公共代码段后,将操作S240中最终得到的目标公共代码段中存在的代码信息按照预设封装规则进行智能化方法封装,通过公共代码调用的方式,完成存量自动化测试脚本的模块化封装,具体封装规则和封装过程可参见图7a~图7b所示出的操作步骤,在此不再赘述。
通过本公开的实施例提供的一种测试脚本代码的封装方法,在确定初始公共代码段之后,对初始公共代码段进行聚类分析得到多个公共代码聚类,统计每个公共代码聚类中初始公共代码段的被调用次数,将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合,对公共代码片段集合进行封装,确定目标公共代码段,将目标公共代码段按照预设封装规则进行二次封装,以生成目标公共代码块,提高了公用代码模块封装的完整性,减少公共代码块的脚本数量,便于公共代码块的保险维护。
图3a示意性示出了根据本公开实施例提供的一种初始公共代码段的确定方法的流程图之一,图3b示意性示出了根据本公开实施例提供的一种初始公共代码段的确定方法的流程图之二,图3c示意性示出了根据本公开实施例提供的一种初始公共代码段的确定方法的流程图之三。
如图3a所示,操作S210包括操作S211~操作S213。
在操作S211,对测试脚本源代码进行预处理,以生成目标测试脚本代码信息。
如图3b所示,操作S211包括操作S2111~操作S2114。
在操作S2111,对测试脚本源代码进行扫描,以识别所述测试脚本源代码中的测试页面操作对象。
在操作S2112,根据所述测试页面操作对象确定所述测试页面操作对象的操作动作信息和处理方法信息。
在操作S2113,对所述测试页面操作对象进行哈希运算,以生成哈希值。
在操作S2114,根据所述测试页面操作对象信息、所述操作动作信息、所述处理方法信息和所述哈希值生成目标测试脚本代码信息。
一个示例中,扫描测试脚本代码中的测试页面操作对象,所述测试页面操作对象包括页面中的控件元素,例如可以是输入框、点击按钮等等,根据测试页面操作对象的类型结合测试脚本代码确定每一测试页面操作对象对应的操作动作信息和处理方法信息,其中处理方法信息包括判断循环语句,例如ifelseif条件判断语句。为了方便后期的词频分析统计,需对测试页面操作对象进行哈希运算得到哈希值,即同一测试页面操作对象哈希值相同,根据测试页面操作对象信息、操作动作信息、处理方法信息和哈希值生成目标测试脚本代码信息,可见下表1。
表1目标测试脚本代码信息表
在操作S212,使用文本关键词抽取算法对所述目标测试脚本代码信息进行词频分析,以生成词频分析结果。
在操作S213,确定所述目标测试脚本代码信息中词频大于第四预设阈值的代码为初始公共代码段。
如图3c所示,操作S212包括操作S2121~操作S2123。
在操作S2121,根据预设步长按照脚本执行顺序对所述目标测试脚本代码进行抽取,以生成第一目标代码。
在操作S2122,计算所述第一目标代码的词频信息。
在操作S2123,根据所述词频信息生成词频分析结果。
一个示例中,对预处理后的自动化测试脚本进行相似度分析,使用文本关键词抽取算法,将公共代码块进行提取,封装,封装后的代码块提交给公共代码定义模块进行存放处理,状态置为待验证,并且记录对应关系。文本关键词抽取算法是对降噪后的代码进行处理,按照正向+词频+步长的方式对脚本内容进行抽取。正向是指必须按照脚本的执行顺序进行抽取,预设步长,例如可以是6行,按照脚本执行顺序抽取6行代码作为第一目标代码,计算该第一目标代码在脚本中出现的频率,得到词频信息,对词频信息进行分析,词频达到一定条件的代码即可作为公共代码进行封装。
图4a示意性示出了根据本公开实施例提供的一种公共代码聚类分析方法的流程图之一,图4b示意性示出了根据本公开实施例提供的一种公共代码聚类分析方法的流程图之二。
如图4a所示,操作S220包括操作S221。
在操作S221,对所述初始公共代码段进行第二相似度分析,以生成多个公共代码聚类。
如图4b所示,操作S221包括操作S2211~操作S2213。
在操作S2211,将任一公共代码段作为一类,计算其他公共代码段与所述任一公共代码段的相似度。
在操作S2212,将所述相似度大于第二预设阈值的公共代码段进行合并形成新的分类。
在操作S2213,进行多轮聚类直至当前公共代码段之间的相似度小于第二预设阈值。
一个示例中,采用聚类算法对初始公共代码段进行聚类分析,即相似度分析。以HAC(Hierarchy)层次凝聚聚类算法为例,任一选择一个初始公共代码段作为单独一类,计算其他初始公共代码段与该初始公共代码段的相似度,将相似度大于第二预设阈值的初始公共代码段合并形成新的分类,第二预设阈值例如可以是80%,继续重复上述步骤,在剩余初始公共代码段中任选一个初始公共代码段作为单独一类,计算相似度进行多轮聚类直至当前类目下不存在相似度大于第二预设阈值的初始公共代码段,终止聚类分析,得到不同的公共代码聚类群体A/B/C/D。
图5示意性示出了根据本公开实施例提供的一种公共代码片段集合生成方法的流程图。如图5所示,操作S230包括操作S231和操作S232。
在操作S231,统计所述公共代码聚类中初始公共代码段的被调用次数。
在操作S232,将所述被调用次数大于第一预设阈值的初始公共代码段进行排序,以生成公共代码片段集合。
一个示例中,每个公共代码聚类中的初始公共代码段都有80%的相似度,但是每个公共代码段在脚本中被调用的频率不一样。对不同的聚类群体进行数量排序,统计公共代码聚类中初始公共代码段的被调用次数,确定被自动化脚本引用数大于第一预设阈值的公共代码片段集合,第一预设阈值例如可以是5次,形成A1B1C1D1。基于A1B1C1D1公共代码片段的被调用次数,从大到小排序,形成本群体中的新有序集合A11,A12,A13,A14。
图6示意性示出了根据本公开实施例提供的一种目标公共代码片段的确定方法的流程图。如图6所示,操作S240包括操作241~操作S243。
在操作S241,通过文本内容比对确定公共代码片段集合中的相同代码片段和不同代码片段。
在操作S242,对所述相同代码片段进行合并处理。
在操作S243,对所述不同代码片段进行分支判断处理。
一个示例中,以公共代码片段集合A11,A12,A13,A14为例,重新基于A11,A12,A13,A14进行公共脚本封装,首先通过文本内容比对得到A11,A12,A13,A14中的相同片段和不同片段,对相同片段进行合并处理,对不同片段进行分支判断处理,最终形成新的公共代码模块A’。A’中的流程能同时满足A11,A12,A13,A14脚本中的处理流程。例如某一U盾登陆企网的脚本中共有A11,A12,A13,A14四个初始公共代码段,经过文本对比分析确定在激活U盾密码框之前的操作都是一致的,输入密码的操作也是一致的,差异点在激活、点击U盾密码框以及点击确定按钮步骤,将相同的操作对应的代码进行合并处理,对不同代码片段进行分支判断处理。
图7a示意性示出了根据本公开实施例提供的一种目标公共代码块的封装方法的流程图之一。图7b示意性示出了根据本公开实施例提供的一种目标公共代码块的封装方法的流程图之二。如图7a所示,操作S250包括操作S251~操作S252。
在操作S251,根据所述目标公共代码段中的操作对象类型确定目标封装规则。
在操作S252,根据所述目标封装规则对所述目标公共代码段进行封装,以生成目标公共代码块。
如图7b所示,操作S251包括操作S2511~操作S2513。
在操作S2511,若确定所述操作对象类型为获取浏览器连接操作,则确定所述目标封装规则为在获取浏览器连接操作后增加等待和窗口最大化操作。
在操作S2512,若确定所述操作对象类型为点击操作,则确定所述目标封装规则为在点击操作后增加等待时间。
在操作S2513,若确定所述操作对象类型为输入操作,则确定所述目标封装规则为在输入操作前增加同元素的点击操作。
一个示例中,当任一操作对象对应的第一目标代码的词频达到当前脚本总数量的预设阈值时,例如脚本总数的5%,则对该第一目标代码进行封装,为了提高封装后的公共代码执行的成功率,保证测试脚本的顺利执行,需要使用预设封装规则进行封装。具体规则有:
(1)获取浏览器连接操作(driver.get)后增加等待和窗口最大化操作(driver.manage().window().maximize();)。模拟页面打开的操作,增加等待时间等待页面加载,当页面加载后增加窗口最大化操作。
(2)点击操作(click)后增加等待时间。为了屏蔽网络差异对页面测试产生的影响,在进行点击操作后增加等待时间,等待服务器响应。
(3)输入操作(sendKeys)前增加同元素的点击操作。为了保证能够成功在输入框输入信息,在输入操作前增加同元素的点击操作,确保当前输入框处于激活状态。
(4)if条件判断结束后增加屏幕截图操作。
根据不同的操作对象类型确定对应的封装规则进行封装生成目标公共块。在生成目标公共代码块后需对该公共代码块进行有效性的验证。
图8a示意性示出了根据本公开实施例提供的目标公共代码块验证方法的流程图之一。图8b示意性示出了根据本公开实施例提供的目标公共代码块验证方法的流程图之二,如图8a所示,包括操作S310和操作S320。
在操作S310,对所述目标公共代码块的有效性进行验证。
如图8b所示,操作S310包括操作S311~操作S314。
在操作S311,将所述目标公共代码块替换测试脚本中对应公共代码片段,以生成目标测试脚本。
在操作S312,执行所述目标测试脚本,以获取所述目标测试脚本的执行成功率。
在操作S313,当确定所述执行成功率大于等于第三预设阈值,则确定所述目标公共代码块有效。
在操作S314,当确定所述执行成功率小于第三预设阈值,则确定所述目标公共代码块无效。
一个示例中,公共代码块有效性验证规则如下:
(1)若80%的自动化测试脚本执行通过,证明封装成功,将公共代码块定义模块中对应的公共代码状态置为验证通过,并且将已执行通过的自动化测试脚本对应内容进行模块化封装后的版本更新到自动化测试脚本资产库中。
(2)若80%执行不通过,重新调整代码公共片段,并且将不通过的代码片段放入不通过代码特征库中,后续比对过程中出现相应代码块时,不再进行二次封装处理。同时将脚本回退为上一个版本。
在操作S320,根据有效性验证结果生成公共代码块管理清单。
一个示例中,为了避免重复抽取验证,提高公共代码块的生成效率,将上述验证结果生成公共代码块管理清单,详见表2公共代码块管理清单。记录公共代码块的状态,用来存放已封装好的公共代码块,以及公共代码块及引用到该代码块的自动化测试脚本对应清单对照关系,公共代码块定义有两个来源:本装置自动化智能封装的公共模块及测试人员手工封装的公共模块。测试人员手工封装的公共模块主要用于已知的、不适合按以上模型进行封装的部分,对于这些不能进行封装的公共代码,可以直接将对应信息完善到公共代码块定义模块中,避免重复进行筛选,导致资源浪费。
表2公共代码块管理清单
/>
通过本公开实施例提供的测试脚本代码的封装方法,通过智能化地将原有自动化测试脚本中的代码块调整为公共模块引用方式,简化自动化测试脚本结构,并且智能化形成公共代码块资产;同时能够实现对脚本中存在的误操作点击或者是重复点击等无效操作进行智能化分析,自动剔除无效误操作,在封装的代码片段中删除掉原有无效操作脚本语句。然后自动进行封装,大大简化了自动化测试脚本结构,降低无效冗余代码量,提供自动化脚本公共模块封装质量和执行效率。
基于上述测试脚本代码的封装方法,本公开还提供了一种测试脚本代码的封装装置。以下将结合图9对该装置进行详细描述。
图9示意性示出了根据本公开实施例的一种测试脚本代码的封装装置的结构框图。
如图9所示,该实施例的测试脚本代码的封装装置900包括初始公共代码段确定模块910、聚类分析模块920、公共代码片段集合生成模块930、目标公共代码段确定模块940和目标公共代码块生成模块950。
初始公共代码段确定模块910用于响应于测试脚本代码的封装指令,对测试脚本源代码进行第一相似度分析,以确定初始公共代码段。在一实施例中,初始公共代码段确定模块910可以用于执行前文描述的操作S210,在此不再赘述。
聚类分析模块920用于对所述初始公共代码段进行聚类分析,以生成多个公共代码聚类。在一实施例中,聚类分析模块920可以用于执行前文描述的操作S220,在此不再赘述。
公共代码片段集合生成模块930用于将所述公共代码聚类中被调用次数大于第一预设阈值的初始公共代码段形成公共代码片段集合。在一实施例中,公共代码片段集合生成模块930可以用于执行前文描述的操作S230,在此不再赘述。
目标公共代码段确定模块940用于基于所述公共代码片段集合进行公共脚本封装,以确定目标公共代码段。在一实施例中,目标公共代码段确定模块940可以用于执行前文描述的操作S240,在此不再赘述。
目标公共代码块生成模块950用于将目标公共代码段按照预设封装规则进行封装,以生成目标公共代码块。在一实施例中,目标公共代码块生成模块950可以用于执行前文描述的操作S250,在此不再赘述。
根据本公开的实施例,所述聚类分析模块包括聚类分析子模块;
聚类分析子模块,用于对所述初始公共代码段进行第二相似度分析,以生成多个公共代码聚类。在一实施例中,聚类分析子模块可以用于执行前文描述的操作S221,在此不再赘述。
根据本公开的实施例,所述聚类分析子模块包括:相似度计算单元、合并单元和聚类单元。
相似度计算单元,用于将任一公共代码段作为一类,计算其他公共代码段与所述任一公共代码段的相似度。在一实施例中,相似度计算单元可以用于执行前文描述的操作S2211,在此不再赘述。
合并单元,用于将所述相似度大于第二预设阈值的公共代码段进行合并形成新的分类。在一实施例中,合成单元可以用于执行前文描述的操作S2212,在此不再赘述。
聚类单元,用于进行多轮聚类直至当前公共代码段之间的相似度小于第二预设阈值。在一实施例中,聚类单元可以用于执行前文描述的操作S2213,在此不再赘述。
根据本公开的实施例,所述公共代码片段集合生成模块包括统计子模块和公共代码片段集合生成子模块。
统计子模块,用于统计所述公共代码聚类中初始公共代码段的被调用次数。在一实施例中,统计子模块可以用于执行前文描述的操作S231,在此不再赘述。
公共代码片段集合生成子模块,用于将所述被调用次数大于第一预设阈值的初始公共代码段进行排序,以生成公共代码片段集合。在一实施例中,公共代码片段集合生成子模块可以用于执行前文描述的操作S232,在此不再赘述。
根据本公开的实施例,所述目标公共代码段确定模块包括:比对子模块、合并子模块和分支判断处理子模块。
比对子模块,用于通过文本内容比对确定公共代码片段集合中的相同代码片段和不同代码片段。在一实施例中,比对子模块可以用于执行前文描述的操作S241,在此不再赘述。
合并子模块,用于对所述相同代码片段进行合并处理。在一实施例中,合并子模块可以用于执行前文描述的操作S242,在此不再赘述。
分支判断处理子模块,用于对所述不同代码片段进行分支判断处理。在一实施例中,分支判断处理子模块可以用于执行前文描述的操作S243,在此不再赘述。
根据本公开的实施例,目标公共代码块生成模块包括:第一确定子模块和目标公共代码块生成子模块。
第一确定子模块,用于根据所述目标公共代码段中的操作对象类型确定目标封装规则。在一实施例中,第一确定子模块可以用于执行前文描述的操作S251,在此不再赘述。
目标公共代码块生成子模块,用于根据所述目标封装规则对所述目标公共代码段进行封装,以生成目标公共代码块。在一实施例中,目标公共代码块生成子模块可以用于执行前文描述的操作S252,在此不再赘述。
根据本公开的实施例,第一确定子模块包括第一确定单元、第二确定单元和第三确定单元。
第一确定单元,用于若确定所述操作对象类型为获取浏览器连接操作,则确定所述目标封装规则为在获取浏览器连接操作后增加等待和窗口最大化操作。在一实施例中,第一确定单元可以用于执行前文描述的操作S2511,在此不再赘述。
第二确定单元,用于若确定所述操作对象类型为点击操作,则确定所述目标封装规则为在点击操作后增加等待时间。在一实施例中,第二确定单元可以用于执行前文描述的操作S2512,在此不再赘述。
第三确定单元,用于若确定所述操作对象类型为输入操作,则确定所述目标封装规则为在输入操作前增加同元素的点击操作。在一实施例中,第三确定单元可以用于执行前文描述的操作S2513,在此不再赘述。
根据本公开的实施例,还包括:验证模块和公共代码块管理清单生成模块。
验证模块,用于对所述目标公共代码块的有效性进行验证。在一实施例中,验证模块可以用于执行前文描述的操作S310,在此不再赘述。
公共代码块管理清单生成模块,用于根据有效性验证结果生成公共代码块管理清单。在一实施例中,公共代码块管理清单生成模块可以用于执行前文描述的操作S320,在此不再赘述。
根据本公开的实施例,公共代码块管理清单生成模块包括:目标测试脚本生成子模块、获取子模块、第二确定子模块和第三确定子模块。
目标测试脚本生成子模块,用于将所述目标公共代码块替换测试脚本中对应公共代码片段,以生成目标测试脚本。在一实施例中,公共代码块管理清单生成模块可以用于执行前文描述的操作S320,在此不再赘述。
获取子模块,用于执行所述目标测试脚本,以获取所述目标测试脚本的执行成功率。在一实施例中,获取子模块可以用于执行前文描述的操作S321,在此不再赘述。
第二确定子模块,用于当确定所述执行成功率大于等于预设阈值,则确定所述目标公共代码块有效。在一实施例中,第二确定子模块可以用于执行前文描述的操作S322,在此不再赘述。
第三确定子模块,用于当确定所述执行成功率小于预设阈值,则确定所述目标公共代码块无效。在一实施例中,第三确定子模块可以用于执行前文描述的操作S323,在此不再赘述。
根据本公开的实施例,初始公共代码段确定模块包括:预处理子模块、词频分析子模块和第四确定子模块。
预处理子模块,用于对测试脚本源代码进行预处理,以生成目标测试脚本代码信息。在一实施例中,预处理子模块可以用于执行前文描述的操作S211,在此不再赘述。
词频分析子模块,用于使用文本关键词抽取算法对所述目标测试脚本代码信息进行词频分析,以生成词频分析结果。在一实施例中,词频分析子模块可以用于执行前文描述的操作S212,在此不再赘述。
第四确定子模块,用于确定所述目标测试脚本代码信息中词频大于预设阈值的代码为初始公共代码段。在一实施例中,第四确定子模块可以用于执行前文描述的操作S213,在此不再赘述。
根据本公开的实施例,预处理子模块包括:扫描单元、第四确定单元、哈希值计算单元和目标测试脚本代码信息生成单元
扫描单元,用于对测试脚本源代码进行扫描,以识别所述测试脚本源代码中的测试页面操作对象。在一实施例中,扫描单元可以用于执行前文描述的操作S2111,在此不再赘述。
第四确定单元,用于根据所述测试页面操作对象确定所述测试页面操作对象的操作动作信息和处理方法信息。在一实施例中,第四确定单元可以用于执行前文描述的操作S2112,在此不再赘述。
哈希值计算单元,用于对所述测试页面操作对象进行哈希运算,以生成哈希值。在一实施例中,哈希值计算单元可以用于执行前文描述的操作S2113,在此不再赘述。
目标测试脚本代码信息生成单元,用于根据所述测试页面操作对象信息、所述操作动作信息、所述处理方法信息和所述哈希值生成目标测试脚本代码信息。在一实施例中,目标测试脚本代码信息生成单元可以用于执行前文描述的操作S2114,在此不再赘述。
根据本公开的实施例,词频分析子模块包括:第一目标代码生成子模块、计算子模块和词频分析结果生成子模块。
第一目标代码生成子模块,用于根据预设步长按照脚本执行顺序对所述目标测试脚本代码进行抽取,以生成第一目标代码。在一实施例中,第一目标代码生成子模块可以用于执行前文描述的操作S2121,在此不再赘述。
计算子模块,用于计算所述第一目标代码的词频信息。在一实施例中,计算子模块可以用于执行前文描述的操作S2122,在此不再赘述。
词频分析结果生成子模块,用于根据所述词频信息生成词频分析结果。在一实施例中,词频分析结果生成子模块可以用于执行前文描述的操作S2123,在此不再赘述。
根据本公开的实施例,初始公共代码段确定模块910、聚类分析模块920、公共代码片段集合生成模块930、目标公共代码段确定模块940和目标公共代码块生成模块950中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,初始公共代码段确定模块910、聚类分析模块920、公共代码片段集合生成模块930、目标公共代码段确定模块940和目标公共代码块生成模块950中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,初始公共代码段确定模块910、聚类分析模块920、公共代码片段集合生成模块930、目标公共代码段确定模块940和目标公共代码块生成模块950中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图10示意性示出了根据本公开实施例的适于实现测试脚本代码的封装方法的电子设备的方框图。
如图10所示,根据本公开实施例的电子设备1000包括处理器1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。处理器1001例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器1001还可以包括用于缓存用途的板载存储器。处理器1001可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 1003中,存储有电子设备1000操作所需的各种程序和数据。处理器1001、ROM 1002以及RAM 1003通过总线1004彼此相连。处理器1001通过执行ROM 1002和/或RAM1003中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 1002和RAM 1003以外的一个或多个存储器中。处理器1001也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备1000还可以包括输入/输出(I/O)接口1005,输入/输出(I/O)接口1005也连接至总线1004。电子设备1000还可以包括连接至I/O接口1005的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的测试脚本代码的封装方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 1002和/或RAM 1003和/或ROM 1002和RAM 1003以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的测试脚本代码的封装方法。
在该计算机程序被处理器1001执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1009被下载和安装,和/或从可拆卸介质1011被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被处理器1001执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
- 半导体装置封装以及形成半导体装置封装的方法
- 一种用于测试脚本的离线调试方法及装置
- 测试脚本的生成方法和装置
- 测试脚本的生成方法及装置
- 一种测试脚本的生成和执行方法及装置
- 测试脚本代码的封装方法及装置
- 测试脚本公共代码的生成方法及装置