CN115617668A - 一种兼容性测试方法、装置及设备 - Google Patents
一种兼容性测试方法、装置及设备 Download PDFInfo
- Publication number
- CN115617668A CN115617668A CN202211305678.1A CN202211305678A CN115617668A CN 115617668 A CN115617668 A CN 115617668A CN 202211305678 A CN202211305678 A CN 202211305678A CN 115617668 A CN115617668 A CN 115617668A
- Authority
- CN
- China
- Prior art keywords
- target application
- application program
- operating
- operating system
- test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本说明书实施例提供了一种兼容性测试方法、装置及电子设备。在测试待测操作***与目标应用程序之间的兼容性时,可以在保证目标应用程序在参考操作***和在待测操作***的运行环境一致的情况下,分别在上述两个操作***中运行该目标应用程序,并记录运行过程中形成的***调用序列等运行数据,然后可以通过比对在两个操作***中形成的***调用序列等运行数据是否一致,判定目标应用程序是否与待测操作***兼容。通过这种方式,对于一些新开发或新设计的操作***、或者一些特殊场景中使用的操作***,也能准确测试其与应用程序的兼容性。
Description
技术领域
本说明书实施例涉及计算机技术领域,尤其涉及一种兼容性测试方法、装置及电子设备。
背景技术
当对操作***的内核版本进行了更新,或者开发了新的操作***时,通常需要测试操作***与应用程序之间的兼容性,以确保应用程序可以在操作***上稳定运行。目前,在测试操作***与应用程序的兼容性时,有些方式是通过研发人员基于代码改动评估两者的兼容性,这种方式很难评估到位。有些方式是采用一些测试工具测试两者的兼容性,但是这些测试工具主要是判定操作***或应用程序是否符合预先定义的接口规范,这种方式仅适用于一些标准的操作***,对于一些新设计或开发的操作***,并不适用。
发明内容
为克服相关技术中存在的问题,本说明书实施例提供了一种兼容性测试方法、装置及电子设备。
根据本说明书实施例的第一方面,提供一种兼容性测试方法,所述方法包括:
获取在参考操作***上运行目标应用程序的过程中形成的参考运行数据,其中,所述参考操作***与所述目标应用程序兼容,所述参考运行数据至少包括参考***调用序列,所述目标应用程序的输入一致时,所述目标应用程序的运行结果一致;
获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,其中,在所述参考操作***上运行所述目标应用程序的运行环境与在所述待测操作***上运行所述目标应用程序的运行环境一致,所述测试运行数据至少包括测试***调用序列;
至少基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性。
在一些实施例中,所述参考运行数据为在按照预先设置的确定性处理规则对所述参考操作***中的运行环境进行确定性处理的情况下,在所述参考操作***上运行所述目标应用程序时形成的运行数据;
所述获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,包括:
在按照所述确定性处理规则对所述待测操作***中的运行环境进行确定性处理的情况下,在待测操作***上运行所述目标应用程序,并获取运行过程中形成的测试运行数据,其中,所述确定性处理规则用于将所述目标应用程序的运行环境处理成固定的运行环境。
在一些实施例中,所述参考运行数据基于以下方式确定:
在按照预先设置的确定性处理规则对所述待测操作***中的运行环境进行确定性处理的情况下,在所述参考操作***上运行所述目标应用程序并记录运行过程中形成的运行数据,若多次运行所述目标应用程序的过程中形成的运行数据一致,则将记录的运行数据作为所述参考运行数据,其中,所述确定性处理规则用于将所述目标应用程序的运行环境处理成固定的运行环境。
在一些实施例中,所述方法还包括:
若多次运行所述目标应用程序的过程中所形成的运行数据不一致,则更新所述确定性处理规则。
在一些实施例中,所述运行环境包括以下一种或多种信息:
所述目标应用程序对应的进程号和身份标识、所述目标应用程序的目录、所述目标程序运行时依赖的文件、***参数、分配给所述目标应用程序的硬件资源、所述目标应用程序运行过程中从操作***获取的随机变量、所述目标应用程序运行过程中从操作***获取的***时间、所述目标应用程序的文件***相关信息、所述目标应用程序对应的多个线程或进程的执行顺序、所述目标应用程序所处的网络环境、所述目标应用程序在运行过程中接收到的信号、CPU指令的返回结果。
在一些实施例中,所述获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,包括:
在所述待测操作***上运行所述目标应用程序,并记录运行过程中形成的测试运行数据;或
基于所述参考***调用序列中的***调用链路和入参,在所述待测操作***中执行***调用并得到***调用结果,基于所述***调用链路、所述入参和所述***调用结果得到所述测试***调用序列。
在一些实施例中,所述参考运行数据还包括参考运行结果,所述获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,包括:
在所述待测操作***上运行所述目标应用程序,并记录运行过程中形成的测试***调用序列、以及测试运行结果;
所述至少基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性,包括:
判定所述参考运行结果与所述测试运行结果是否一致;
如果不一致,则确定所述目标应用程序与所述待测操作***不兼容;
如果一致,则基于所述参考***调用序列与所述测试***调用序列的对比结果,确定所述目标应用程序与所述待测操作***的兼容性。
在一些实施例中,所述参考运行数据还包括参考函数堆栈数据,所述测试运行数据还包括测试函数堆栈数据,所述基于所述参考***调用序列与所述测试***调用序列的对比结果,确定所述目标应用程序与所述待测操作***的兼容性,包括:
判定所述参考***调用序列与所述测试***调用序列是否一致;
如果不一致,则确定所述目标应用程序与所述待测操作***不兼容;
如果一致,则判定所述参考函数堆栈数据与所述测试函数堆栈数据是否一致;
如果一致,则确定所述目标应用程序与所述待测操作***兼容。
在一些实施例中,所述参考函数堆栈数据与所述测试函数堆栈数据一致,包括:
所述参考函数堆栈数据和所述测试函数堆栈函数数据中的函数一致;或
所述参考函数堆栈数据和所述测试函数堆栈函数数据中的函数一致、函数调用顺序一致、且函数调用结果一致。
在一些实施例中,所述参考***调用序列包括网络相关的参考***调用序列和非网络相关的参考***调用序列,所述参考运行数据还包括参考网络数据包,所述参考网络数据包为所述目标应用程序进行真实的网络相关的***调用时,所述待测操作***返回的数据;
所述获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,包括:
在对所述待测操作***上的网络运行环境进行确定性处理的情况下,获取所述目标应用程序在所述待测操作***上运行过程中形成的非网络相关的测试***调用序列;
基于所述网络相关的参考***调用序列中的***调用链路和入参,在所述待测操作***上执行***调用,得到***调用结果,基于所述***调用链路、所述入参和所述***调用结果得到网络相关的测试***调用序列;
其中,所述对所述目标应用程序的网络运行环境进行确定性处理通过以下方式实现:拦截所述目标应用程序向所述待测操作***发送的网络相关的***调用请求,并返回所述参考网络数据包。
在一些实施例中,所述基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性,包括:
在所述非网络相关的测试***调用序列与所述非网络相关的参考***调用序列一致、且所述网络相关的测试***调用序列与所述网络相关的参考***调用序列一致的情况下,确定所述目标应用程序与所述待测操作***兼容。
在一些实施例中,所述方法还包括:
基于所述网络相关的参考***调用序列,以及所述参考网络数据包生成网络相关***调用脚本;
基于所述网络相关的参考***调用序列中的***调用链路和入参,在所述待测操作***上执行***调用,得到***调用结果,包括:
在所述待测操作***上运行所述网络相关***调用脚本,并在运行过程中拦截所述待测操作***返回的测试网络数据包,利用所述参考网络数据包中的数据更新所述测试网络数据包中的不确定性返回结果,并将更新后的测试网络数据包和***调用结果返回给所述目标应用程序。
根据本说明书实施例的第二方面,提供一种兼容性测试装置,所述装置包括:
获取模块,用于获取在参考操作***上运行目标应用程序的过程中形成的参考运行数据,其中,所述参考操作***与所述目标应用程序兼容,所述参考运行数据至少包括参考***调用序列,所述目标应用程序的输入一致时,所述目标应用程序的运行结果一致;以及获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,其中,在所述参考操作***上运行所述目标应用程序的运行环境与在所述待测操作***上运行所述目标应用程序的运行环境一致,所述测试运行数据至少包括测试***调用序列;
比对模块,用于至少基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性。
根据本说明书实施例的第三方面,提供一种电子设备,所述设备包括:
存储器,用于存储可执行的计算机指令;
处理器,用于执行所述计算机指令时实现上述第一方面提及的方法。
本说明书实施例的有益效果:在测试待测操作***与目标应用程序之间的兼容性时,可以选取一个作为比对基准的参考操作***,然后在保证目标应用程序在参考操作***和在待测操作***的运行环境一致的情况下,分别在上述两个操作***中运行该目标应用程序,并记录运行过程中形成的***调用序列等运行数据,然后可以通过比对在两个操作***中形成的***调用序列等运行数据是否一致,判定目标应用程序是否与待测操作***兼容。
其中,保证目标应用程序在两个操作***的运行环境一致,即保证那些可能会造成目标应用程序每次运行时形成的***调用序列等运行数据不一致的条件保持一致,从而消除了运行环境中的一些不确定性因素对目标应用程序的运行产生影响,以保证基于***调用序列等运行数据的比对结果确定的兼容性的准确性。通过这种方式,对于一些新开发或新设计的***、或者一些特殊场景中使用的操作***,也能准确测试其与应用程序的兼容性,且通过从***调用情况的角度去判定两者的兼容性,也可以得到更加准确的测试结果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
附图说明
此处的附图被并入说明书中并构成本说明书实施例的一部分,示出了符合本说明书实施例的实施例,并与说明书一起用于解释本说明书实施例的原理。
图1为本说明书一示例性实施例示出的兼容性测试方法示意图;
图2为本说明书一示例性实施例示出的兼容性测试方法流程图;
图3为本说明书一示例性实施例示出的对运行环境进行确定性处理的示意图;
图4为本说明书一示例性实施例示出的目标应用程序与***调用的关系示意图;
图5为本说明书一示例性实施例示出的进行兼容性判定的示意图;
图6为本说明书一示例性实施例示出兼容性测试装置的逻辑框图;
图7为本说明书一示例性实施例示出的一种电子设备的结构逻辑框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书实施例的一些方面相一致的装置和方法的例子。
在本说明书实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书实施例。在本说明书实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
当对操作***的内核版本进行了更新,或者开发了新的操作***时,通常需要测试操作***与应用程序之间的兼容性,以确保应用程序可以在操作***上稳定运行。目前,在测试操作***与应用程序的兼容性时,有些方式是通过研发人员基于代码改动评估两者的兼容性,但是由于操作***内核版本升级往往涉及大量的代码改动,很难评估到位,导致评估结果也不够准确。
为了提高测试效率,实现自动测试兼容性,相关技术开发了一些测试工具来自动测试两者的兼容性,比如,常用的测试工具包括APPchecker或者PCTS(POSIX ConformanceTest Suite,标准符合性测试套件),由于以往的操作***大都为一些标准的操作***,而标准的操作***通常需按照一定的接口规范进行设计,因而,在开发测试工具时,这些测试工具主要是判定操作***或应用程序是否符合预先定义的接口规范。
但是,随着虚拟化技术、容器技术的发展,出现了一些特殊应用场景下的操作***,比如,安全容器场景,基于轻量级虚拟机的安全容器主要是将一个Linux***作为guestkernel运行在虚拟机中,相比于一般的操作***,运行在虚拟机上的操作***的运行环境更为复杂,因此,其设计规范和标准的操作***存在一些差异,在对于这类操作***与应用程序的兼容性进行测试时,目前的测试工具并不适用。
基于此,本说明书实施例提供了一种兼容性测试方法,在测试待测操作***与目标应用程序之间的兼容性时,可以选取一个作为比对基准的参考操作***,其中,参考操作***与目标应用程序兼容,比如,参考操作***可以是一个标准的操作***,然后在保证目标应用程序在参考操作***和在待测操作***的运行环境一致的情况下,分别在上述两个操作***中运行该目标应用程序,并记录运行过程中形成的***调用序列等运行数据,然后可以通过比对在两个操作***中形成的***调用序列等运行数据是否一致,判定目标应用程序是否与待测操作***兼容。
由于***调用序列反映了应用程序在操作***上运行过程中的一系列***调用情况,如果应用程序与两个操作***均兼容,那么应用程序在这两个操作***中运行环境一致时,其***调用序列通常也是一致的,所以,本申请想到了可以基于应用程序在两个操作***上的***调用序列的一致性来判定应用程序与操作***的兼容性。并且,相比于简单的运行结果,***调用序列反映的是更为底层的运行数据,通过对***调用层面的运行数据进行比较,也可以得到更加准确的兼容性判定结果。
其中,保证目标应用程序在两个操作***的运行环境一致,即保证那些可能会造成目标应用程序每次运行时形成的***调用序列等运行数据不一致的条件保持一致,从而消除了运行环境中的一些不确定性因素对目标应用程序的运行产生影响,以保证基于***调用序列等运行数据的比对结果确定的兼容性的准确性。
通过这种方式,对于一些新开发或新设计的操作***、或者一些特殊场景中使用的操作***,也能准确测试其与应用程序的兼容性,且通过从***调用情况的角度去判定两者的兼容性,也可以得到更加准确的测试结果。
本说明书实施例提供的兼容性测试方法可以由测试工具或者测试软件执行,该测试工具或测试软件可以运行在手机、电脑、服务器或者服务器集群中,具体可以基于实际需求设置。
本说明书实施例中的目标应用程序可以是需要测试与待测操作***兼容性的各类程序,由于说明书实施例是通过同一个应用程序在不通过操作***的运行数据进行比对的方式确定兼容性,因而,需要保证目标应用程序是有确定输入输出的应用程序,即目标应用程序的输入一致时,其运行结果也一致。
本说明书实施例的待测操作***可以是各种需要测试兼容性的***,比如,可以是Linux***、自行开发的类Linux***、Andriod***或者是其他类型的操作***。参考操作***可以是与目标应用程序兼容的操作***,比如,可以选取一些标准的操作***作为参考操作***。为了保证测试结果的准确性,参考操作***与待测操作***尽量是比较相似或比较接近的操作***,比如,参考操作***可以是Linux1.0***,待测操作***可以是内核版本与其不同的Linux2.0***,或者也可以自行开发的原理和Linux1.0***接近的类Linux***。
其中,为了便于区分,以下将目标应用程序在参考操作***上运行时形成的运行数据称为参考运行数据、形成的***调用序列称为参考***调用序列、形成的函数堆栈数据称为参考函数堆栈数据、从参考操作***接收到的网络数据包称为参考网络数据包、运行结果称为参考运行结果。同理,以下将目标应用程序在待测操作***上运行时形成的运行数据称为测试运行数据、形成的***调用序列称为测试***调用序列、形成的函数堆栈数据称为测试函数堆栈数据、从待测操作***接收到的网络数据包称为测试网络数据包、运行结果称为测试运行结果。
如图1所示,为本说明书实施例的兼容性测试方法的示意图。如图2所示,为本说明书实施例的兼容性测试方法的流程图。
如图2,该兼容性测试方法可以包括以下步骤:
S202、获取在参考操作***上运行目标应用程序的过程中形成的参考运行数据,其中,所述参考运行数据至少包括参考***调用序列,所述目标应用程序的输入一致时,所述目标应用程序的运行结果一致;
如果应用程序与两个操作***均兼容,那么在保证应用程序在两个操作***上运行时的运行环境一致,即消除会造成应用程序在运行过程中形成的***调用序列等运行数据不一致的各类因素,那么应用程序在两个操作***上运行时形成的运行数据应该是一致的。基于这个原则,在步骤S202中,可以先获取在参考操作***上运行目标应用程序的过程中形成的参考运行数据。其中,参考运行数据至少包括反映目标应用程序在参考操作***上运行时的***调用情况的参考***调用序列,其中,参考***调用序列可以包括***调用链路、***调用的入参、***调用执行结果等数据。当然,参考运行数据还可以包括反映目标应用程序在参考操作***上运行时的函数调用情况的参考函数堆栈数据、目标应用程序从参考操作***接收的数据,比如,为响应目标应用程序的网络调用请求而返回的参考网络数据包、目标应用程序的参考运行结果等。其中,参考函数堆栈数据可以包括被调用的函数的名称、函数的调用链路、输出结果等。
为了获取上述参考运行数据,在参考操作***上运行目标应用程序的过程中,可以利用一些监察工具来跟踪并记录目标应用程序在运行过程中的运行数据。比如,以Linux***为例,可以采用strace工具监察目标应用程序运行过程中的***调用情况,以及目标应用程序接收到的***信息。再比如,可以利用函数调用栈录制工具(比如,perf)记录函数堆栈情况。
S204、获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,其中,在所述参考操作***上运行所述目标应用程序的运行环境与在所述待测操作***上运行所述目标应用程序的运行环境一致,所述测试运行数据至少包括测试***调用序列;
在步骤S204中,可以获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据。其中,测试运行数据中至少包括反映目标应用程序在待测操作***上运行时的***调用情况的测试***调用序列。当然,还可以包括反映目标应用程序在待测操作***上运行的过程中的函数调用情况的测试函数堆栈数据、目标应用程序从待测操作***接收的数据,比如,为响应目标应用程序的网络调用请求而返回的测试网络数据包、目标应用程序的测试运行结果等。其中,测试运行数据也可以通过一些监察工具跟踪记录得到,具体可参考参考运行数据的获取方式,在此不再赘述。
由于本说明书实施例是通过至少比对目标应用程序在两个操作***上的***调用序列的一致性来测试兼容性,因而,需保证目标应用程序在参考操作***上的运行环境与目标应用程序在待测操作***上的运行环境一致,从而得到参考运行数据和测试运行数据的比对结果才有意义。其中,保证目标应用程序在两个操作***的运行环境一致,即需消除目标应用程序在运行过程中,可能会引起形成的运行数据不一致的各种因素。比如,在目标应用程序每次运行的过程中,可能会存在一些不确定性因素,导致两次运行过程的***调用序列不一致,因而,可以通过对这些不确定性因素进行处理,使其保持一致,使得目标应用程序可以在一个确定的运行环境中运行。
S206、至少基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性。
在步骤S206中,由于***调用情况可以反映目标应用程序在操作***的运行情况,在得到参考***调用序列和测试***调用序列后,可以对两者进行比对,至少根据两者的比对结果确定目标应用程序与待测操作***的兼容性。比如,由于目标应用程序与参考操作***兼容,如果两个***调用序列一致,则可以认为目标应用程序与待测操作***也兼容,否则,则不兼容。
为了确保目标应用程序在参考操作***上的运行环境和在待测操作***上的运行环境一致,可以对运行环境进行确定性处理,即可以将运行过程中的一些不确定性因素修改成确定因素,从而保证目标应用程序每次都在一个固定的运行环境中运行。比如,目标应用程序每次运行时,操作***分配给目标应用程序的进程号、返回给目标应用程序的时间信息、或者返回给目标应用程序的随机变量等可能都不一样,而这些信息不一致均可能会导致目标应用程序的运行数据不一致,因此,如图3所示,可以对目标应用程序在两个操作***上的运行环境进行同样的确定性处理,将这些不确定因素处理成确定因素,以保证目标应用程序在两个操作***运行时的运行环境一致。其中,确定性处理可以是在目标应用程序运行之前进行的处理(比如,设置固定的进程号、身份标识、分配固定的硬件资源等),也可以是在目标应用程序运行过程中进行的处理(比如,拦截应用程序的某些请求,返回预先设置定固定信息)。
在一些实施例中,该参考运行数据包括:在按照预先设置的确定性处理规则对参考操作***中的运行环境进行确定性处理的情况下,在参考操作***上运行目标应用程序时形成的运行数据。同样的,在获取该测试运行数据时,也可以在按照同样的确定性处理规则对待测操作***中的运行环境进行确定性处理的情况下,在待测操作***上运行目标应用程序,并获取运行过程中形成的测试运行数据。
其中,为了确保经过确定性处理后,两个操作***中的运行环境一致,可以预先设置一些确定性处理规则,这些确定性处理规则用于将目标应用程序的运行环境处理成固定的运行环境。比如,确定性处理规则可以规定该对运行环境进行何种处理,以及具体的处理方式,以保证按照这些确定性处理规则对运行环境进行确定性处理后,运行环境一致。
比如,目标应用程序在运行过程中,可能会向操作***请求随机数,而操作***每次返回的随机数都是通过随机生成器随机生成的一个数值,从而造成了运行过程中的不确定性。为了消除这种不确定性,可以设置一条确定性处理规则,即在接收到目标应用程序的请求随机数的请求时,拦截该请求,然后将预先设置好的固定数值返回给目标应用程序,从而可以保证每次返回给目标应用程序的随机数一致。再比如,确定性处理规则也可以是进行进程隔离处理,确保每次运行时的进程号一致。其中,确定性处理规则可以基于实际情况灵活设置,只要能确保按照这些确定性处理规则对运行环境进行处理,即可以消除运行环境中会导致目标应用程序的运行数据不一致的因素,保证每次运行时的运行环境一致即可。
其中,确定性处理规则可以通过目标应用程序在参考操作***中的运行情况得到。比如,可以根据会对应用程序的运行数据产生影响的因素设置一些确定性处理规则,按照这些确定性处理规则对运行环境进行确定性处理的情况下,多次在参考操作***中运行目标应用程序,如果多次运行形成的运行数据都一致,即可以得到稳定的运行数据,即可以说明这些确定性处理规则已经可以很好的消除运行环境中对运行数据产生影响的因素。因而,可以将该确定性处理规则作为最终的处理规则。如果多次运行形成的运行数据不一致,则可以分析不一致的原因,进而可以对确定性处理规则进行更新。
参考运行数据作为比对的基准,其应当是按照设置的确定性处理规则对目标应用程序在参考操作***中运行环境进行确定性处理后,运行目标应用程序时形成的稳定的运行数据。即在对运行环境进行确定性处理后,目标应用程序在参考操作***上多次运行得到的运行数据均一致的前提下,再将该运行数据作为参考运行数据,然后以相同的确定性处理规则对目标应用程序在待测操作***上的运行环境进行确定性处理,运行该目标应用程序时形成的测试运行数据比对,比对结果才有参考意义。否则,如果按照设置的确定性处理规则对运行环境进行确定性处理后,目标应用程序在参考操作***中运行时,每次的形成运行数据均不一致,那说明确定性处理规则还不能完全消除对运行数据的不一致造成影响的因素,或者说目标应用程序本身的运行就是不确定的(这种情况下,无法适用本说明书实施例提供的方法对目标应用程序进行兼容性测试),因而该参考运行数据也没有参考价值。
所以,在一些实施例中,在确定参考运行数据时,可以在按照预先设置的确定性处理规则对参考操作***中的运行环境进行确定性处理的情况下,在参考操作***上运行目标应用程序并记录运行过程中形成的运行数据,若多次运行目标应用程序的时形成的运行数据一致,则将所获取的运行数据作为参考运行数据。
其中,在一些实施例中,如果参考运行数据仅包括参考***调用序列,则在参考操作***上运行目标应用程序并记录运行过程中形成的运行数据时,可以采取两种方式,一种是在按照预先设置的确定性处理规则对参考操作***中的运行环境进行确定性处理的情况下,直接在参考操作***中运行该目标应用程序,并记录运行过程中形成的***调用序列。另一种是可以获取上一次在参考操作***中运行目标应用程序时形成的***调用序列,在按照预先设置的确定性处理规则对参考操作***中的运行环境进行确定性处理的情况下,基于上一次的***调用序列中的调用链路和入参,在参考操作上执行***调用,得到***调用结果,进而确定当前一次运行时的***调用序列。由于第二种方式无需重新在操作***运行应用程序,其处理速度会更快,可以提高测试效率。
当然,在一些实施例中,如果参考运行数据包括参考***调用序列、参考函数堆栈数据、参考运行结果,则直接在参考操作***中运行该目标应用程序,并记录运行过程中形成的上述三种数据。
在一些实施例中,如果多次运行所述目标应用程序的过程中所形成的运行数据不一致,则说明设置的确定性处理规则还不能完全消除对运行数据的不一致造成影响的因素,或者说目标应用程序本身的运行就是不确定的(这种情况下,无法使用本说明书实施例提供的方法对目标应用程序进行兼容性测试)。因此,可以进一步更新确定性处理规则,直到按照更新后的确定性处理规则对运行环境进行处理的情况下,目标应用程序每次在参考操作***的运行形成的运行数据一致。
在一些实施例中,运行环境包括以下一种或多种信息:目标应用程序对应的进程号和身份标识、目标应用程序的目录、目标程序运行时依赖的文件、***参数、分配给目标应用程序的硬件资源、目标应用程序运行过程中从操作***获取的随机变量、目标应用程序运行过程中从操作***获取的***时间、目标应用程序的文件***相关信息、目标应用程序对应的多个线程或进程的执行顺序、目标应用程序所处的网络环境、目标应用程序在运行过程中接收到的信号、CPU指令的返回结果等等。其中,保持目标应用程序在参考操作***和待测操作***的运行环境一致,即保持上述信息一致。
相应的,在设置确定性处理规则时,也可以通过设置相应的处理规则,使得按照设置的处理规则对运行环境进行确定性处理后,可以使得上述信息保持一致。比如,确定性处理规则可以包括:采用进程隔离的方式使得进程号为固定的进程号、为目标应用程序设置固定的身份标识、目录、文件***、***参数等、针对目标应用程序的请求,操作***返回的信息如果是不确定的(比如,随机变量、***时间等),则可以通过拦截目标应用程序的请求,返回预先设定的固定的信息等等。
在一些实施例中,在根据目标应用程序在参考操作***和待测操作***中的运行数据的比对结果,确定目标应用程序与待测操作***的兼容性时,可以仅从***调用情况这一层面进行比对。即只比对在两个操作***中运行时形成的***调用序列,如果两者一致,则认为兼容,否则,则认为不兼容。在这种场景下,获取的参考运行数据或测试运行数据中可以仅包括***调用序列。
在一些实施例中,当测试运行数据中仅包括测试***调用序列时,在获取测试运行数据时,存在两种方式,一种方式是直接在待测操作***上运行该目标应用程序,并记录运行过程中形成的测试***调用序列。
另外一种方式是,可以无需在待测操作***上运行目标应用程序,而是可以基于参考***调用序列模拟目标应用程序与待测操作***的交互情况。比如,参考***调用序列包括了***调用链路、入参、以及***调用结果,因而,可以基于参考***调用序列中的***调用链路和入参,在待测操作***中模拟各次***调用操作,并得到相应***调用结果。从而,基于该***调用链路、入参以及得到的***调用结果,即可以得到目标应用程序在待测操作***上的测试***调用序列。
如图4所示,为应用程序与***调用的关系示意图,从图中可知,目标应用程序运行时包括三个层面的情况,即程序运行结果、函数调用情况、***调用情况。在一些实施例中,在根据目标应用程序在参考操作***和待测操作***中的运行数据的比对结果,确定目标应用程序与待测操作***的兼容性时,除了可以在***调用情况这一层面上进行比对,还可以同时在函数调用情况这一层面、和/或在应用程序的运行结果这一层面进行比对。即在确定兼容性,可以同时结合***调用序列和另外两个层面的信息中任一种的比对结果确定,也可以同时结合上述三个层面的信息的比对结果确定。
在一些场景中,如图5所示,参考运行数据还可以包括参考函数堆栈数据,以及参考运行结果,在获取测试运行数据时,则可以在待测操作***上直接运行目标应用程序,并记录运行过程中形成的测试***调用序列、测试函数堆栈数据以及测试运行结果。同样的,在确定目标应用程序与待测操作***的兼容性时,可以同时结合参考***调用序列与测试***调用序列的比对结果、参考函数堆栈数据与测试函数堆栈数据的比对结果、以及参考运行结果与测试运行结果的比对结果,确定目标应用程序与待测操作***的兼容性。
假设目标应用程序与待测操作***兼容,由于目标应用程序是一个确定性的程序,即目标应用程序的输入确定时,其运行结果也是确定的,所以,目标应用程序在两个操作***的运行结果应当一致。此外,由于目标应用程序在两个操作***上的运行环境一致,那么其***调用序列也应当一致。而函数堆栈数据(比如,函数调用链路)不一致,可能是由运行环境、***调用返回值导致的,也有可能是应用程序本身引起的,因而,这个因素并非是绝对性因素,可以作为辅助性判定因素,并不严格要求一致。
相比于对***调用序列进行比对,直接比对运行结果,其处理速度会更快。因而,在一些实施例中,参考运行数据还可以包括参考运行结果,测试运行数据还可以包括测试运行结果,在确定兼容性时,可以先判定参考运行结果和测试运行结果是否一致,如果不一致,则说明不兼容,则无需再进行其他数据的比对。如果一致,则可以进一步基于参考***调用序列和测试***调用序列的比对结果确定兼容性。通过先基于运行结果排除肯定不兼容的情况,再利用***调用序列进一步判定,可以大大提高测试效率。
在一些实施例中,也可以结合上述三种运行数据的比对结果确定目标应用程序与待测操作***的兼容性,比如,可以先先判定参考运行结果与测试运行结果是否一致,如果不一致,则认为两者不兼容,如果一致,则进一步判定参考***调用序列与测试***调用序列是否一致,如果不一致,则认为两者不兼容,如果一致,则进一步判定参考函数堆栈数据与测试函数堆栈数据是否一致,如果一致,则认为两者兼容,反之,则认为不兼容。通过同时结合三个层面的运行数据的比对结果进行判定,不仅可以提高测试效率,并且由于进一步考虑了函数堆栈情况,使得最终的兼容性判定结果会更加准确。
在一些实施例中,参考函数堆栈数据和测试函数堆栈数据一致,可以仅仅是参考函数堆栈数据中的函数和测试函数堆栈数据中的函数一致,即调用的函数一致,函数的调用顺序路可以不一致,或者也可以是两者中的函数一致,且函数调用顺序也一致,具体的判定规则可以基于实际需求灵活设置。
目标应用程序在进行网络相关的***调用时,通常会存在一些不确定性。比如,由于每次运行目标应用程序时,网络环境不一样,进而可能导致操作***返回的网络数据包中有些参数不一致,比如,响应延时不一致、响应时间不一致、返回的结果不一致(存在请求成功和不成功的情况),这些不确定性因素在一定程度上也会造成目标应用程序的运行数据不一致。为了消除网络相关的***调用带来的不确定性,可以对网络环境进行确定性处理,即首次在参考操作***中运行目标应用程序时,可以不做任何干预和处理,让目标应用程序进行真实的网络***调用,并记录参考操作***返回的参考网络数据包,比如,可以通过一些网络抓包工具(如tcpdump、wireshark)记录该参考网络数据包。后续在运行目标应用程序时,可以拦截该目标应用程序向参考操作***或待测操作***发送的网络相关的***调用请求,并返回该参考网络数据包,即目标应用程序运行时不进行实际的网络相关***调用,通过返回该参考网络数据包,既可以保证目标应用程序正常运行,又能保证每次接收到的网络数据包一致,消除不确定性的影响。
通过上述方式对网络环境进行确定性处理,虽然可以消除网络相关的不确性影响,但是由于目标应用程序在运行过程中,实际并没有真正进行网络相关的***调用,无法对网络相关的兼容性进行测试。
基于此,在一些实施例中,参考***调用序列可以包括网络相关的参考***调用序列和非网络相关的参考***调用序列,参考运行数据中还可以包括参考网络数据包,该参考网络数据包可以是进行真实的网络相关的***调用时,参考操作***向目标应用程序返回的网络数据包。获取在待测操作***上运行目标应用程序的过程中形成的测试运行数据时,可以分两路进行,一路用于获取非网络相关的测试***调用序列,一路用于获取网络相关的测试***调用序列。比如,可以在对待测操作***上的网络运行环境进行确定性处理的情况下,获取目标应用程序在待测操作***上运行的过程中形成的非网络相关的测试***调用序列。由于对网络环境进行确定性处理,即拦截目标应用程序的网络相关的***调用请求,返回预先记录的参考网络数据包,即没有进行真实的网络相关的***调用,因而只能得到非网络相关的测试***调用序列。
同时,为了得到网络相关的测试***调用序列,可以基于该网络相关的参考***调用序列中的***调用链路和入参,在待测操作***上执行***调用,得到***调用结果,基于该***调用链路、入参和得到的***调用结果,即可以得到网络相关的测试***调用序列。通过根据网络相关的参考***调用序列在待测操作***中执行网络相关的***调用,即可以得到真实的网络相关的***调用情况。
在一些实施例中,在***调用序列包括网络相关和非网络相关两种类型的情况下,在基于参考***调用序列与测试***调用序列的比对结果,确定目标应用程序与待测操作***的兼容性时,可以将非网络相关的测试***调用序列与非网络相关的参考***调用序列进行比对、网络相关的测试***调用序列与网络相关的参考***调用序列进行比对,基于两者的比对结果确定兼容性。
在一些实施例中,在待测操作***中进行真实的网络相关的***调用,可以通过在待测操作***中运行预先生成的网络相关***调用脚本实现。比如,可以基于网络相关的参考***调用序列,以及参考网络数据包生成网络相关***调用脚本,比如,PacketDrill脚本,然后在待测操作***上运行该网络相关***调用脚本,在运行该脚本的过程中,可以拦截待测操作***返回给目标应用程序的测试网络数据包,利用参考网络数据包中的参数更新测试网络数据包中的不确定性参数,并将更新后的测试网络数据包和***调用结果返回给目标应用程序。通过这种方式,既可以在待测操作***中进行实际的网络相关的***调用,得到网络相关的测试***调用序列,同时,可以通过修改待测操作***返回的网络数据包中的一些不确定性的返回结果,消除这些不确定性返回结果对运行数据的影响。
为了进一步解释本说明书实施例提供的兼容性测试方法,以下结合一个具体的实施例加以解释。
假设要测试待测操作***OS2和应用程序A之间的兼容性。可以选一个与应用程序A兼容的标准的操作***,作为参考操作***OS1。
1、确定性处理规则的设置。
可以预先设置的确定性处理规则,用于对运行环境中的不确定性进行处理,以将应用程序A每次运行的运行环境处理成固定的运行环境。
确定性处理规则可以包括以下一种或多种:
(1)保持应用程序运行时的进程号和身份标识一致
可以通过使用进程隔离的方式(如pid namespace)使得应用程序进程具有确定的进程号,避免其他无关进程的干扰。可以通过指定应用程序的uid/gid使其具有确定的标识和确定的权限(如使用setuid/gid或user namespace uid/gid mapping)。
(2)保持应用程序运行时的目录以及依赖的文件一致
可以通过构造确定的目录结构和相关文件来使得应用程序A在OS1和OS2上具有相同的文件***环境(container image,chroot,mnt namespace,bind mount),保持文件的ownership、permission一致。
(3)保持相关硬件、***参数一致
可以通过如uts namespace使应用程序在OS1和OS2上看到相同的hostname;通过物理层面和软件层面如cgroup/virtualization等使得应用程序所分配的计算资源在两个OS上保持一致,特别的,要保持CPU型号、内存容量、磁盘带宽、网络带宽等一致,避免其他物理因素的干扰。
(4)保持应用程序A获取的随机变量一致
应用程序运行时需要从操作***获取随机种子用来生成随机数,如在Linux中,程序可以通过调用getrandom***调用或者读取/dev/random/dev/urandom文件,为了避免随机数不同而带来的程序运行差异,需要使得程序在两个OS运行时拿到的随机数保持一致。可以先生成一个随机数序列,然后在程序运行时,拦截getrandom***调用和对/dev/random/dev/urandom的read***调用,并依照随机数序列来返回随机数。这里需要避免多线程、多进程带来的干扰,可以对每个new start thread unit,都按照确定的顺序给random number,这样就可以线程执行顺序不同导致获取的随机数不同。
(5)保持***时间一致
应用程序运行时会通过***调用如gettimeofday来获取时间信息,然而Linux为了加速该***调用的速度,设置了vDSO机制来避免陷入内核空间从而提高性能,此时无法通过拦截***调用的方式来返回确定的时间,可以通过在程序被load到内存后、执行之前(在执行execve之后)修改vDSO库代码,从而使得gettimeofday的实现会产生对kernel的***调用,这样就可以被正常拦截并修改返回值了。
(6)保持应用程序接收的信号和计时器一致
应用程序运行的同时会接收到许多信号,如Linux中的SIGKILL等,它们可以是来自其他进程的,也可以是来自自身的,对于来自其他进程的信号,在这种情况下,需要保持信号的发送和接收也是确定性执行的。
对于计时器的应用,在Linux中应用程序会通过调用alarm***调用来让内核在一定时间间隔之后给该应用程序发送信号,由于存在时间和程序执行位置的不确定性(发出、接收信号的时刻会有细微的差别,从而导致应用程序收到信号时,其代码的运行位置不一样,可能会引起某些不确定性),可以通过将该类***调用改为pause,先让程序直接停在***调用指令处,然后发一个信号,这样程序就会因信号而被唤醒,这样可以使程序每次收到信号时,其运行的指令和相关寄存器和内存环境(PC register and other CPU registerand memory)都是一致的。
(7)文件***相关信息一致
用户在获取目录信息的时候(如ls/root)会调用getdents/getdents64***调用去拿对应的目录信息,这个时候返回的目录信息数组的排序是不确定的,同样可以通过拦截上述***调用并修改返回值的方式来使的其序列按照确定的顺序排列(优先级低,一般程序都有容错机制,但保证确定性执行的话需要考虑类似的情况)。
Linux等操作***会为给文件一个inode(这个inode的值会因为全局的inode数量而变化,即并不是每次打开文件都会给一个固定的inode值),为了使得程序每次拿到相同的inode,可以拦截相关的***调用如stat并建立map,每次返回程序固定的inodel。Linux中的文件包含了时间戳信息(mtime,ctime,atime),这些信息可能会影响到程序的表现,同样可以通过对stat***调用的拦截和返回值修改,使得返回的时间戳信息保持一致。
(8)保持多进程、多线程***调用执行顺序一致
通过拦截进程、线程的***调用,可以使得它们发往kernel的顺序是一致的,同时syscall返回到进程、线程的顺序也是一致的。
对于会等待事件的***调用,如wait,可以通过修改其参数让它不会block,并再次重发***调用,也可以识别会影响该***调用的其他线程。
(9)保持CPU指令的返回结果一致
除了***调用之外,一些CPU指令也会引起无法确定性执行的问题,如rdtsc(汇编指令),rdtscp,rdrand,rdseed,cpuid等。可以通过prctl***调用、指定cpu运行、使用虚拟化技术等方法让这些指令返回确定的结果。
(10)保持网络环境的一致
可以先不做任何网络相关的干预的前提下,让应用程序在OS1上运行,然后记录网络相关的***调用序列和网络数据包。之后再次运行程序时,可以拦截这些网络相关的***调用并模拟数据包收发(即返回之前录制的网络数据包,确保每次接收到的网络数据包一致。
2、生成Packetdrill脚本。
在不对运行环境进行确定处理的情况下,在OS1上运行应用程序A,并对应用程序A网络相关的***调用进行录制,比如,采用一些网络抓包工具抓取相关的报文,从而得到运行过程中的网络相关的***调用序列SyscallList 1和***返回的网络数据包1。基于该***调用序列SyscallList 1和网络数据包1生成Packetdrill脚本。
3、记录应用程序A在OS1上的运行数据。
在采用预先设置的确定性处理规则对运行环境进行确定性处理的情况下,在OS1上运行应用程序A,并记录运行过程中的非网络相关的***调用序列SyscallList2、函数堆栈数据1、运行结果1。(其中,由于进行了网络环境相关的确定性处理,运行过程中不会进行真实的网络相关***调用,只是返回先前记录的网络数据包1,作为模拟结果,保证应用程序A可以正常运行)
4、得到应用程序A在OS1上的确定性运行数据,以及可靠的确定性处理规则。
该步骤包括两种方式:
方式(1):
在采用预先设置的确定性处理规则对运行环境进行确定性处理的情况下,多次在OS1上运行应用程序A,并记录运行过程中的非网络相关的***调用序列SyscallList3、函数堆栈数据2、运行结果2。
多次在OS1上运行Packetdrill脚本,得到网络相关的***调用序列SyscallList4。
比对非网络相关的***调用序列SyscallList3与非网络相关的***调用序列SyscallList2、函数堆栈数据2与函数堆栈数据1、运行结果2和运行结果1、网络相关的***调用序列SyscallList4和网络相关的***调用序列SyscallList 1;
如果运行结果2和运行结果1不一致,则说明该应用程序A不是确定性程序(即输入固定,输出也固定),因而,不能采用该方法测试。
如果非网络相关的***调用序列SyscallList3与非网络相关的***调用序列SyscallList2不一致,和/或网络相关的***调用序列SyscallList4和网络相关的***调用序列SyscallList 1,则可能是设置的确定性处理规则不够全面和完善,遗漏了一些需要处理的场景,因而,可以更新确定性处理规则,再重复该步骤,直至比对结果一致。
如果函数堆栈数据2与函数堆栈数据1不一致,由于函数调用链路不一致,可能是由运行环境、***调用返回值导致的,也可能是由于应用程序本身做了一些干扰措施。所以,如果***调用序列一致、运行结果一致,而函数堆栈数据不一致,则可以采用以下3种方式处理:
(1)多次运行,得到一个稳定的函数调用序列集合,后续测试OS2兼容性时使用该集合进行比对。
(2)如无法得到稳定的序列集合,则拿到会被调用的函数名称作为集合,不考虑调用函数顺序和参数。
(3)可以不考虑函数堆栈数据的比对结果。
方式(2):
在采用预先设置的确定性处理规则对运行环境进行确定性处理的情况下,基于非网络相关的***调用序列SyscallList2中的调用链路和入参,在OS1上模拟应用程序A和OS1的交互,执行***调用,得到***调用结果,基于该***调用结果、调用链路和入参即可以得到非网络相关的***调用序列SyscallList3
在OS1上运行Packetdrill脚本,得到网络相关的***调用序列SyscallList4。
比对非网络相关的***调用序列SyscallList3与非网络相关的***调用序列SyscallList2、网络相关的***调用序列SyscallList4和网络相关的***调用序列SyscallList 1;
如果非网络相关的***调用序列SyscallList3与非网络相关的***调用序列SyscallList2不一致,或网络相关的***调用序列SyscallList4和网络相关的***调用序列SyscallList 1中的不一致,则可能是设置的确定性处理规则不够全面和完善,遗漏了一些需要处理的场景,因而,可以更新确定性处理规则,再重复该步骤,直至比对结果一致。经过这个步骤的处理后,即可以得到完善的确定性处理规则,以及应用程序A在OS1上运行时的稳定运行数据(非网络相关的***调用序列SyscallList3)。
5、测试应用程序A与OS2的兼容性。
该步骤中获取应用程序A在OS2中的运行数据的两种方式与步骤4的处理过程类似,仅仅是将OS1换成OS2。在对两个操作***上的运行数据进行比对时,如果比对的运行数据仅仅是***调用序列,则应用程序A在OS2上的***调用序列(包括网络和非网络相关)和在OS1上的***调用序列一致,则认为OS2和应用程序兼容。
如果比对的运行数据包括***调用序列、运行结果、函数堆栈数据,则应用程序A在OS2上形成的上述运行数据和在OS1上的形成的上述运行数据一致,则认为OS2和应用程序A兼容。
与本说明书实施例提供的兼容性测试方法实施例相对应,本说明实施例还提供了一种兼容性测试装置,如图6所示,所述装置60包括:
获取模块61,用于获取在参考操作***上运行目标应用程序的过程中形成的参考运行数据,其中,所述参考操作***与所述目标应用程序兼容,所述参考运行数据至少包括参考***调用序列,所述目标应用程序的输入一致时,所述目标应用程序的运行结果一致;以及获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,其中,在所述参考操作***上运行所述目标应用程序的运行环境与在所述待测操作***上运行所述目标应用程序的运行环境一致,所述测试运行数据至少包括测试***调用序列;
比对模块62,用于至少基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
从硬件层面而言,如图7所示,为本说明书实施例的兼容性测试装置所在设备的一种硬件结构图,除了图7所示的处理器71、存储器72之外,该设备通常还可以包括其他硬件,如负责处理报文的转发芯片等;从硬件结构上来讲该设备还可能是分布式的设备,可能包括多个接口卡,以便在硬件层面进行报文处理的扩展。
所述存储器72存储有计算机指令,处理器71执行所述计算机指令时实现上述任一实施例提及的兼容性测试方法。
由于本说明书实施例对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备执行本说明书实施例各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本说明书实施例的较佳实施例而已,并不用以限制本说明书实施例,凡在本说明书实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书实施例保护的范围之内。
Claims (14)
1.一种兼容性测试方法,所述方法包括:
获取在参考操作***上运行目标应用程序的过程中形成的参考运行数据,其中,所述参考操作***与所述目标应用程序兼容,所述参考运行数据至少包括参考***调用序列,所述目标应用程序的输入一致时,所述目标应用程序的运行结果一致;
获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,其中,在所述参考操作***上运行所述目标应用程序的运行环境与在所述待测操作***上运行所述目标应用程序的运行环境一致,所述测试运行数据至少包括测试***调用序列;
至少基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性。
2.根据权利要求1所述的方法,所述参考运行数据为在按照预先设置的确定性处理规则对所述参考操作***中的运行环境进行确定性处理的情况下,在所述参考操作***上运行所述目标应用程序时形成的运行数据;
所述获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,包括:
在按照所述确定性处理规则对所述待测操作***中的运行环境进行确定性处理的情况下,在待测操作***上运行所述目标应用程序,并获取运行过程中形成的测试运行数据,其中,所述确定性处理规则用于将所述目标应用程序的运行环境处理成固定的运行环境。
3.根据权利要求1所述的方法,所述参考运行数据基于以下方式确定:
在按照预先设置的确定性处理规则对所述待测操作***中的运行环境进行确定性处理的情况下,在所述参考操作***上运行所述目标应用程序并记录运行过程中形成的运行数据,若多次运行所述目标应用程序的过程中形成的运行数据一致,则将记录的运行数据作为所述参考运行数据,其中,所述确定性处理规则用于将所述目标应用程序的运行环境处理成固定的运行环境。
4.根据权利要求3所述的方法,所述方法还包括:
若多次运行所述目标应用程序的过程中所形成的运行数据不一致,则更新所述确定性处理规则。
5.根据权利要求1-3任一项所述的方法,所述运行环境包括以下一种或多种信息:
所述目标应用程序对应的进程号和身份标识、所述目标应用程序的目录、所述目标程序运行时依赖的文件、***参数、分配给所述目标应用程序的硬件资源、所述目标应用程序运行过程中从操作***获取的随机变量、所述目标应用程序运行过程中从操作***获取的***时间、所述目标应用程序的文件***相关信息、所述目标应用程序对应的多个线程或进程的执行顺序、所述目标应用程序所处的网络环境、所述目标应用程序在运行过程中接收到的信号、CPU指令的返回结果。
6.根据权利要求1-4任一项所述的方法,所述获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,包括:
在所述待测操作***上运行所述目标应用程序,并记录运行过程中形成的测试运行数据;或
基于所述参考***调用序列中的***调用链路和入参,在所述待测操作***中执行***调用并得到***调用结果,基于所述***调用链路、所述入参和所述***调用结果得到所述测试***调用序列。
7.根据权利要求1所述的方法,所述参考运行数据还包括参考运行结果,所述获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,包括:
在所述待测操作***上运行所述目标应用程序,并记录运行过程中形成的测试***调用序列、以及测试运行结果;
所述至少基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性,包括:
判定所述参考运行结果与所述测试运行结果是否一致;
如果不一致,则确定所述目标应用程序与所述待测操作***不兼容;
如果一致,则基于所述参考***调用序列与所述测试***调用序列的对比结果,确定所述目标应用程序与所述待测操作***的兼容性。
8.根据权利要求7所述的方法,所述参考运行数据还包括参考函数堆栈数据,所述测试运行数据还包括测试函数堆栈数据,所述基于所述参考***调用序列与所述测试***调用序列的对比结果,确定所述目标应用程序与所述待测操作***的兼容性,包括:
判定所述参考***调用序列与所述测试***调用序列是否一致;
如果不一致,则确定所述目标应用程序与所述待测操作***不兼容;
如果一致,则判定所述参考函数堆栈数据与所述测试函数堆栈数据是否一致;
如果一致,则确定所述目标应用程序与所述待测操作***兼容。
9.根据权利要求8所述的方法,所述参考函数堆栈数据与所述测试函数堆栈数据一致,包括:
所述参考函数堆栈数据和所述测试函数堆栈函数数据中的函数一致;或
所述参考函数堆栈数据和所述测试函数堆栈函数数据中的函数一致、函数调用顺序一致、且函数调用结果一致。
10.根据权利要求1所述的方法,所述参考***调用序列包括网络相关的参考***调用序列和非网络相关的参考***调用序列,所述参考运行数据还包括参考网络数据包,所述参考网络数据包为所述目标应用程序进行真实的网络相关的***调用时,所述待测操作***返回的数据;
所述获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,包括:
在对所述待测操作***上的网络运行环境进行确定性处理的情况下,获取所述目标应用程序在所述待测操作***上运行过程中形成的非网络相关的测试***调用序列;
基于所述网络相关的参考***调用序列中的***调用链路和入参,在所述待测操作***上执行***调用,得到***调用结果,基于所述***调用链路、所述入参和所述***调用结果得到网络相关的测试***调用序列;
其中,所述对所述目标应用程序的网络运行环境进行确定性处理通过以下方式实现:拦截所述目标应用程序向所述待测操作***发送的网络相关的***调用请求,并返回所述参考网络数据包。
11.根据权利要求10所述的方法,所述基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性,包括:
在所述非网络相关的测试***调用序列与所述非网络相关的参考***调用序列一致、且所述网络相关的测试***调用序列与所述网络相关的参考***调用序列一致的情况下,确定所述目标应用程序与所述待测操作***兼容。
12.根据权利要求10所述的方法,所述方法还包括:
基于所述网络相关的参考***调用序列,以及所述参考网络数据包生成网络相关***调用脚本;
基于所述网络相关的参考***调用序列中的***调用链路和入参,在所述待测操作***上执行***调用,得到***调用结果,包括:
在所述待测操作***上运行所述网络相关***调用脚本,并在运行过程中拦截所述待测操作***返回的测试网络数据包,利用所述参考网络数据包中的数据更新所述测试网络数据包中的不确定性返回结果,并将更新后的测试网络数据包和***调用结果返回给所述目标应用程序。
13.一种兼容性测试装置,所述装置包括:
获取模块,用于获取在参考操作***上运行目标应用程序的过程中形成的参考运行数据,其中,所述参考操作***与所述目标应用程序兼容,所述参考运行数据至少包括参考***调用序列,所述目标应用程序的输入一致时,所述目标应用程序的运行结果一致;以及获取在待测操作***上运行所述目标应用程序的过程中形成的测试运行数据,其中,在所述参考操作***上运行所述目标应用程序的运行环境与在所述待测操作***上运行所述目标应用程序的运行环境一致,所述测试运行数据至少包括测试***调用序列;
比对模块,用于至少基于所述参考***调用序列与所述测试***调用序列的比对结果,确定所述目标应用程序与所述待测操作***的兼容性。
14.一种电子设备,所述电子设备包括:
存储器,用于存储可执行的计算机指令;
处理器,用于执行所述计算机指令时实现权利要求1至12任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211305678.1A CN115617668A (zh) | 2022-10-24 | 2022-10-24 | 一种兼容性测试方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211305678.1A CN115617668A (zh) | 2022-10-24 | 2022-10-24 | 一种兼容性测试方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115617668A true CN115617668A (zh) | 2023-01-17 |
Family
ID=84864879
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211305678.1A Pending CN115617668A (zh) | 2022-10-24 | 2022-10-24 | 一种兼容性测试方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115617668A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117235686A (zh) * | 2023-10-30 | 2023-12-15 | 杭州海康威视数字技术股份有限公司 | 数据保护方法、装置及设备 |
-
2022
- 2022-10-24 CN CN202211305678.1A patent/CN115617668A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117235686A (zh) * | 2023-10-30 | 2023-12-15 | 杭州海康威视数字技术股份有限公司 | 数据保护方法、装置及设备 |
CN117235686B (zh) * | 2023-10-30 | 2024-01-30 | 杭州海康威视数字技术股份有限公司 | 数据保护方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107766126B (zh) | 容器镜像的构建方法、***、装置及存储介质 | |
CN110941528B (zh) | 一种基于故障的日志埋点设置方法、装置及*** | |
US10387295B1 (en) | Application testing using multiple context-aware threads | |
CN107302476B (zh) | 一种测试异步交互***的自动化测试方法与*** | |
US10942837B2 (en) | Analyzing time-series data in an automated application testing system | |
CN110879781B (zh) | 程序调试方法、装置、电子设备及计算机可读存储介质 | |
US20130031532A1 (en) | Method, computer, and device for validating execution of tasks in adaptable computer systems | |
US11108638B1 (en) | Health monitoring of automatically deployed and managed network pipelines | |
CN115617668A (zh) | 一种兼容性测试方法、装置及设备 | |
CN112559525B (zh) | 数据检查***、方法、装置和服务器 | |
CN113094238A (zh) | 一种业务***异常监控方法及装置 | |
US11720348B2 (en) | Computing node allocation based on build process specifications in continuous integration environments | |
CN115237441A (zh) | 一种基于云平台的升级测试方法、装置及介质 | |
CN115525545A (zh) | 一种基于Docker的自动化测试方法、***、设备及介质 | |
CN115297024A (zh) | 网络安全设备的性能测试方法、装置及电子设备 | |
CN114996955A (zh) | 一种云原生混沌工程实验的靶场环境构建方法及装置 | |
CN114691496A (zh) | 单元测试方法、装置、计算设备及介质 | |
CN114579252A (zh) | 一种监测应用状态的方法、***、存储介质及设备 | |
CN112422308A (zh) | 一种实现运维监控的方法及装置 | |
CN109995617A (zh) | 主机管理特性的自动化测试方法、装置、设备及存储介质 | |
CN115373696B (zh) | 软件资源生成的低代码配置方法、***、设备及存储介质 | |
CN112380108B (zh) | 一种面向分区空间隔离的全自动测试方法 | |
US20230168918A1 (en) | Managing data access by communication protocols in continuous integration environments | |
CN112860224B (zh) | 一种函数执行环境构建方法、装置、电子设备及存储介质 | |
CN118295894A (zh) | 脚本生成方法、装置、计算设备、***及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |