CN112506800A - 测试代码的方法、装置、设备、介质和程序产品 - Google Patents

测试代码的方法、装置、设备、介质和程序产品 Download PDF

Info

Publication number
CN112506800A
CN112506800A CN202011531890.0A CN202011531890A CN112506800A CN 112506800 A CN112506800 A CN 112506800A CN 202011531890 A CN202011531890 A CN 202011531890A CN 112506800 A CN112506800 A CN 112506800A
Authority
CN
China
Prior art keywords
information
code
request information
online
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.)
Granted
Application number
CN202011531890.0A
Other languages
English (en)
Other versions
CN112506800B (zh
Inventor
刘骏萍
张�杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202011531890.0A priority Critical patent/CN112506800B/zh
Publication of CN112506800A publication Critical patent/CN112506800A/zh
Application granted granted Critical
Publication of CN112506800B publication Critical patent/CN112506800B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

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

测试代码的方法、装置、设备、介质和程序产品
技术领域
本公开涉及人工智能技术领域,具体涉及大数据和云平台技术领域,更具体地涉及一种测试代码的方法、装置、设备、介质和程序产品。
背景技术
随着互联网技术的发展,互联网产品的业务高速迭代更新。为了满足业务发展的需求,可以通过生成代码来形成产品的新版本,以在现有产品的基础上支持新功能,或者可以对支持产品运行的代码进行重构。在生成代码或重构代码后,通常需要对代码进行测试,以保证使用新生成代码或重构代码的产品的质量。
相关技术中,一般通过人工编写测试脚本或人工提供输入信息的方式来对新生成代码或重构代码进行测试。
发明内容
提供了一种用于提高测试准确性的测试代码的方法、装置、设备、介质和程序产品。
根据第一方面,提供了一种测试代码的方法,包括:获取预设时段内的多个线上请求信息;根据多个线上请求信息针对线上代码的覆盖率,确定多个线上请求信息中的测试信息;以及基于测试信息执行回放操作,以对测试环境中的待测试代码进行测试。
根据第二方面,提供了一种测试代码的装置,包括:信息获取模块,用于获取预设时段内的多个线上请求信息;测试信息确定模块,用于根据多个线上请求信息针对线上代码的覆盖率,确定多个线上请求信息中的测试信息;以及测试模块,用于基于测试信息执行回放操作,以对测试环境中的待测试代码进行测试。
根据第三方面,提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行本公开提供的测试代码的方法。
根据第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行本公开提供的测试代码的方法。
根据第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现本公开提供的测试代码的方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开实施例的测试代码的方法、装置、设备、介质和程序产品的应用场景示意图;
图2是根据本公开实施例的测试代码的方法的流程示意图;
图3是根据本公开实施例的确定多个线上请求信息中的测试信息的原理示意图;
图4是根据本公开另一实施例的确定多个线上请求信息中的测试信息的原理示意图;
图5是根据本公开另一实施例的确定多个线上请求信息中的测试信息的原理示意图;
图6是根据本公开实施例的获取多个线上请求信息的原理示意图;
图7是根据本公开实施例的测试代码的方法的原理示意图;
图8是根据本公开实施例的测试代码的装置的结构框图;以及
图9是用来实现本公开实施例的测试代码的方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本公开提供了一种测试代码的方法。该方法可以先获取预设时段内的多个线上请求信息。随后根据多个线上请求信息针对线上代码的覆盖率,确定多个线上请求信息中的测试信息。最后基于测试信息执行回放操作,以对测试环境中的待测试代码进行测试。
以下将结合图1对本公开提供的方法和装置的应用场景进行描述。
图1是根据本公开实施例的测试代码的方法、装置、设备、介质和程序产品的应用场景图。
如图1所示,该实施例的应用场景100例如可以包括基于线上代码搭建的线上环境110,和基于待测试代码搭建的测试环境120。
根据本公开的实施例,如图1所示,线上环境110例如可以包括第一终端设备111和第一服务器112,该第一终端设备111与第一服务器112之间可以通过网络通信。
示例性地,第一终端设备111例如可以安装有各种客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。该第一终端设备111例如可以为具有显示屏并且具有处理功能的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便捷计算机和台式计算机等等。
示例性地,第一服务器112可以是提供各种服务的服务器,例如对用户利用第一终端设备111所浏览的网站或所使用的客户端应用提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。其中,第一终端设备111所浏览的网站或所使用的客户端应用基于线上代码实现与用户的交互。
类似地,如图1所示,测试环境120例如可以包括第二终端设备121和第二服务器122,该第二终端设备121与第二服务器122之间可以通过网络通信。
示例性地,第二终端设备121例如可以类似于第一终端设备111,安装有各种客户端应用。第二服务器122可以类似于第一服务器112,为提供各种服务的服务器,例如对第二终端设备121中展示的网页或运行的客户端应用提供支持的后台管理服务器(仅为示例)。其中,第二终端设备121展示的网页或运行的客户端应用基于待测试代码实现。
在一实施例中,第一服务器112与第二服务器122例如可以为同一服务器。或者,第一服务器112和第二服务器122例如可以为应用程序服务器、分布式系统的服务器,或者是结合了区块链的服务器。或者,服务器还可以为虚拟服务器或云服务器等。
示例性地,线上环境110响应于用户操作,使得第一终端设备111接收到的请求信息例如可以作为测试流量。测试环境120在从线上环境110中获取到测试流量后,可以由第二终端设备121基于该测试流量向第二服务器122发送请求,以根据第二服务器122响应于该请求反馈给第二终端设备121的请求结果来确定待测试代码提供业务的合理性和准确性,实现对待测试代码的测试。
根据本公开的实施例,在待测试代码为第一终端设备111中安装的客户端应用或访问网站的新版本时,若待测试代码的测试结果表征待测试代码提供的业务合理且准确时,如图1所示,该实施例还可以由测试环境120向线上环境110提供更新信息,以采用待测试代码替换线上代码,实现客户端应用或访问网站的版本更新。
需要说明的是,本公开提供的测试代码的方法可以在测试环境中执行,或者也可以部分由线上环境执行,部分由测试环境执行。相应地,本公开提供的测试代码的装置可以设置在测试环境中,或者也可以部分设置在线上环境中,部分设置在测试环境中。
应该理解,图1中的第一终端设备、第一服务器、第二终端设备和第二服务器的类型和数目仅仅是示意性的。根据实现需要,可以具有任意类型和数目的的第一终端设备、第一服务器、第二终端设备和第二服务器。
以下将结合图1描述的应用场景,通过图2~图7对本公开提供的测试代码的方法进行详细描述。
图2是根据本公开实施例的测试代码的方法的流程示意图。
如图2所示,该实施例的测试代码的方法200可以包括操作S210、操作S230和操作S250。
在操作S210,获取预设时段内的多个线上请求信息。
根据本公开的实施例,可以将线上环境中第一终端设备在第一预设时段内,经由待测试代码对应的网站或客户端应用输入的请求信息作为多个线上请求信息。该多个线上请求信息为对应的网站或客户端应用在预设时段内向用户提供服务时接收的真实请求。其中,待测试代码为对支持对应的网络或客户端应用运行的线上代码的更新代码或重构代码。
示例性地,多个线上请求信息例如可以包括检索式、筛选条件等。该实施例可以通过录制线上环境中待测试代码对应的目标服务的服务流量得到线上请求信息。所述服务流量是用户通过第一客户端使用目标服务时产生的真实流量。
在操作S230,根据多个线上请求信息针对线上代码的覆盖率,确定多个线上请求信息中的测试信息。
根据本公开的实施例,该操作S230例如可以根据响应该多个线上请求信息时,调用的线上代码占线上代码总量的比例来确定多个线上请求信息针对线上代码的覆盖率。
示例性地,可以设定预设覆盖率,该操作S230例如可以在根据响应多个线上请求信息时调用的线上代码的比例高于预设覆盖率时,随机剔除部分的线上请求信息,并将剔除后剩余的线上请求信息作为测试信息。
示例性地,可以在多个线上请求信息中包括响应请求所调用的线上代码为相同代码的两个以上的线上请求信息时,从该两个以上的线上请求信息中随机挑选一个线上请求信息,并将该两个以上的线上请求信息中除被挑选到的线上请求信息外的其他线上请求信息剔除。最后将剔除后剩余的线上请求信息作为测试信息。
在操作S250,基于测试信息执行回放操作,以对测试环境中的待测试代码进行测试。
根据本公开的实施例,可以将测试信息作为测试环境中待测试代码支持的服务的输入信息,并得到响应于该输入信息得到的反馈信息,实现对测试信息执行的回放操作。通过分析该反馈信息可以确定待测试代码的准确性和合理性。例如,若反馈信息满足用户的需求时,可以确定待测试代码准确合理,若反馈信息不满足用户的需求,则确定待测试代码不准确或不合理。
根据本公开的实施例,可以将录制的服务流量输入至测试环境中待测试代码支持的目标服务中,并判断测试环境中的目标服务的响应数据和线上环境中目标服务输出的响应数据是否是一致的。若一致,则可以待测试代码对提供的目标服务不会产生影响,确定待测试代码准确合理。若不一致,则确定待测试代码存在异常,需要对待测试代码进行调整。
示例性地,针对测试信息执行回放操作时,可以先在测试环境中回放测试信息,得到针对测试信息的第一反馈信息。随后在线上环境中回放测试信息,得到针对测试信息的第二反馈信息。最后根据第一反馈信息和第二反馈信息,确定待测试代码的测试结果。可以理解的是,若线上环境预先存储有响应于线上请求信息得到的反馈信息时,该实施例可以从存储的反馈信息中获取与测试信息对应的反馈信息,作为第二反馈信息。
示例性地,在得到第一反馈信息和第二反馈信息后,除了分析两个反馈信息的差异外,例如还可以分析对测试信息进行回放时生成的日志,比较线上环境生成的日志和测试环境生成的日志,并通过两份日志分析出两个环境的接口可用性、拒绝的流量等信息,并根据分析比对结果生成测试报告。其中,在比对两个反馈信息时,例如还可以先从两个反馈信息中过滤掉不需要比较的字段,以此提高比对效率。其中,不需要比较的字段可以根据实际需求进行设定,本公开对此不做限定。
本公开实施例在录制得到线上请求信息后,通过根据针对线上代码的覆盖率对多个线上请求信息筛选,从而得到测试信息,可以在保证测试准确性的同时,减少回放流量的数量,并因此在一定程度上提高测试效率。再者,通过录制线上请求信息作为测试信息,相较于相关技术中由人工编写测试脚本或人工提供输入信息的代码测试方法,可以降低代码测试的成本和覆盖率,并因此可以在一定程度上提高测试效率和测试准确性。
图3是根据本公开实施例的确定多个线上请求信息中的测试信息的原理示意图。
根据本公开的实施例,在确定多个线上请求信息中的测试信息时,可以根据多个线上请求信息彼此之间的相似度来确定多个线上请求信息中是否包括重复的请求信息。以此提高剔除的重复的请求信息的准确性,进一步保证测试效率的提高。
在一实施例中,可以设定相似度阈值,在两个线上请求信息之间的相似度大于该相似度阈值时,可以确定该两个线上请求信息为相同的请求信息,并从该两个线上请求信息中随机挑选一个作为测试信息。其中,相似度阈值的设置例如应保证测试信息针对线上代码的覆盖率能够满足需求。
根据本公开的实施例,可以采用两个线上请求信息与线上代码之间的两个映射关系之间的相似度作为两个线上请求信息之间的相似度。以此可以保证确定的相似度是针对线上代码的,提高剔除的线上请求信息的准确性。
根据本公开的实施例,如图3所示,该实施例300可以先在预设线下环境320中回放多个线上请求信息(例如包括第一请求信息311、第二请求信息312、...、第n请求信息313)。其中,该预设线下环境320中能够运行线上环境中的线上代码,该预设线下环境320与线上环境的配置类似,区别在于一个为线下环境,一个为线上环境。随后根据回放请求信息时调用的线上代码,获取多个线上请求信息各自与线上代码之间的映射信息,得到第一请求信息311与线上代码之间的第一映射信息331、第二请求信息312与线上代码之间的第二映射信息332、...及第n请求信息313与线上代码之间的第n映射信息333。
示例性地,预设线下环境320中的代码例如还可以包括插桩代码,该插桩代码插入线上代码中。在回放请求信息并调用线上代码时,根据运行的插桩代码可得到回放请求信息所调用的线上代码的代码行。相应地,该实施例在确定多个线上请求信息与线上代码之间的映射信息时,可以在预设线下环境中回放每个线上请求信息。然后根据插桩代码的运行信息,来确定该回放的每个线上请求信息所调用的线上代码中的代码行为第一代码行。最终将该第一代码行作为该回放的每个线上请求信息与线上代码之间的映射信息。可以理解的是,该采用插桩代码确定第一代码行的方法与相关技术中采用插桩技术确定代码覆盖率的方法相似,在此不再赘述。
示例性地,映射信息例如可以不仅包括调用的代码行,还可以包括调用的代码行所定义的方法,以此可以进一步提高确定的映射信息的准确性,从而便于提高确定的两个线上请求信息之间的相似度的准确性。相应地,该实施例在根据插桩代码的运行信息确定每个线上请求信息调用的第一代码行后,可以将第一代码行和定义代码包括该第一代码行的方法作为每个线上请求信息与线上代码之间的映射信息。可以理解的是,为了提高映射信息的全面性,该实施例还可以将定义代码包括第一代码行的类的类名、包括第一代码行的代码块等作为映射信息的一部分,本公开对该映射信息包括的内容不做限定。
根据本公开的实施例,两个映射信息之间的相似度例如可以采用杰卡德相似度、皮尔逊相关系数、余弦相似度等中的任意一种来表示。两个映射信息的相似度越高,则两个映射信息对应的两个线上请求信息越趋近于相同。在计算相似度时,可以先将两个映射信息通过word2vec等工具转换为向量,得到两个向量。最后将两个向量之间的相似度作为两个映射信息之间的相似度。
根据本公开的实施例,如图3所示,在得到每个线上请求信息与线上代码之间的映射信息后,可以计算n个映射信息彼此之间的相似度,得到[n*(n-1)/2]个相似度340。随后可以将[n*(n-1)/2]个相似度340自小至大排列,从多个线上请求信息中筛选得到彼此之间的相似度较小的请求信息,作为测试信息。
示例性地,在筛选请求信息时,可以先从排列的[n*(n-1)/2]个相似度340沿排列顺序依次提取相似度,并根据相似度对应的映射信息中的第一代码行占线上代码总行数的比例,来确定调用对应的映射信息中第一代码行的线上请求信息针对线上代码的覆盖率,得到第二覆盖率362。同时,可以根据n个映射信息中包括的第一代码行占线上代码总行数的比例,来确定n个线上请求信息针对线上代码的覆盖率,得到第一覆盖率361。最后确定第一覆盖率361与第二覆盖率362之间的绝对差值是否小于预设值。若不小于预设值,则继续沿排列顺序提取相似度,直至根据提取的相似度确定的第二覆盖率与第一覆盖率之间的覆盖率差值370小于预设值,并将n个线上请求信息中挑选调用的代码行为最终提取的相似度对应的映射信息中的第一代码行的请求信息。最终将挑选得到的请求信息作为测试信息,得到第一测试信息351、第二测试信息352、...、第m测试信息353共m个测试信息。
根据本公开的实施例,常用的衡量覆盖率的指标主要有语句覆盖率、分支覆盖率、路径覆盖率、条件覆盖率和方法覆盖率等。该实施例中的第一覆盖率和第二覆盖率可以采用代码行覆盖率。在一实施例中,例如还可以在采用代码行覆盖率的同时,采用类覆盖率。其中,对于n个线上请求信息,针对线上代码的类覆盖率例如可以取100%,本公开对此不做限定。
可以理解的是,可以采用覆盖率工具来确定第一覆盖率和第二覆盖率。其中,覆盖率工具例如可以包括:PHP-code-coverage工具、基于Golang开发的测试覆盖工具、EMMA工具等。其中,EMMA为开源Java测试覆盖率分析工具,支持类、方法、代码行、基本代码块等多种类型的测试覆盖率分析。前述预设值可以根据实际需求进行设定,本公开对此不做限定。例如,该预设值可以为小于0.05的任意值,以此保证最终得到的测试信息在覆盖率上基本无损。
本公开实施例通过根据映射信息的相似度来确定线上请求信息中的测试信息,可以有效剔除多个线上请求信息中的多余请求信息,从而可以有效减少在测试环境中回放的请求信息的数量,提高测试效率。该实施例通过保证筛选得到的测试信息针对线上代码的覆盖率与多个线上请求信息针对线上代码的覆盖率的绝对差值小于预设值,可以保证请求信息的筛选对覆盖率基本无损,从而可以保证代码测试的覆盖度,提高测试的准确性和完整性。
图4是根据本公开另一实施例的确定多个线上请求信息中的测试信息的原理示意图。
根据本公开的实施例,在对待测试代码进行测试时,例如可以仅针对待测试代码中相较于线上代码有差异的代码进行测试,以此有效提高测试效率,避免对支持线上已有业务的代码进行回归测试的工作量。相应地,可以根据待测试代码与线上代码之间的差异来从多个线上请求信息中挑选测试信息。
根据本公开的实施例,如图4所示,该实施例400可以先确定待测试代码411与线上代码412之间的差异,定位得到存在差异的代码行,作为差异代码行420。随后,通过识别该差异代码行中的代码,确定针对待测试代码411与线上代码412之间的差异的方法类430。随之获取方法类-接口映射关系440,查询映射关系中与方法类430具有映射关系的接口,作为目标接口450。最后,从多个线上请求信息460中筛选得到所针对的接口为目标接口的请求信息为测试信息470。
示例性地,可以通过采用代码扫描工具对待测试代码和线上代码进行扫描,得到两者之间的差异,并将待测试代码中与线上代码存在差异的代码行作为差异代码行420。将该差异代码行420定义的方法类作为针对差异的方法类。通过校验层调用的方法和调用方法时所引用的接口,来获取方法类与接口之间的映射关系。线上请求信息所针对的接口为以线上请求信息为输入,输出得到反馈信息的接口。
根据本公开的实施例,在待测试代码相较于线上代码对方法类中的函数进行了修改的情况下,该实施例可以将所有调用该函数的方法类均作为针对差异的方法类,以此保证筛选得到的测试信息的完整性。
示例性地,在确定针对待测试代码与线上代码之间的差异的方法类时,可以先确定待测试代码中与线上代码之间存在差异的第二代码行。即待测试代码中与线上代码存在差异的代码所在行。然后确定定义代码包括该第二代码行中代码的函数,将该函数作为目标函数。最后,将该目标函数所依存的方法类和调用该目标函数的方法类作为针对差异的方法类。
示例性地,可以根据函数与方法类之间的依赖关系树查询调用目标函数的方法类。其中,依赖关系树可以通过对网站或应用程序的全量代码进行扫描来生成。该依赖关系树可以存储在图形数据库(例如Neo4j数据库)中。该实施例在确定了目标函数后,可以以该目标函数为查询条件,查询图形数据库中的依赖关系树,得到调用目标函数的方法类。最后,将与确定的方法类具有映射关系的接口作为目标接口,并对多个线上请求信息进行筛选。该实施例通过根据依赖关系树来查询调用目标函数的方法类,可以得到跨代码库的关系,从而可以有效提高确定的方法类的完整性,提高确定的测试信息的覆盖度。
图5是根据本公开另一实施例的确定多个线上请求信息中的测试信息的原理示意图。
根据本公开的实施例,在确定测试信息时,例如可以先采用前文描述的方法从多个线上请求信息中筛选得到彼此之间的相似度较小的请求信息,作为候选请求信息。然后再采用前文描述的方法从候选请求信息中筛选得到所针对的请求接口为目标接口的信息,作为测试信息。以此进一步减少待回放的流量,提高对待测试代码的测试效率。
示例性地,如图5所示,该实施例500在得到包括第一请求信息511、第二请求信息512、...、第n请求信息513的n个线上请求信息后,可以先通过预设线下环境520回放该n个线上请求信息。获得该n个线上请求信息中各线上请求信息与线上代码之间的映射信息,得到第一映射信息531、第二映射信息532、...、第n映射信息533等n个映射信息。然后计算该n个映射信息彼此之间的相似度,作为映射信息对应的请求信息的相似度,总共得到[n*(n-1)/2]个相似度540。随后根据该[n*(n-1)/2]个相似度540,从n个线上请求信息中筛选得到m个线上请求信息550,该m个线上请求信息550针对线上代码的覆盖率与n个线上请求信息针对线上代码的覆盖率之间的绝对差值小于预设值。在得到m个线上请求信息550之后,或回放n个线上请求信息的同时,可以通过扫描待测试代码561和线上代码562来确定差异代码行570。随之确定针对待测试代码561和线上代码562之间的差异的方法类,并根据方法类来确定目标接口580。最后从m个线上请求信息550中筛选所针对的接口为该目标接口580的信息,得到测试信息590。其中,m、n均为自然数,且m小于等于n。
图6是根据本公开实施例的获取多个线上请求信息的原理示意图。
根据本公开的实施例,在通过录制线上流量得到多个线上请求信息时,例如还可以对录制得到的所有流量进行筛选,将满足条件的流量作为多个线上请求信息。以此减少后续在根据覆盖率挑选测试信息时所需时长,提高代码测试效率。
根据本公开的实施例,如图6所示,该实施例600可以先获取线上环境在预设时段内接收的请求信息。该实施例可以将线上环境的请求信息(例如可以包括cookie、UI请求数据、body数据等)打印成日志,然后将日志同步转存至文件库61(例如可以为分布式文件系统)中。该实施例可以从文件库61中读取预设时段内生成的日志中的每行日志,将每行日志作为一个请求信息,得到预设时段内的所有请求信息610。在一实施例中,例如可以总共得到t个请求信息,t为自然数,且t大于等于前文描述的m和n。
在获取到请求信息610后,可以对每个请求信息进行识别,得到每个请求信息的属性信息620。该对请求信息的识别例如可以采用字符识别工具进行识别。多个请求信息中包括的属性信息的类型及个类型的属性信息的位置是固定的。或者,该实施例还可以采用序列标注模型对每个请求信息进行属性标注,根据标注结果与请求信息的对应关系来得到请求信息的属性信息。
在得到属性信息后,可以根据属性信息对从文件库61中获取的请求信息610进行筛选,将请求信息610中属性信息满足预设条件的请求信息,得到多个线上请求信息。
示例性地,属性信息例如可以包括指示请求信息所针对的请求接口的信息,例如可以为所针对的请求接口的名称。该实施例可以预先设定有可进行流量回放的接口为预设接口。例如从数据库读取数据的读接口为可进行流量回放的接口,在回放流量后会影响线上数据的接口为不能进行流量回放的接口。不能进行流量回放的接口例如可以为涉及到交易的接口或往数据库中写入数据的写接口等。该实施例可以从请求信息610中筛选所针对的接口为预设接口的请求信息,作为备选请求信息630。随后根据预设条件从备选请求信息630中筛选得到多个线上请求信息。
根据本公开的实施例,可以将筛选得到的备选请求信息630作为线上请求信息,以从线上请求信息中进一步筛选测试信息。相应地,前文描述的预设条件可以为所针对的接口为预设接口。
示例性地,属性信息例如还可以包括多个参数的取值。例如,在请求信息为使用统一资源定位符URL传输的数据时,该多个参数例如可以为“get”后的键值对形式的数据中key的取值,相应地,该多个参数的取值即为键值对中value的取值。该实施例在得到备选请求信息后,例如还可以根据各备选请求信息的多个预设参数的取值,对备选请求信息630进行分类聚合,并从分类聚合得到的请求信息组中筛选一部分请求信息,作为多个线上请求信息的一部分。以此,可以在一定程度上减少重复的请求信息,减少筛选得到测试信息的流量基数,提高筛选效率和代码测试效率。
示例性地,如图6所示,备选请求信息630例如可以为u个,该u个请求信息通过依据参数的取值进行聚类,可以将u个备选请求信息划分至v个请求信息组640。从每个请求信息组640中抽取预设数量的请求信息,得到多个线上请求信息。其中,预设数量例如可以根据实际需求进行设定,本公开对此不做限定。其中,u和v均为自然数,且u小于等于前文描述的t,u大于等于前文描述的n、m和v。
图7是根据本公开实施例的测试代码的方法的原理示意图。
如图7所示,该实施例700在测试代码时,得到测试信息的流程例如可以包括操作S710~操作S790。其中,操作S710~操作S740与操作S750~操作S780例如可以同步执行。
在操作S710,将针对网站或客户端应用新开发的代码合入master分支节点,使得该master分支节点可以维护有全量的线上代码。
在操作S720,识别合入master分支节点的代码,得到该代码中方法类与函数之间的调用关系。随后根据该调用关系对方法类-函数的依赖关系树进行更新。
在操作S730,将待测试代码提交至该master分支节点。
在操作S740,master分支节点分析待测试代码,并确定待测试代码中与线上代码存在差异的代码行,作为代码diff。随后根据依赖关系树确定针对该代码diff的方法类。该操作S740与前文描述的根据差异代码行确定方法类的操作类似,在此不再赘述。
在操作S750,在对线上流量定期录制后,识别录制的流量得到流量特征,并根据识别得到的流量特征对流量进行初筛。该操作S750与前文描述的从分布式文件系统中获取的请求信息中筛选得到多个线上请求信息的操作类似,在此不再赘述。
在操作S760,将初筛得到的流量在前文描述的预设线下环境中进行回放。
在操作S770,根据回放结果,根据针对线上代码的覆盖率来筛除重复流量。该操作S770与前文描述的根据映射信息确定相似度,并根据相似度筛选请求信息的操作类似,在此不再赘述。
在操作S780,根据操作S770筛选得到的流量生成在测试环境中回放的测试用例(即Test case)。
在操作S790,将与确定的针对代码diff的方法类具有映射关系的接口作为目标接口,对生成的测试用例进行筛选,得到精选case。该操作与前文描述的从多个线上请求信息中筛选所针对的接口为目标接口的请求信息的操作类似,在此不再赘述。
最后,在操作S7100,在测试环境中对得到的精选case进行回放,以对测试环境中的待测试代码进行校验。
可以理解的是,图7中的操作S750~操作S770例如可以定期执行,以实现对线上流量的定期录制和定期筛选。
基于前文描述的测试代码的方法,本公开还提供了一种测试代码的装置。以下将结合图8对该装置进行详细描述。
图8是根据本公开实施例的测试代码的装置的结构框图。
如图8所示,该实施例的测试代码的装置800可以包括信息获取模块810、测试信息确定模块830和测试模块850。
信息获取模块810用于获取预设时段内的多个线上请求信息。在一实施例中,信息获取模块810可以用于执行前文描述的操作S210,在此不再赘述。
测试信息确定模块830用于根据多个线上请求信息针对线上代码的覆盖率,确定多个线上请求信息中的测试信息。在一实施例中,测试信息确定模块830可以用于执行前文描述的操作S230,在此不再赘述。
测试模块850用于基于测试信息执行回放操作,以对测试环境中的待测试代码进行测试。在一实施例中,测试模块850可以用于执行前文描述的操作S250,在此不再赘述。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图9示出了可以用来实现本公开实施例的测试代码的方法的电子设备900的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图9所示,设备900包括计算单元901,其可以根据存储在只读存储器(ROM)902中的计算机程序或者从存储单元908加载到随机访问存储器(RAM)903中的计算机程序,来执行各种适当的动作和处理。在RAM 903中,还可存储设备900操作所需的各种程序和数据。计算单元901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
设备900中的多个部件连接至I/O接口905,包括:输入单元906,例如键盘、鼠标等;输出单元907,例如各种类型的显示器、扬声器等;存储单元908,例如磁盘、光盘等;以及通信单元909,例如网卡、调制解调器、无线通信收发机等。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元901可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元901的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元901执行上文所描述的各个方法和处理,例如测试代码的方法。例如,在一些实施例中,确定测试代码的方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元908。在一些实施例中,计算机程序的部分或者全部可以经由ROM 902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序加载到RAM 903并由计算单元901执行时,可以执行上文描述的测试代码的方法的一个或多个步骤。备选地,在其他实施例中,计算单元901可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行测试代码的方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (13)

1.一种测试代码的方法,包括:
获取预设时段内的多个线上请求信息;
根据所述多个线上请求信息针对线上代码的覆盖率,确定所述多个线上请求信息中的测试信息;以及
基于所述测试信息执行回放操作,以对测试环境中的待测试代码进行测试。
2.根据权利要求1所述的方法,其中,确定所述多个线上请求信息中的测试信息包括:
在预设线下环境中回放所述多个线上请求信息,获取所述多个线上请求信息各自与线上代码之间的映射信息,所述预设线下环境中的代码包括所述线上代码;
根据所述映射信息,确定所述多个线上请求信息彼此之间的相似度;以及
从所述多个线上请求信息中筛选得到彼此之间的相似度较小的请求信息,
其中,筛选到的请求信息针对所述线上代码的覆盖率与所述多个线上请求信息针对所述线上代码的覆盖率的绝对差值小于预设值。
3.根据权利要求2所述的方法,其中,所述预设线下环境中的代码还包括插桩代码;获取所述多个线上请求信息各自与线上代码之间的映射信息包括针对所述多个线上请求信息中的每个线上请求信息:
在所述预设线下环境中回放所述每个线上请求信息;
根据所述插桩代码的运行信息,确定所述每个线上请求信息调用的所述线上代码中的第一代码行;以及
确定所述第一代码行及定义代码包括所述第一代码行的方法为所述每个线上请求信息与所述线上代码之间的映射信息。
4.根据权利要求1或2所述的方法,其中,确定所述多个线上请求信息中的测试信息还包括:
确定针对所述待测试代码与所述线上代码之间的差异的方法类;
确定与所述方法类具有映射关系的接口,作为目标接口;以及
从所述多个线上请求信息中筛选得到所针对的请求接口为所述目标接口的信息。
5.根据权利要求4所述的方法,其中,确定针对所述待测试代码与所述线上代码之间的差异的方法类包括:
确定所述待测试代码中与所述线上代码存在差异的第二代码行;
确定定义代码包括所述第二代码行中代码的函数,作为目标函数;以及
确定所述目标函数所依存的方法类和调用所述目标函数的方法类为针对所述差异的方法类。
6.根据权利要求1所述的方法,其中,获取预设时段内的多个线上请求信息包括:
获取线上环境在预设时段内接收的请求信息;
识别所述请求信息中的每个请求信息,以确定所述每个请求信息的属性信息;以及
确定所述请求信息中所述属性信息满足预设条件的请求信息,作为所述多个线上请求信息。
7.根据权利要求6所述的方法,其中,属性信息包括指示请求信息所针对的请求接口的信息,确定所述请求信息中所述属性信息满足预设条件的请求信息包括:
确定所述请求信息中所针对的请求接口为预设接口的请求信息为备选请求信息;以及
根据预设筛选条件从所述备选请求信息中筛选得到所述多个线上请求信息。
8.根据权利要求7所述的方法,其中,属性信息包括多个预设参数的取值,根据预设筛选条件从所述备选请求信息中筛选得到所述多个线上请求信息包括:
根据所述备选请求信息中各请求信息的所述多个预设参数的取值,将所述备选请求信息划分至至少一个请求信息组;以及
从所述至少一个请求信息组中的每个请求信息组中抽取预设数量的请求信息,得到所述多个线上请求信息。
9.根据权利要求1所述的方法,其中,针对所述测试信息执行回放操作包括:
在所述测试环境中回放所述测试信息,得到针对所述测试信息的第一反馈信息;
在线上环境中回放所述测试信息,得到针对所述测试信息的第二反馈信息;以及
根据所述第一反馈信息和所述第二反馈信息,确定所述待测试代码的测试结果。
10.一种测试代码的装置,包括:
信息获取模块,用于获取预设时段内的多个线上请求信息;
测试信息确定模块,用于根据所述多个线上请求信息针对线上代码的覆盖率,确定所述多个线上请求信息中的测试信息;以及
测试模块,用于基于所述测试信息执行回放操作,以对测试环境中的待测试代码进行测试。
11.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1~9中任一项所述的方法。
12.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1~9中任一项所述的方法。
13.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1~9中任一项所述的方法。
CN202011531890.0A 2020-12-22 2020-12-22 测试代码的方法、装置、设备、介质和程序产品 Active CN112506800B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011531890.0A CN112506800B (zh) 2020-12-22 2020-12-22 测试代码的方法、装置、设备、介质和程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011531890.0A CN112506800B (zh) 2020-12-22 2020-12-22 测试代码的方法、装置、设备、介质和程序产品

Publications (2)

Publication Number Publication Date
CN112506800A true CN112506800A (zh) 2021-03-16
CN112506800B CN112506800B (zh) 2023-08-18

Family

ID=74923358

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011531890.0A Active CN112506800B (zh) 2020-12-22 2020-12-22 测试代码的方法、装置、设备、介质和程序产品

Country Status (1)

Country Link
CN (1) CN112506800B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114676067A (zh) * 2022-05-26 2022-06-28 武汉迎风聚智科技有限公司 一种测试脚本的参数化处理方法以及装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5754760A (en) * 1996-05-30 1998-05-19 Integrity Qa Software, Inc. Automatic software testing tool
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN101916225A (zh) * 2010-09-02 2010-12-15 于秀山 图形用户界面软件功能覆盖测试方法
US20120167059A1 (en) * 2010-12-24 2012-06-28 International Business Machines Corporation Evaluating Coverage of a Software Test
CN103838666A (zh) * 2012-11-27 2014-06-04 百度在线网络技术(北京)有限公司 一种确定代码执行覆盖率的方法和装置
CN106886492A (zh) * 2017-02-13 2017-06-23 北京趣拿软件科技有限公司 基于数据回放的测试方法和测试装置
CN109491904A (zh) * 2018-11-04 2019-03-19 北京亚鸿世纪科技发展有限公司 一种SparkSQL应用程序的自动化测试方法和装置
CN111858375A (zh) * 2020-07-28 2020-10-30 中国工商银行股份有限公司 软件测试方法、装置、电子设备和介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5754760A (en) * 1996-05-30 1998-05-19 Integrity Qa Software, Inc. Automatic software testing tool
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN101916225A (zh) * 2010-09-02 2010-12-15 于秀山 图形用户界面软件功能覆盖测试方法
US20120167059A1 (en) * 2010-12-24 2012-06-28 International Business Machines Corporation Evaluating Coverage of a Software Test
CN103838666A (zh) * 2012-11-27 2014-06-04 百度在线网络技术(北京)有限公司 一种确定代码执行覆盖率的方法和装置
CN106886492A (zh) * 2017-02-13 2017-06-23 北京趣拿软件科技有限公司 基于数据回放的测试方法和测试装置
CN109491904A (zh) * 2018-11-04 2019-03-19 北京亚鸿世纪科技发展有限公司 一种SparkSQL应用程序的自动化测试方法和装置
CN111858375A (zh) * 2020-07-28 2020-10-30 中国工商银行股份有限公司 软件测试方法、装置、电子设备和介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114676067A (zh) * 2022-05-26 2022-06-28 武汉迎风聚智科技有限公司 一种测试脚本的参数化处理方法以及装置

Also Published As

Publication number Publication date
CN112506800B (zh) 2023-08-18

Similar Documents

Publication Publication Date Title
US9703823B2 (en) Automated dynamic data quality assessment
CN111061956B (zh) 用于生成信息的方法和装置
US20210209624A1 (en) Online platform for predicting consumer interest level
EP3899717A1 (en) Real time application error identification and mitigation
CN113326247B (zh) 云端数据的迁移方法、装置及电子设备
CN114428677B (zh) 任务处理方法、处理装置、电子设备及存储介质
CN111400361A (zh) 数据实时存储方法、装置、计算机设备和存储介质
CN109872230B (zh) 金融数据分析系统的测试方法、装置、介质、电子设备
CN112506800B (zh) 测试代码的方法、装置、设备、介质和程序产品
CN113987086A (zh) 数据处理方法、数据处理装置、电子设备以及存储介质
US9286348B2 (en) Dynamic search system
CN115759100A (zh) 数据处理方法、装置、设备及介质
CN115454971A (zh) 数据迁移方法、装置、电子设备及存储介质
CN115344495A (zh) 批量任务测试的数据分析方法、装置、计算机设备及介质
CN114978944A (zh) 压力测试方法、装置及计算机程序产品
CN114693116A (zh) 代码评审有效性的检测方法及装置、电子设备
CN113722593A (zh) 事件数据处理方法、装置、电子设备和介质
CN114021642A (zh) 数据处理方法、装置、电子设备和存储介质
CN113051479A (zh) 文件处理、推荐信息生成方法、装置、设备及存储介质
CN109992614B (zh) 数据获取方法、装置和服务器
CN113590447A (zh) 埋点处理方法和装置
CN113434432B (zh) 一种推荐平台的性能测试方法、装置、设备、及介质
CN113360765B (zh) 事件信息的处理方法、装置、电子设备和介质
CN112035425B (zh) 一种日志的存储方法、装置及计算机系统
CN113760765B (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
GR01 Patent grant
GR01 Patent grant