CN112948271A - 一种代码测试方法、装置、设备及存储介质 - Google Patents
一种代码测试方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112948271A CN112948271A CN202110384212.4A CN202110384212A CN112948271A CN 112948271 A CN112948271 A CN 112948271A CN 202110384212 A CN202110384212 A CN 202110384212A CN 112948271 A CN112948271 A CN 112948271A
- Authority
- CN
- China
- Prior art keywords
- code
- test
- port
- server
- request
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 279
- 238000003860 storage Methods 0.000 title claims abstract description 23
- 238000000034 method Methods 0.000 claims abstract description 47
- 238000004458 analytical method Methods 0.000 claims description 7
- 238000012545 processing Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 25
- 238000005516 engineering process Methods 0.000 description 14
- 238000013507 mapping Methods 0.000 description 13
- 238000013461 design Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 239000000047 product Substances 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000004140 cleaning Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000013100 final test Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000013522 software testing Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000000275 quality assurance Methods 0.000 description 1
- 238000004445 quantitative analysis Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
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/368—Test management for test version control, e.g. updating test cases to a new software version
-
- 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/3684—Test management for test design, e.g. generating new test cases
-
- 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
技术领域
本申请涉及云网络技术领域,尤其涉及一种代码测试方法、装置、设备及存储介质。
背景技术
Diffy是一个开源的自动化测试工具,是一种Diffy测试技术。它能够自动检测基于接口技术的服务,通过同时运行新代码和旧代码,来获取新代码和旧代码的运行结果,然后对比新旧代码的不同运行结果,来推断新代码存在的问题。
具体的,当服务器利用Diffy对待测版本的代码进行测试时,需要先获取历史版本对应的代码,然后根据统一的请求参数运行待测版本和历史版本,再从待测版本和历史版本对应的接口获取运行结果,再对不同的运行结果进行比较。
由于Diffy只能从单服务器的不同端口处获取不同的运行结果,在分布式架构中,同一服务不同版本的代码很可能部署在不同服务器的相同端口上,因此Diffy工具不能适用于分布式架构中。
发明内容
本申请实施例提供了一种代码测试方法、服务器及存储介质,可以建立不同服务器的相同端口与同一服务器的不同端口的映射关系,这样,Diffy就可以从同一服务器的不同端口获取不同的运行结果,完成对待测版本对应代码的测试。
有鉴于此,本申请一方面提供了一种代码测试的方法,包括:
获取基于第一服务的待测代码和历史代码,其中,待测代码部署于第一服务器上,历史代码部署于第二服务器上。第一服务器上待测代码对应的端口与目标服务器上的第一端口对应,第二服务器上历史代码对应的端口与目标服务器上的第二端口对应。
根据获取到的测试实例确定测试请求,并通过第一端口和第二端口向第一服务器和第二服务器发送测试请求,其中,测试请求用于指示第一服务器执行待测代码,以及指示第二服务器执行历史代码,测试请求包括测试参数。
从第一端口获取待测代码针对于测试参数的第一运行结果,并从第二端口获取历史代码针对于测试参数的第二运行结果。
根据第一运行结果和第二运行结果,确定待测代码对应的测试结果。
本申请另一方面提供了一种代码测试装置,包括:
获取单元,用于获取基于第一服务的待测代码和历史代码,其中,待测代码部署于第一服务器上,历史代码部署于第二服务器上。第一服务器上待测代码对应的端口与目标服务器上的第一端口对应,第二服务器上历史代码对应的端口与目标服务器上的第二端口对应。
确定单元,用于根据获取到的测试实例确定测试请求。
发送单元,用于通过第一端口和第二端口向第一服务器和第二服务器发送测试请求,其中,测试请求用于指示第一服务器执行待测代码,以及指示第二服务器执行历史代码,测试请求包括测试参数。
获取单元,还用于从第一端口获取待测代码针对于测试参数的第一运行结果,并从第二端口获取历史代码针对于测试参数的第二运行结果。
确定单元,还用于根据第一运行结果和第二运行结果,确定待测代码对应的测试结果。
在一种可能的设计中,发送单元,具体用于向第一端口和第二端口发送测试请求,通过第一端口向第一服务器中待测代码对应的端口发送测试请求,通过第二端口向第一服务器中历史代码对应的端口发送测试请求。
获取单元,具体用于通过第一端口接收第一服务器上待测代码对应的端口发送的第一运行结果,通过第二端口接收第二服务器上历史代码对应的端口发送的第二运行结果。
在一种可能的设计中,历史代码运行于线上环境和测试环境,第二运行结果包括线上运行结果和测试运行结果。确定单元,具体用于根据线上运行结果和测试运行结果,获取第一差异结果,根据所述线上运行结果和所述第一运行结果,获取第二差异结果,根据第一差异结果和第二差异结果,确定待测代码对应的测试结果。
在一种可能的设计中,获取单元,还用于获取历史代码对应的历史请求数据,历史请求数据包括针对于历史代码的历史请求串。对历史请求串进行词法分析,获取所述历史请求串包括的目标键值对,其中,目标键值对包括第一键和第一值。
确定单元,还用于根据目标键值对确定测试请求中的测试参数。
在一种可能的设计中,获取单元,还用于获取历史请求数据中的第一请求串和第二请求串;
确定单元,还用于若第一请求串包括的第一键与第二请求串包括的第一键相同,且第一请求串包括的第一值与第二请求串包括的第一值不同,则删除第二请求串,并根据第一请求串包括的第一键和第一值确定测试请求中的测试参数。
在一种可能的设计中,确定单元,还用于确定历史请求数据中的第三请求串,根据第三请求串中包括的第一键生成第四请求串,其中,第四历史请求串包括的第一键与第三请求串包括的第一键相同,且第四历史请求串包括的第一值与第三请求串包括的第一值不同。根据第四请求串包括的第一键和第一值确定测试请求中的测试参数。
在一种可能的设计中,获取单元,还用于获取第一端口的端口信息和第二端口的端口信息。
确定单元,还用于根据第一端口的端口信息以及第一运行结果,生成第一区块,并将第一区块添加至区块链中,根据第二端口的端口信息以及第二运行结果,生成第二区块,并将第二区块添加至所述区块链中。
本申请的另一方面提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例提供了一种代码测试方法,当使用Diffy测试分布式架构下的运行代码时,可以先建立待测代码对应的服务端口与目标服务器上第一端口的映射关系,以及历史代码对应的服务端口与目标服务器上第二端口的映射关系,这样,目标服务器上的Diffy测试软件就可以通过目标服务器上的第一端口和第二端口分别向待测代码和历史代码对应的服务器发送测试请求,然后从第一端口和第二端口获取待测代码和历史代码的运行结果,通过判断历史代码运行结果和待测代码运行结果,来确定待测代码的测试结果。即Diffy可以从目标服务器的不同端口处获取不同的运行结果,解决了分布式架构下由于历史代码和待测代码部署于不同服务器上而造成Diffy无法适用的问题,提高了Diffy的适用能力。
附图说明
图1为本申请实施例提供的一种Diffy测试的流程示意图;
图2为本申请实施例提供的一种代码测试的方法的流程示意图;
图3为本申请实施例提供的另一种代码测试的方法的流程示意图;
图4为本申请实施例提供的一种数据共享系统的结构示意图;
图5为本申请实施例提供的一种区块链的结构示意图;
图6为本申请实施例提供的一种生成区块链的流程示意图;
图7为本申请实施例提供的一种代码测试装置的结构示意图;
图8为本申请实施例提供的另一种代码测试装置的结构示意图。
具体实施方式
本申请实施例提供了一种代码测试方法、服务器及存储介质,可以建立不同服务器的相同端口与同一服务器的不同端口的映射关系,这样,Diffy就可以从同一服务器的不同端口获取不同的运行结果,完成对待测版本对应代码的测试。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“对应于”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例涉及云网络技术领域,具体的,可以在云端实现对待测代码的测试,利用云网络技术提供的历史数据来确定测试实例,并利用测试实例实现对待测代码的测试,然后将经过测试合格的代码投放适用,这样终端就可以调用云端代码,获取相关服务。
在介绍本申请实施例提供的技术方案之前,先对云技术进行简单介绍。云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
软件测试是软件开发生命周期的一个重要环节,测试工作开展的好坏,很大程度上决定了软件产品质量的好坏。但软件产品随着版本的持续迭代,功能将日益增多,系统也会愈加复杂,从质量保障的角度,除了要保障每次新增或者优化的产品模块质量外,还需要确定新增或者修改的功能不影响之前已经存在的功能。若要进行产品功能全量回归,软件代码测试的工作量将非常巨大。
对于一个软件服务项目而言,从第一个版本发布到形成一个相对完善的版本,再到后面的重大更新甚至重构,需要经过许多版本的迭代。随着项目的迭代,产品功能将不断增加,服务项目则会变得越来越复杂。然而在该项目的后期发展阶段,产品新增或优化的功能相对于上一版本已经存在的功能的占比将越来越小,但每一次或大或小的版本升级,都需要保证新增或修改的功能不影响上一版本已存在的功能,但要达到这一点却是困难异常,哪怕只改了一行代码,都很难保证这项功能对上一版本的功能无任何影响。
为了提升业务上线的安全性,在新版本在上线之前,需要对其所有功能进行测试,一般采用单元测试的方法,开发者在增加或变动某项新功能后,补充相应的测试用例,利用测试用例不断的运行新版本对应的相关功能的代码,通过多个测试用例对应的运行结果来重复排查该功能是否有异常情况发生。但是完成一个测试用例所花费的时间可能比完成相应功能花费的时间更多,有时甚至达到2至3倍。特别在后期,一个小的修改可能需要增加几十甚至上百个用例。
同时在新版本上线之前,测试人员需要对之前的功能完成回归测试,其回归测试的工作量也伴随着版本的不断更新也变得越来越大。在回归测试中,可能几百甚至上千用例中才会发现一个问题,甚至一个问题也没有,测试投入工作的时间与最终的收益不成比例。因此,靠验证测试用例对应的输出结果来对新版本的代码进行测试,工作量巨大且效率极差,并且会耗费大量的人力物力。
而Diffy为上述问题提供了很好的解决方法。Diffy是一个开源的自动化测试工具,是一种Diff测试技术。它能够自动检测基于Apache Thrift或者基于HTTP的服务,通过同时运行新代码和历史代码,对比其运行结果,发现潜在问题。使用Diffy,只需要进行简单的配置,之后不需要再编写测试代码。
Diffy不同于常用的其他测试工具的是,其他测试工具是从软件代码或者接口获取代码运行结果,然后通过验证代码运行结果的正确性来判断代码是否出现逻辑错误。而Diffy是通过代码的差异来进行测试。具体的就是通过对比待测试的新版本和稳定输出的历史版本,来判断待测试的新版本是否出错。
具体的,在测试过程中,Diffy充当一个代理,将相同的请求分发至不同版本的系统中去,然后运行不同系统,通过对比不同系统的输出,来确定最终的测试结果。图1为本申请实施例提供的一种Diffy测试的流程示意图。如图1所示,Diffy将接收到的一个请求分发至三个不同版本的系统中,包括待测版本、稳定版本和稳定版本副本,通过运行不同版本的系统代码,获得三个运行结果,然后通过对比待测版本和稳定版本对应的运行结果,来获得运行结果原始区别,通过对比稳定版本和稳定版本副本对应的运行结果,来获得噪声,最后根据噪声来过滤运行结果原始区别,得到测试差异,然后根据测试差异来分析待测版本存在的问题。
其中,待测版本为更新优化后的新版本,稳定版本则是历史上线版本,或者已知功能运行正常的版本,而稳定版本副本则是上述稳定版本的副本,其于稳定版本有着相同的代码,但运行环境不同,示例性的,稳定版本可以运行于线上环境,副本则可以运行于测试环境,可以理解的,副本用于排除噪声,提高测试精度。
但是Diffy仅适用于单服务器多端口间的校验,即Diffy只能将同一请求分发至一个服务器的不同端口,并从一个服务器的不同端口获取不同版本运行结果进行对比,因此无法适用于分布式架构,在分布式架构下,待测新版本和历史版本往往运行在不同的服务器上,因此,本申请实施例提供了一种新的代码测试方式,可以解决Diffy不能适用分布式架构的问题。具体的,可以利用端口映射工具Rinetd来建立不同服务器上不同端口映射关系,最终根据该映射关系实现Diffy的功能,完成分布式架构下的代码测试。
Rinetd是Unix和Linux操作系统中的一个重定向传输控制协议(transmissioncontrol protocol,TCP)连接的工具。Rinetd是单一过程的服务器,可以处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对,可以重定向很多连接而不对这台机器增加额外的负担。
基于上述功能,可以利用Rinetd端口建立不同服务器之间的端口映射关系,这样,Rinetd端口就可以作为连接多台服务器的“桥梁”,将待测版本对应的端口和目标服务器的第一端口关联,将历史版本对应的端口与目标服务器的第二端口关联,示例性的,还可以将历史版本副本对应的端口与目标服务器的第三端口关联。这样,Diffy只需要调用目标服务器上的不同端口就可以实现发送请求和调用运行结果的功能,完成对待测版本的测试,实现分布式架构下的代码测试功能。
图2为本申请实施例提供的一种代码测试的方法的流程示意图,如图2所示,该代码测试方法包括以下步骤:
201、服务器确定基于第一服务的待测代码和历史代码。
软件产品会提供多种服务,并且会在后续持续的新增或优化其他服务,这些新增或修改的服务很可能会给已有的服务带来影响,因此在新版本软件产品上线之前,为了保证各项服务都处于安全状态,不仅需要对新增服务进行测试,还需要对已有服务进行回归测试。一般的软件测试都是基于单元测试进行的,即根据提供的多种服务,对软件代码进行分区,以每个服务为基础,对软件产品依次进行测试。
服务器需要先确定基于某项服务的待测代码和历史代码,其中,待测代码即为新版本中实现第一服务功能的代码,历史代码则为旧版本中实现该服务功能的代码。在分布式架构中,新版本和旧版本很可能运行在不同的服务器上,且软件产品的每个服务均对应某服务器上的不同端口,其中,端口为接收指令和传输运行结果的通道,因此,安装有Diffy工具的目标服务器需要先确定新旧版本所在的位置,以及对应的端口。
示例性的,待测代码运行在第一服务器上,历史代码运行在第二服务器上,服务器需要获取第一服务器和第二服务器的网络地址,以及待测代码在第一服务器上对应的端口号,历史代码在第二服务器上的对应的端口号。示例性的,基于Diffy工具的特性,还可以获取基于第一服务的历史代码副本,该历史代码副本与历史代码对应的代码相同,用于消除噪声,可以理解的,历史代码副本和历史代码可以运行在一台服务器上,也可以运行在不同服务器上,具体不做限制。当历史代码副本和历史代码不运行在一台服务器上时,服务器还需要获取部署有历史代码副本的服务器的网络地址,以及历史代码副本在该台服务器上对应的端口号。
可以理解的,服务器可以是第一服务器或者第二服务器,即本申请实施例的应用场景适用于待测代码和历史代码不在同一台服务器上,用于进行代码测试的服务器可以是安装有待测代码的第一服务器,也可以是安装有历史代码的第二服务器,还可以是独立于待测代码和历史代码的服务器,具体不做限制。
202、服务器建立待测代码和历史代码对应的端口与目标服务器上不同端口的对应关系。
服务器可以利用Rinetd工具来建立不同服务器之间端口的对应关系。示例性的,Rinetd可以生成服务器和第一服务器的对应关系,例如,可以获取第一服务器的IP地址以及服务器的IP地址,以及待测代码在第一服务器上对应的端口号和服务器上的第一端口号,并建立其对应关系。这样,当服务器上的第一端口号接收到某个指令时,Rinetd工具就作为中介,根据对应关系获取第一服务器的IP地址以及第一服务器上的端口号,指示路由设备将该指令转发至第一服务器的端口号。同样的,当第一服务器通过第一服务器的端口号向外发送运行结果时,路由设备就可以根据该对应关系,将运行结果传输至服务器的第一端口号中。
服务器还需要获取安装有历史代码的第二服务器的IP地址以及历史代码在第二服务器上对应的端口号,并建立其与服务器上第二端口号的对应关系。这样,当服务器上的第二端口号接收到某个指令时,Rinetd工具就作为中介,根据对应关系获取第二服务器的IP地址以及第二服务器上的端口号,指示路由设备将该指令转发至第二服务器的端口号。同样的,当第二服务器通过第二服务器的端口号向外发送运行结果时,路由设备就可以根据该对应关系,将运行结果传输至服务器的第二端口号中。
可以理解的,若服务器为安装有待测代码的第一服务器时,服务器只需要建立安装有历史代码的第二服务器的端口号与服务器的第二端口号之间的对应关系,此时需要注意的是,待测代码在服务器上对应的端口和历史代码对应的第二端口不同,即Diffy工具需要从不同的端口获取待测代码和历史代码对应的不同运行结果。同理。服务器为安装有历史代码的第二服务器时,也需要保证待测代码和历史代码对应的端口不同,避免端口冲突。
可以理解的,服务器还需要获取基于第一服务的历史代码副本对应的服务器的IP地址和其在服务器上对应的端口号,并建立安装有历史代码副本的服务器与服务器的端口对应关系,其中,待测代码、历史代码和历史代码副本对应的服务器的端口均不同,这样就可以保证Diffy工具从不同的端口获取不同运行结果。
203、服务器获取历史代码对应的历史请求数据。
当服务器搭建完Diffy工具所需要的测试系统后,就需要利用该系统对待测软件进行测试,具体的,服务器需要获取测试实例,确定测试请求,具体的,服务器需要对测试实例进行数据分析,得到该待测软件所需的运行参数,并根据该运行参数来确定测试请求,即测试请求中需要携带这些运行参数。然后根据该测试请求来运行多个代码,获取其对应的运行结果。然后再根据不同的运行结果来得到最终的测试结果。具体的,测试实例的来源可以是自动化用例,或者可以从线上或者其他环境引流历史数据,对历史数据进行数据重新之后,获得回放实例。
测试实例将软件测试的行为活动做一个科学化的组织归纳,目的是能够将软件测试的行为转化成可管理的模式,同时测试用例也是将测试具体量化的方法之一,不同类别的软件,测试用例是不同的。软件工程中的测试用例可以是一组条件或变量,可以根据测试用例来确定应用软件或软件系统是否正确工作,测试用例构成了设计和制定测试过程的基础。其中,测试的“深度”与测试用例的数据成正比,由于每个测试用例均反映不同的场景和条件,因此测试用例越多,则测试的越全面,软件产品越稳定安全。手工撰写测试用例将耗费大量的时间和精力,因此,为了提高测试效果,则可以撰写自动化用例,也可以通过对历史数据请求进行数据清洗,得到大量的测试用例。
204、服务器根据历史请求数据确定测试请求。
当服务器选择根据历史请求数据来确定测试用例时,对多个历史请求数据进行数据重新,得到大量测试用例,并根据测试用例来确定测试请求,以执行多个版本的运行结果。其中,测试请求包括测试参数,该测试参数及为一组条件或者变量,将测试参数输入至各个版本的代码中,就可以运行相关代码获取运算结果。
可以理解的,搭建Diffy测试环境和获取测试实例是两个独立的过程,没有时序上的差距,因此,步骤203和步骤204可以在步骤201之前执行,也可以在步骤201之后执行,还可以同时执行,具体不做限定。
205、服务器根据端口的对应关系转发测试请求。
当服务器确定好测试请求,以及搭建好Diffy测试环境后,就可以启动测试流程,服务器将同一测试请求通过其自身不同的端口号发送至待测代码和历史代码,具体的,服务器将测试请求发送至服务器的第一端口和第二端口,然后通过第一端口将该测试请求转发给第一服务器上待测代码对应的端口,以启动待测代码,待测代码根据测试请求中携带的测试参数,来获得第一运行结果。服务器还需要通过第二端口将该测试请求转发给第二服务器上历史代码对应的端口,以启动历史代码,历史代码根据测试请求中携带的测试参数,来获得第二运行结果。
可以理解的,服务器还需要通过第三端口将该测试请求转发给历史代码副本对应的端口,以获得第三运行结果。其中,历史代码可以运行在线上环境,历史代码可运行在测试环境,这样,就可以通过两者运行结果的差异来排除环境所带来的差异,这样就可以利用上述环境差异来排除测试时的噪声,排除干扰,进而提高测试精度。
206、服务器根据端口的对应关系获取测试请求对应的多个运行结果。
当各个版本的代码根据同一测试请求获得运行结果后,还需要将运行结果反馈给服务器,示例性的,当Diffy工具调用运行结果时,待测代码对应的第一运行结果可以通过第一服务器上的端口发送至服务器的第一端口,历史代码对应的第二运行结果可以通过第二服务器上的端口发送至服务器的第二端口,历史代码副本对应的第三运行结果通过第三服务器上的端口发送至服务器的第三端口。这样,Diffy工具只需要调用服务器中第一端口,第二端口和第三端口的输出数据,就可以获取到每个版本对应的运行结果。
207、服务器对比多个运行结果,获取待测代码对应的测试结果。
服务器接收到多个运行结果后,就可以先对比历史代码对应的第二运行结果和历史代码副本对应的运行结果,来获取第一差异结果,可以理解的,该差异结果是由运行环境不同所造成的差异,其与代码差异本身无关。然后可以对比待测代码对应的第一运行结果和历史代码对应的第一运行结果,来获取第二差异结果,最后根据第一差异结果来排除第二差异结果中的噪声,对第二差异结果进行过滤,示例性的,由于第一差异结果体现的是不同运行环境所带来的噪声,可以用第二差异结果减去第一差异结果,实现对第二差异结果的过滤,这样就得到因代码差异而造成的待测代码与历史代码的运行结果差异,然后根据该运行结果差异来确定待测代码的测试结果。
可以理解的,待测代码与历史代码的运行结果差异若在合理误差范围之内,并不影响第一服务的服务质量时,则可以认为待测代码正确,示例性的,若两者运行结果的误差在历史代码运行结果的0.5%到2.5%之间时,就可以认为两者运行结果差异在合理误差范围之内,那么就可以认为待测代码正确。若待测代码与历史代码的运行结果差异很大,则认为待测代码不能提供第一服务,需要对待测代码进行调整甚至重构。通过大量的测试实例,就可以不断提供待测代码的稳定性,最终保证待测代码安全稳定的上线。
图3为本申请实施例提供的另一种代码测试的方法的流程示意图,如图3所示,网络数据中心提供自动化实例或者历史请求数据,并将该数据传输至安装有Diffy工具的服务器中,然后Diffy服务器根据自动化实例和历史请求数据确定测试请求,并将该测试强求通过Rinetd工具转发至待测代码、历史代码和历史代码副本对应的系统中,最终得到待测代码对应的第一运行结果,历史代码对应的第二运行结果以及历史代码副本对应的第三运行结果。最后,对比第二运行结果和第三运行结果来获取降噪差异,然后根据第二运行结果和第一运行结果来获取到运行差异,最后根据运行差异和降噪差异来获取测试差异。
通过上述图2和图3所示实施例,当使用Diffy工具测试分布式架构下的待测代码时,可以先建立待测代码对应的服务端口与服务器上第一端口的映射关系,以及历史代码对应的服务端口与服务器上第二端口的映射关系,这样,服务器上的Diffy测试软件就可以根据端口映射关系来完成服务器与第一服务器和第二服务器的通信,获取历史代码运行结果和待测代码运行结果,通过对比不同版本代码的运行结果来确定待测代码的测试结果。这样解决了分布式架构下由于历史代码和待测代码部署于不同服务器上而造成Diffy无法适用的问题,提高了Diffy的适用能力。同时,服务器还建立了历史代码副本对应的端口与目标服务器上第三端口的对应关系,这样,服务器就可以获取到同一历史代码在不同运行环境下的运行结果,并根据该运行结果来确定由于环境因素所带来的噪声,这样就可以排除运行环境干扰,提高测试精度。
下面对服务器根据历史请求数据确定测试请求的过程进行详细介绍:
首先,服务器可以获取线上稳定版本的历史请求数据,这些历史请求数据为软件产品真实用户请求数据,其覆盖面广且数量多,可以涵盖第一服务下的各种请求场景和需求,然后,服务器需要对历史请求数据进行处理和选择,得到合适的数据来确定测试所需的测试实例。
示例性的,历史请求数据可以为请求信息,包括众多历史请求串,该请求串可以包括众多条件以及变量,首先,目标服务器需要对所有的历史请求串进行词法分析,用于提取其中包括的测试变量,示例性的,测试变量可以以目标键值对key-value的形式存在,包括第一key值和第一value值。
服务器需要根据多个历史请求串来确定多个测试实例,并且需要根据测试实例来确定对应的测试请求。因此,服务器首先需要对历史请求数据中的多个请求串进行数据清洗,包括对冗余的请求串进行删除以及重要请求串的数据扩充等。然后服务器再根据处理后的历史请求串来获得多个测试请求中的参数。
当服务器对冗余的请求串进行删除时,以两个请求串为例,服务器可以先获取历史请求数据中的第一请求串和第二请求串,然后对比第一请求串中的目标键值对和第二请求串的目标键值对,若第一请求串中目标键值对的第一key值和第二请求串中的第一key值相同,而第一value值不同时,服务器就可以删除第一请求串或第二请求串,只保留一个即可,然后根据保留的第一请求串或第二请求串中的目标键值对来确定一个测试请求中的测试参数。
当服务器对重要请求串进行数据扩充时,也以两个请求串为例,服务器可以先确定历史请求串中的重要数据第三请求串,然后根据第三请求串重新构建新的第四请求串,其中,第三请求串和第四请求串中目标键值对的第一key值相同,第一value值不同。然后根据第三请求串和新构建的第四请求串来确定两个测试请求,其中一个测试请求的测试参数包括第三请求串中的目标键值对,即第一key值和第一value值,另一个测试请求的测试参数包括第四请求串中的目标键值对。
具体的,为了保证测试数据的代表性和广泛性,当对历史请求串进行数据清洗时,就可以根据目标键值对对众多的历史请求串进行删选。首先,可以对重复的历史请求串进行删除。例如,在对多个请求串进行词法分析后,发现多个请求串包括的目标键值对中第一key值是相同的,仅仅是第一value值的不同,那么就说明多个请求串中的测试变量相同,所代表的测试情况是一致的,此时就可以根据测试需求,保留满足测试数量的请求串即可。
具体的,服务器在对历史请求串进行词法分析后,确定出重要的第一value值,其中,不同的第一value值代表不同的测试情况,那么就需要对包括有该第一value值的请求串进行扩充,例如可以利用笛卡尔乘积算法对第一key值对应的第一value值进行扩充,获取更多数量的请求串,保证测试数据的广泛性。
具体的,服务器还可以根据条件转化,对请求串中的第一key值进行变化,以得到不同类型的请求串,以保证测试实例的代表性,具体不做限制。
当服务器对历史请求串进行数据清洗后,就根据历史请求串中的目标键值对来确定测试参数,并根据测试参数确定测试请求,将测试请求分别发生至不同版本代码所对应的系统中,根据其运行结果来获得最终的测试结果。
在一个具体的例子中,第一服务可以“计算加权平均数”,待测代码和历史代码均用于实现该功能。示例性的,通过对历史代码对应的历史请求数据进行词法分析,可以得到多个测试实例,测试实例包括的测试参数有变量和加权值,假设第一请求串中包括变量A、变量B和变量C,其对应的数值分别为10、20、30,且变量A、变量B和变量C对应的加权值分别为0.3,0.2,和0.5。第二请求串中包括变量A、变量B,其对应的数值分别为25、46,且变量A和变量B对应的加权值分别为0.4和0.6。第三请求串中包括变量A、变量B和变量C,其对应的数值分别为15、14、13,且变量A、变量B和变量C对应的加权值分别为0.3,0.2,和0.5。那么目标服务器通过对比三个请求串,可以得知,第一请求串和第三请求串仅仅是各变量的取值不同,那么就可以删除第三请求串。而加权平均中加权值的不同会对运算结果有完全不同的影响,因此,可以对第一请求串和第二请求串进行扩充,示例性的,目标服务器可以根据第一请求串新增第四请求串,第四请求串中包括变量A、变量B和变量C,其对应的数值分别为10、20、30,且变量A、变量B和变量C对应的加权值分别为0.4,0.4,和0.2。或者目标服务器可以根据第二请求串新增第五请求串,第四请求串中包括变量A、变量B,其对应的数值分别为20、50,且变量A和变量B对应的加权值分别为0.3和0.7。
基于上述例子,当目标服务器对历史请求串进行数据清洗后,包括重复数据删除、重要数据扩充等,就可以根据最终确定的请求串的数据来确定测试请求,示例性的,目标服务器可以确定5个测试实例,每个测试实例中包括上述请求串中的变量以及加权值。
针对一个测试请求而言,例如,某一测试请求包括变量A、变量B和变量C,其对应的数值分别为10、20、30,且变量A、变量B和变量C对应的加权值分别为0.3,0.2,和0.5。那么目标服务器就可以基于不同的端口将该测试请求发送至待测代码、历史代码和历史代码系统中,并获取其对应的运行结果,假设,目标服务器从待测代码对应的端口获取到的第一运行结果为21,从历史代码获取到的第二运行结果为23,从历史代码副本对应的端口获取到的运行结果为22,那么可以先对应第二运行结果和历史代码副本对应的运行结果,得到其差异值为1,该差异由运行环境造成,然后对应第一运行结果和第二运行结果的差异值为2,然后两个差异值来判断该差异是否在运算精度范围内,若在运算精度范围内,则确定待测代码可以实现计算加权平均值的功能。然后再进行第二轮的测试对比,直到满足测试需求。
基于上述内容,本申请实施例也可以依靠区块链技术,为了保证更稳定的Diffy测试环境,安装有待测代码的第一服务器和安装有历史代码的第二服务器可以各种独立运行代码,获得运行结果,并将运行结果发送至目标服务器,目标服务器可以利用区块链技术将其映射关系与运行结果进行存储。具体的,可以从第一端口获取待测代码针对于测试参数的第一运行结果,并从第二端口获取所述历史代码针对于所述测试参数的第二运行结果,然后获取第一端口的端口信息和第二端口的端口信息。根据第一端口的端口信息以及第一运行结果,生成第一区块,并将第一区块添加至区块链中;根据第二端口的端口信息以及第二运行结果,生成第二区块,并将第二区块添加至区块链中。
下面对区块链技术进行简单描述,请参考图4所示的数据共享系统,数据共享系统100是指用于进行节点与节点之间数据共享的系统,该数据共享系统中可以包括多个节点101,多个节点101可以是指数据共享系统中各个客户端。每个节点101在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护该数据共享系统内的共享数据。为了保证数据共享系统内的信息互通,数据共享系统中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当数据共享系统中的任意节点接收到输入信息时,数据共享系统中的其他节点便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得数据共享系统中全部节点上存储的数据均一致。
对于数据共享系统中的每个节点,均具有与其对应的节点标识,而且数据共享系统中的每个节点均可以存储有数据共享系统中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至数据共享系统中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表1中仅以IP地址为例进行说明。
节点名称 | 节点标识 |
节点1 | 117.114.151.174 |
节点2 | 117.116.189.145 |
… | … |
节点N | xx.xx.xx.xx |
数据共享系统中的每个节点均存储一条相同的区块链。区块链由多个区块组成,参见图5,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有输入信息特征值、版本号、时间戳和难度值,区块主体中存储有输入信息,在本申请实施例中,可以存储端口映射关系以及各端口对应的运行结果;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的输入信息特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证区块中输入信息安全性。
在生成区块链中的各个区块时,参见图6,区块链所在的节点在接收到输入信息时,对输入信息进行校验,完成校验后,将输入信息存储至内存池中,并更新其用于记录输入信息的哈希树;之后,将更新时间戳更新为接收到输入信息的时间,并尝试不同的随机数,多次进行特征值计算,使得计算得到的特征值可以满足下述公式:
SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET
其中,SHA256为计算特征值所用的特征值算法;version(版本号)为区块链中相关区块协议的版本信息;prev_hash为当前区块的父区块的区块头特征值;merkle_root为输入信息的特征值;ntime为更新时间戳的更新时间;nbits为当前难度,在一段时间内为定值,并在超出固定时间段后再次进行确定;x为随机数;TARGET为特征值阈值,该特征值阈值可以根据nbits确定得到。
这样,当计算得到满足上述公式的随机数时,便可将信息对应存储,生成区块头和区块主体,得到当前区块。随后,区块链所在节点根据数据共享系统中其他节点的节点标识,将新生成的区块分别发送给其所在的数据共享系统中的其他节点,由其他节点对新生成的区块进行校验,并在完成校验后将新生成的区块添加至其存储的区块链中。
图7为本申请提供了一种代码测试装置,如图7所示,该代码测试装置包括:
获取单元701,用于获取基于第一服务的待测代码和历史代码,其中,待测代码部署于第一服务器上,历史代码部署于第二服务器上。第一服务器上待测代码对应的端口与目标服务器上的第一端口对应,第二服务器上历史代码对应的端口与目标服务器上的第二端口对应。
确定单元702,用于根据获取到的测试实例确定测试请求。
发送单元703,用于通过第一端口和第二端口向第一服务器和第二服务器发送测试请求,其中,测试请求用于指示第一服务器执行待测代码,以及指示第二服务器执行历史代码,测试请求包括测试参数。
获取单元701,还用于从第一端口获取待测代码针对于测试参数的第一运行结果,并从第二端口获取历史代码针对于测试参数的第二运行结果。
确定单元702,还用于根据第一运行结果和第二运行结果,确定待测代码对应的测试结果。
在一种可能的设计中,发送单元703,具体用于向第一端口和第二端口发送测试请求,通过第一端口向第一服务器中待测代码对应的端口发送测试请求,通过第二端口向第一服务器中历史代码对应的端口发送测试请求。
获取单元701,具体用于通过第一端口接收第一服务器上待测代码对应的端口发送的第一运行结果,通过第二端口接收第二服务器上历史代码对应的端口发送的第二运行结果。
在一种可能的设计中,历史代码运行于线上环境和测试环境,第二运行结果包括线上运行结果和测试运行结果。确定单元,具体用于根据线上运行结果和测试运行结果,获取第一差异结果,根据所述线上运行结果和所述第一运行结果,获取第二差异结果,根据第一差异结果和第二差异结果,确定待测代码对应的测试结果。
在一种可能的设计中,获取单元701,还用于获取历史代码对应的历史请求数据,历史请求数据包括针对于历史代码的历史请求串。对历史请求串进行词法分析,获取所述历史请求串包括的目标键值对,其中,目标键值对包括第一键和第一值。
确定单元702,还用于根据第一键值对确定测试请求中的测试参数。
在一种可能的设计中,获取单元701,还用于获取历史请求数据中的第一请求串和第二请求串;
确定单元702,还用于若第一请求串包括的第一键与第二请求串包括的第一键相同,且第一请求串包括的第一值与第二请求串包括的第一值不同,则删除第二请求串,并根据第一请求串包括的第一键和第一值确定测试请求中的测试参数。
在一种可能的设计中,确定单元702,还用于确定历史请求数据中的第三请求串,根据第三请求串中包括的第一键生成第四请求串,其中,第四历史请求串包括的第一键与第三请求串包括的第一键相同,且第四历史请求串包括的第一值与第三请求串包括的第一值不同。根据第四请求串包括的第一键和第一值确定测试请求中的测试参数。
在一种可能的设计中,获取单元701,还用于获取第一端口的端口信息和第二端口的端口信息。
确定单元702,还用于根据第一端口的端口信息以及第一运行结果,生成第一区块,并将第一区块添加至区块链中,根据第二端口的端口信息以及第二运行结果,生成第二区块,并将第二区块添加至所述区块链中。
本申请实施例还提供了另一种代码测试装置,代码测试装置可以部署于服务器,请参阅图8,图8为本申请实施例中服务器一个实施例示意图,如图所示,该服务器800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessing units,CPU)822(例如,一个或一个以上处理器)和存储器832,一个或一个以上存储应用程序842或数据844的存储介质830(例如一个或一个以上海量存储设备)。其中,存储器832和存储介质830可以是短暂存储或持久存储。存储在存储介质830的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器822可以设置为与存储介质830通信,在服务器800上执行存储介质830中的一系列指令操作。
服务器800还可以包括一个或一个以上电源826,一个或一个以上有线或无线网络接口850,一个或一个以上输入输出接口858,和/或,一个或一个以上操作系统841,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由服务器所执行的步骤可以基于该图8所示的服务器结构。
在本申请实施例中,该服务器所包括的CPU 822用于执行图2或图3所示实施例中目标服务器所执行的步骤。
本申请实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如前述图2至图3所示实施例描述的方法中服务器所执行的步骤。
本申请实施例中还提供一种包括程序的计算机程序产品,当其在计算机上运行时,使得计算机执行如前述图2至图3所示实施例描述的方法中服务器所执行的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种代码测试的方法,其特征在于,所述方法包括:
获取基于第一服务的待测代码和历史代码,其中,所述待测代码部署于第一服务器上,所述历史代码部署于第二服务器上;所述第一服务器上所述待测代码对应的端口与目标服务器上的第一端口对应;所述第二服务器上所述历史代码对应的端口与所述目标服务器上的第二端口对应;
根据获取到的测试实例确定测试请求,并通过所述第一端口和所述第二端口向所述第一服务器和所述第二服务器发送所述测试请求,其中,所述测试请求用于指示所述第一服务器执行所述待测代码,以及指示所述第二服务器执行所述历史代码,所述测试请求包括测试参数;
从所述第一端口获取所述待测代码针对于所述测试参数的第一运行结果,并从所述第二端口获取所述历史代码针对于所述测试参数的第二运行结果;
根据所述第一运行结果和所述第二运行结果,确定所述待测代码对应的测试结果。
2.根据所述权利要求1所述的方法,其特征在于,所述通过所述第一端口和所述第二端口向所述第一服务器和所述第二服务器发送所述测试请求,包括:
向所述第一端口和所述第二端口发送所述测试请求;
通过所述第一端口向所述第一服务器中所述待测代码对应的端口发送所述测试请求;
通过所述第二端口向所述第一服务器中所述历史代码对应的端口发送所述测试请求;
所述从所述第一端口获取所述待测代码针对于所述测试参数的第一运行结果,并从所述第二端口获取所述历史代码针对于所述测试参数的第二运行结果,包括:
通过所述第一端口接收所述第一服务器上所述待测代码对应的端口发送的所述第一运行结果;
通过所述第二端口接收所述第二服务器上所述历史代码对应的端口发送的所述第二运行结果。
3.根据权利要求2所述的方法,其特征在于,所述历史代码运行于线上环境和测试环境,所述第二运行结果包括线上运行结果和测试运行结果;
所述根据所述第一运行结果和所述第二运行结果,确定所述待测代码对应的测试结果,包括:
根据所述线上运行结果和所述测试运行结果,获取第一差异结果;
根据所述线上运行结果和所述第一运行结果,获取第二差异结果;
根据所述第一差异结果和所述第二差异结果,确定所述待测代码对应的测试结果。
4.根据权利要求1所述的方法,其特征在于,在所述根据获取到的测试实例确定测试请求之前,所述方法还包括:
获取所述历史代码对应的历史请求数据,所述历史请求数据包括针对于所述历史代码的历史请求串;
对所述历史请求串进行词法分析,获取所述历史请求串包括的目标键值对,其中,所述目标键值对包括第一键和第一值;
根据所述目标键值对确定所述测试请求中的测试参数。
5.根据权利要求4所述的方法,其特征在于,所述根据所述目标键值对确定所述测试请求中的测试参数之前,所述方法还包括:
获取所述历史请求数据中的第一请求串和第二请求串;
若所述第一请求串包括的第一键与所述第二请求串包括的第一键相同,且所述第一请求串包括的第一值与所述第二请求串包括的第一值不同,则删除所述第二请求串;
所述根据所述目标键值对确定所述测试请求中的测试参数,包括:
根据所述第一请求串包括的第一键和第一值确定所述测试请求中的测试参数。
6.根据权利要求4所述的方法,其特征在于,所述根据所述目标键值对确定所述测试请求中的测试参数之前,所述方法还包括:
确定所述历史请求数据中的第三请求串;
根据所述第三请求串中包括的第一键生成第四请求串,所述第四历史请求串包括的第一键与所述第三请求串包括的第一键相同,且所述第四历史请求串包括的第一值与所述第三请求串包括的第一值不同;
所述根据所述目标键值对确定所述测试请求中的测试参数,包括:
根据所述第四请求串包括的第一键和第一值确定所述测试请求中的测试参数。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述从所述第一端口获取所述待测代码针对于所述测试参数的第一运行结果,并从所述第二端口获取所述历史代码针对于所述测试参数的第二运行结果之后,所述方法还包括:
获取所述第一端口的端口信息和所述第二端口的端口信息;
根据所述第一端口的端口信息以及所述第一运行结果,生成第一区块,并将所述第一区块添加至区块链中;
根据所述第二端口的端口信息以及所述第二运行结果,生成第二区块,并将所述第二区块添加至所述区块链中。
8.一种代码测试装置,其特征在于,所述代码测试装置包括:
获取单元,用于获取基于第一服务的待测代码和历史代码,其中,所述待测代码部署于第一服务器上,所述历史代码部署于第二服务器上;所述第一服务器上所述待测代码对应的端口与目标服务器上的第一端口对应;所述第二服务器上所述历史代码对应的端口与所述目标服务器上的第二端口对应;
确定单元,用于根据获取到的测试实例确定测试请求;
发送单元,用于通过所述第一端口和所述第二端口向所述第一服务器和所述第二服务器发送所述测试请求,其中,所述测试请求用于指示所述第一服务器执行所述待测代码,以及指示所述第二服务器执行所述历史代码,所述测试请求包括测试参数;
所述获取单元,还用于从所述第一端口获取所述待测代码针对于所述测试参数的第一运行结果,并从所述第二端口获取所述历史代码针对于所述测试参数的第二运行结果;
所述确定单元,还用于根据所述第一运行结果和所述第二运行结果,确定所述待测代码对应的测试结果。
9.一种服务器,其特征在于,包括:存储器、收发器、处理器以及总线系统;
其中,所述存储器用于存储程序;
所述处理器用于执行所述存储器中的程序,以实现权利要求1至7任一项所述的方法;
所述总线系统用于连接所述存储器以及所述处理器,以使所述存储器以及所述处理器进行通信。
10.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110384212.4A CN112948271A (zh) | 2021-04-09 | 2021-04-09 | 一种代码测试方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110384212.4A CN112948271A (zh) | 2021-04-09 | 2021-04-09 | 一种代码测试方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112948271A true CN112948271A (zh) | 2021-06-11 |
Family
ID=76231457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110384212.4A Pending CN112948271A (zh) | 2021-04-09 | 2021-04-09 | 一种代码测试方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112948271A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113687859A (zh) * | 2021-08-18 | 2021-11-23 | 上海浦东发展银行股份有限公司 | 一种软件开发的分支管理方法、装置、电子设备及介质 |
CN113791983A (zh) * | 2021-09-24 | 2021-12-14 | 北京顺源开华科技有限公司 | 应用代码的测试方法、装置以及电子设备 |
CN114168565A (zh) * | 2021-12-10 | 2022-03-11 | 北京宇信科技集团股份有限公司 | 业务规则模型的回溯测试方法、装置、系统及决策引擎 |
CN114826899A (zh) * | 2022-03-16 | 2022-07-29 | 青岛海尔科技有限公司 | 设备控制服务的调试方法和装置、存储介质及电子装置 |
CN115774990A (zh) * | 2023-02-10 | 2023-03-10 | 成都萌想科技有限责任公司 | 基于配置文件的RESTfulAPI对比方法、系统、设备及存储介质 |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0899661A1 (en) * | 1997-08-29 | 1999-03-03 | Matsushita Electric Industrial Co., Ltd | Compiler supporting sybolic debugging |
US20060041864A1 (en) * | 2004-08-19 | 2006-02-23 | International Business Machines Corporation | Error estimation and tracking tool for testing of code |
US20070234293A1 (en) * | 2005-12-12 | 2007-10-04 | Archivas, Inc. | Automated software testing framework |
WO2015051735A1 (en) * | 2013-10-09 | 2015-04-16 | Tencent Technology (Shenzhen) Company Limited | Devices and methods for generating test cases |
JP2016071398A (ja) * | 2014-09-26 | 2016-05-09 | 株式会社野村総合研究所 | テスト実行装置、テスト実行方法およびコンピュータプログラム |
CN106201858A (zh) * | 2015-05-07 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 移动终端中应用程序的测试系统及其控制方法和装置 |
US9606900B1 (en) * | 2016-03-24 | 2017-03-28 | Fmr Llc | Intelligent automation of computer software test scripts and code requirements |
CN107015906A (zh) * | 2016-06-23 | 2017-08-04 | 阿里巴巴集团控股有限公司 | 测试方法及装置、端口生成方法及端口生成器和测试系统 |
CN107193747A (zh) * | 2017-05-27 | 2017-09-22 | 北京金山安全软件有限公司 | 代码测试方法、装置和计算机设备 |
CN107992409A (zh) * | 2017-11-21 | 2018-05-04 | 平安养老保险股份有限公司 | 测试用例生成方法、装置、计算机设备和存储介质 |
CN109992500A (zh) * | 2017-12-29 | 2019-07-09 | 北京奇虎科技有限公司 | 应用的接口测试方法、装置和计算机可读存储介质 |
CN110209583A (zh) * | 2019-06-03 | 2019-09-06 | 中国银联股份有限公司 | 安全测试方法、装置、系统、设备和存储介质 |
WO2020155778A1 (zh) * | 2019-02-03 | 2020-08-06 | 苏州市龙测智能科技有限公司 | 接口自动化测试方法、测试装置、测试设备及存储介质 |
CN111625474A (zh) * | 2020-07-29 | 2020-09-04 | 南京可信区块链与算法经济研究院有限公司 | 一种联盟链的自动测试方法 |
US20200341855A1 (en) * | 2019-04-28 | 2020-10-29 | Synamedia | Object store specialized backup and point-in-time recovery architecture |
CN111988200A (zh) * | 2020-08-18 | 2020-11-24 | 湖南快乐阳光互动娱乐传媒有限公司 | 基于真实流量的自动回归测试方法及装置 |
-
2021
- 2021-04-09 CN CN202110384212.4A patent/CN112948271A/zh active Pending
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0899661A1 (en) * | 1997-08-29 | 1999-03-03 | Matsushita Electric Industrial Co., Ltd | Compiler supporting sybolic debugging |
US20060041864A1 (en) * | 2004-08-19 | 2006-02-23 | International Business Machines Corporation | Error estimation and tracking tool for testing of code |
US20070234293A1 (en) * | 2005-12-12 | 2007-10-04 | Archivas, Inc. | Automated software testing framework |
WO2015051735A1 (en) * | 2013-10-09 | 2015-04-16 | Tencent Technology (Shenzhen) Company Limited | Devices and methods for generating test cases |
JP2016071398A (ja) * | 2014-09-26 | 2016-05-09 | 株式会社野村総合研究所 | テスト実行装置、テスト実行方法およびコンピュータプログラム |
CN106201858A (zh) * | 2015-05-07 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 移动终端中应用程序的测试系统及其控制方法和装置 |
US9606900B1 (en) * | 2016-03-24 | 2017-03-28 | Fmr Llc | Intelligent automation of computer software test scripts and code requirements |
CN107015906A (zh) * | 2016-06-23 | 2017-08-04 | 阿里巴巴集团控股有限公司 | 测试方法及装置、端口生成方法及端口生成器和测试系统 |
CN107193747A (zh) * | 2017-05-27 | 2017-09-22 | 北京金山安全软件有限公司 | 代码测试方法、装置和计算机设备 |
CN107992409A (zh) * | 2017-11-21 | 2018-05-04 | 平安养老保险股份有限公司 | 测试用例生成方法、装置、计算机设备和存储介质 |
CN109992500A (zh) * | 2017-12-29 | 2019-07-09 | 北京奇虎科技有限公司 | 应用的接口测试方法、装置和计算机可读存储介质 |
WO2020155778A1 (zh) * | 2019-02-03 | 2020-08-06 | 苏州市龙测智能科技有限公司 | 接口自动化测试方法、测试装置、测试设备及存储介质 |
US20200341855A1 (en) * | 2019-04-28 | 2020-10-29 | Synamedia | Object store specialized backup and point-in-time recovery architecture |
CN110209583A (zh) * | 2019-06-03 | 2019-09-06 | 中国银联股份有限公司 | 安全测试方法、装置、系统、设备和存储介质 |
CN111625474A (zh) * | 2020-07-29 | 2020-09-04 | 南京可信区块链与算法经济研究院有限公司 | 一种联盟链的自动测试方法 |
CN111988200A (zh) * | 2020-08-18 | 2020-11-24 | 湖南快乐阳光互动娱乐传媒有限公司 | 基于真实流量的自动回归测试方法及装置 |
Non-Patent Citations (1)
Title |
---|
舟行于无涯之海: "diffy, 一款使开发和测试从测试中解脱的工具 (三、现实场景中的应用)", Retrieved from the Internet <URL:《https://blog.csdn.net/liusf1993/article/details/86507107》> * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113687859A (zh) * | 2021-08-18 | 2021-11-23 | 上海浦东发展银行股份有限公司 | 一种软件开发的分支管理方法、装置、电子设备及介质 |
CN113687859B (zh) * | 2021-08-18 | 2024-04-19 | 上海浦东发展银行股份有限公司 | 一种软件开发的分支管理方法、装置、电子设备及介质 |
CN113791983A (zh) * | 2021-09-24 | 2021-12-14 | 北京顺源开华科技有限公司 | 应用代码的测试方法、装置以及电子设备 |
CN114168565A (zh) * | 2021-12-10 | 2022-03-11 | 北京宇信科技集团股份有限公司 | 业务规则模型的回溯测试方法、装置、系统及决策引擎 |
CN114826899A (zh) * | 2022-03-16 | 2022-07-29 | 青岛海尔科技有限公司 | 设备控制服务的调试方法和装置、存储介质及电子装置 |
CN114826899B (zh) * | 2022-03-16 | 2024-01-23 | 青岛海尔科技有限公司 | 设备控制服务的调试方法和装置、存储介质及电子装置 |
CN115774990A (zh) * | 2023-02-10 | 2023-03-10 | 成都萌想科技有限责任公司 | 基于配置文件的RESTfulAPI对比方法、系统、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112948271A (zh) | 一种代码测试方法、装置、设备及存储介质 | |
WO2020151483A1 (zh) | 物联网平台压力测试系统、方法、装置及服务器 | |
CN110659202A (zh) | 客户端自动化测试方法及装置 | |
US20200104246A1 (en) | Continuous automation with test suite engine | |
CN114185792A (zh) | 一种压测场景的数据隔离方法、装置、设备及存储介质 | |
CN111897697A (zh) | 服务器硬件故障修复方法和装置 | |
CN105591782A (zh) | 测试设备的管理方法及装置 | |
US10659289B2 (en) | System and method for event processing order guarantee | |
CN113238965A (zh) | 一种接口测试脚本生成方法、系统及存储介质 | |
CN114598680A (zh) | 域名的管理方法、装置及存储介质 | |
US20220066917A1 (en) | Candidate program release evaluation | |
CN115412592A (zh) | 业务处理系统以及方法 | |
CN114461337A (zh) | 一种云仿真系统、方法、电子设备及存储介质 | |
CN114385498A (zh) | 性能测试方法、系统、计算机设备及可读存储介质 | |
Tomak et al. | RAST: Evaluating Performance of a Legacy System Using Regression Analysis and Simulation | |
CN111159988A (zh) | 一种模型处理方法、装置、计算机设备及存储介质 | |
CN116032619B (zh) | 智能安全联网设备的状态巡检方法及装置 | |
CN115102879B (zh) | 一种共享服务平台的测试方法、电子设备及存储介质 | |
CN113452537B (zh) | 基于模型的故障定位方法及装置 | |
CN113568795B (zh) | 一种静态化服务测试方法、装置、设备及存储介质 | |
CN113031960B (zh) | 代码编译方法、装置、服务器及存储介质 | |
US20230216727A1 (en) | Identification of root causes in data processing errors | |
CN108984313B (zh) | 用于处理信息的方法、装置及服务器 | |
CN113760590A (zh) | 故障处理方法、装置、电子设备和计算机可读介质 | |
CN113836040A (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 |