CN110471830B - 一种程序测试方法、装置及电子设备 - Google Patents
一种程序测试方法、装置及电子设备 Download PDFInfo
- Publication number
- CN110471830B CN110471830B CN201810445240.0A CN201810445240A CN110471830B CN 110471830 B CN110471830 B CN 110471830B CN 201810445240 A CN201810445240 A CN 201810445240A CN 110471830 B CN110471830 B CN 110471830B
- Authority
- CN
- China
- Prior art keywords
- program
- function
- data
- read
- server
- 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.)
- Active
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/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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (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
本发明实施例公开了一种程序测试方法、装置及电子设备。本发明实施例方法包括:利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试;编写程序读取配置文件,以进行客户端程序的设置,对客户端程序读取配置文件进行兼容性处理;对***的读取文件函数进行HOOK,以修改客户端程序读取配置文件的读取数据,对客户端程序进行测试。本发明实施例在程序执行过程中,可以***函数的参数和功能,从而模拟程序错误的情况或者各种其他情况,且是基于已经发布的程序,不会对现有程序做任何改动,能够尽量真实的模拟正常程序版本运行的环境,不会造成程序崩溃等异常情况,测试稳定性和效率高。
Description
技术领域
本发明涉及信息处理技术领域,特别涉及一种程序测试方法、装置及电子设备。
背景技术
目前,对于程序开发来说,编写测试代码是保障程序运行时正确不出问题的好方法。通常我们开发完程序后则编写单元测试功能。
然而程序功能集成后,想要在现有完成的功能上测试程序各种条件下的程序处理是否能够正确处理则不是非常方便。例如编写的一个网络传输控制协议(TransmissionControl Protocol,TCP)的程序,则无法模拟收到的服务器数据包是错误的,正确的,或者某些地方是错误的情况。同样的对于例如有些函数执行流程总是能够获取到正确的数据,同时也需要模拟出获取数据是各种错误的情况下,程序的执行是否是正常的,不会导致崩溃的发生。例如读取一个配置文件,传入的读取文件路径是错误的,或者读取的文件是错误的等等情况。
目前还没有一种能够在已经完整的程序中模拟各种异常情况,同时也不会对正常的代码进行侵入和干扰,不修改现有功能的代码,从而尽可能的保障其和正式发布的功能是一致的方法。同时对于程序运行过程中,或者是程序已经发布,发现一个程序的崩溃或者错误的情况,非常难解决类似的问题。
发明内容
本发明实施例提供了一种程序测试方法、装置及电子设备,以解决程序运行过程中,或者是程序已经发布的情况下无法有效模拟进行程序测试的问题。
第一方面,本申请提供了一种程序测试方法,该方法包括:
利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试,所述TCP程序用于收取服务器下发的数据并处理;
编写程序读取配置文件,以进行所述客户端程序的设置;
对所述客户端程序读取配置文件进行兼容性处理;
对***的读取文件函数进行HOOK,以修改所述客户端程序读取配置文件的读取数据,对所述客户端程序进行测试。
进一步的,在利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试之前,所述方法还包括:
编写TCP程序;
所述利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试,包括:
利用所述TCP程序测试所述客户端程序的容错性;
对***的网络接收数据函数进行HOOK,以对收到的服务器数据进行修改,测试所述客户端程序对接收的服务器数据的逻辑处理。
进一步的,所述编写TCP程序,具体包括:
创建网络套接字socket;
建立与所述服务器的连接;
写入请求数据并发送给所述服务器;
接收从所述服务器发送的数据。
进一步的,所述对***的网络接收数据函数进行HOOK,具体包括:
获取***的网络接收数据函数的函数指针;
编写伪造的网络接收数据函数,所述伪造的网络接收数据函数的原型和原始的所述网络接收数据函数的原型是一致的;
使用Detours来HOOK***的网络接收数据函数,使得***在调用所述网络接收数据函数时,转到调用所述伪造的网络接收数据函数。
进一步的,所述对***的读取文件函数进行HOOK,具体包括:
获取***的读取文件函数的函数指针;
编写伪造的读取文件函数,所述伪造的读取文件函数的原型和原始的所述读取文件函数的原型是一致的;
使用Detours来HOOK***的读取文件函数实现对文件读取进行任意的修改,使得***在调用***的所述读取文件函数时,转到调用所述伪造的读取文件函数函数。
第二方面,本申请提供一种程序测试装置,该装置包括:
第一测试模块,用于利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试,所述TCP程序用于收取服务器下发的数据并处理;
第一编写模块,用于编写程序读取配置文件,以进行所述客户端程序的设置;
处理模块,用于对所述客户端程序读取配置文件进行兼容性处理;
第二测试模块,用于对***的读取文件函数进行HOOK,以修改所述客户端程序读取配置文件的读取数据,对所述客户端程序进行测试。
进一步的,所述装置还包括:
第二编写模块,用于编写TCP程序;
所述第一测试模块具体用于:
利用所述TCP程序测试所述客户端程序的容错性;
对***的网络接收数据函数进行HOOK,以对收到的服务器数据进行修改,测试所述客户端程序对接收的服务器数据的逻辑处理。
进一步的,所述第二编写模块具体用于:
创建网络套接字socket;
建立与所述服务器的连接;
写入请求数据并发送给所述服务器;
接收从所述服务器发送的数据。
进一步的,所述第一测试模块具体用于:
获取***的网络接收数据函数的函数指针;
编写伪造的网络接收数据函数,所述伪造的网络接收数据函数的原型和原始的所述网络接收数据函数的原型是一致的;
使用Detours来HOOK***的网络接收数据函数,使得***在调用所述网络接收数据函数时,转到调用所述伪造的网络接收数据函数。
进一步的,所述第二测试模块具体用于:
获取***的读取文件函数的函数指针;
编写伪造的读取文件函数,所述伪造的读取文件函数的原型和原始的所述读取文件函数的原型是一致的;
使用Detours来HOOK***的读取文件函数实现对文件读取进行任意的修改,使得***在调用***的所述读取文件函数时,转到调用所述伪造的读取文件函数函数。
第三方面,本发明还提供一种电子设备,包括:存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时可以实现第一方面中任一所述的方法。
第四方面,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一所述的方法。
本发明实施例利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试;编写程序读取配置文件,以进行客户端程序的设置,对客户端程序读取配置文件进行兼容性处理;对***的读取文件函数进行HOOK,以修改客户端程序读取配置文件的读取数据,对客户端程序进行测试。本发明实施例在程序执行过程中,可以***函数的参数和功能,从而模拟程序错误的情况或者各种其他情况,且是基于已经发布的程序,不会对现有程序做任何改动,能够尽量真实的模拟正常程序版本运行的环境,不会造成程序崩溃等异常情况,测试稳定性和效率高。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对本发明实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中测序测试方法的一个实施例示意图;
图2是本发明实施例测序测试方法的另一个实施例示意图;
图3是本发明实施例步骤S105的一个具体实施例示意图;
图4是本发明实施例中步骤S1012的一个具体实施例示意图;
图5是本发明实施例中步骤S104的一个具体实施例示意图;
图6是本发明实施例中测序测试装置的一个实施例示意图;
图7是本发明实施例中测序测试装置的一个实施例示意图;
图8是本发明实施例中电子设备的一个实施例示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例中程序测试方法应用于程序测试装置,该装置位于电子设备中,该电子设备可以是手机、平板电脑或者个人电脑等电子设备,也可以是未来出现的电子设备等。
请参阅图1,本发明实施例中程序测试方法的一个实施例包括:
S101、利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试;
其中,所述TCP程序用于收取服务器下发的数据并处理,例如本实施例中客户端程序是一个直播应用,则可以编写一条TCP链接来从直播服务器拉取弹幕信息,拉取到弹幕信息后进行弹幕的显示。
本实施例中,在整个TCP链接的过程中,可能会出现收到服务器的数据是错误的情况,也可能收到一些不存在的服务器消息,或者模拟虚构一些服务器的消息数据,同时还需要在某些时机点才希望能够产生一些错误消息数据,从而更好的模拟线上出现的问题。通过模拟错误数据来测试。
例如对于本步骤中预先编写的TCP程序来说,其接收到的服务器数据,可能会因为在网络传输中而产生错误,从而造成程序崩溃,因此需要对这种情况进行兼容,从而提高程序的稳定性。然而在正常程序中,很难模拟这种出错的情况,或者说,开发者想在程序接收了一段服务器的数据后,再出现错误的情况数据。因此本实施例中通过来修改服务器下发的数据,从而模拟客户端收到的服务器数据有问题的时候,客户端程序的处理逻辑,使得客户端程序并不需要进行任何修改,可以测试异常情况。
S102、编写程序读取配置文件,以进行客户端程序的设置;
本实施例中,会编写供客户端程序读取的程序读取配置文件,例如,客户端程序会读取编写好的一个配置文件config.txt来实现对客户端程序功能的配置,或者是参数的配置。具体实现如下:
HANDLE hFile=CreateFile("config.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_E XISTING,FILE_ATTRIBUTE_NORMAL,NULL);
例如,客户端程序会通过***函数CreateFile来打开配置文件config.txt并读取文件内容来对客户端程序进行设置。
S103、对客户端程序读取配置文件进行兼容性处理;
在正常的程序发布后,由于环境的复杂,那么需要对读取配置文件进行兼容性处理,例如用户将配置文件删除掉,例如配置文件内容是异常的等,而程序则需要对这些情况进行处理,从而能够使得程序有更好的兼容性。
S104、对***的读取文件函数进行HOOK,以修改客户端程序读取配置文件的读取数据,对所述客户端程序进行测试。
本发明实施例利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试;编写程序读取配置文件,以进行客户端程序的设置,对客户端程序读取配置文件进行兼容性处理;对***的读取文件函数进行HOOK,以修改客户端程序读取配置文件的读取数据,对客户端程序进行测试。本发明实施例在程序执行过程中,可以***函数的参数和功能,从而模拟程序错误的情况或者各种其他情况,且是基于已经发布的程序,不会对现有程序做任何改动,能够尽量真实的模拟正常程序版本运行的环境,不会造成程序崩溃等异常情况,测试稳定性和效率高。
如图2所示,在本发明一些实施例中,在利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试之前,本发明实施例中方法还可以进一步包括:
S105、编写TCP程序;
即需要在利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试之前,预先编写好TCP程序。
此时,上述步骤S101具体可以包括:
S1011、利用所述TCP程序测试所述客户端程序的容错性;
S1012、对***的网络接收数据函数进行HOOK,以对收到的服务器数据进行修改,测试所述客户端程序对接收的服务器数据的逻辑处理。
进一步的,如图3所示,上述步骤S104具体可以包括:
S1051、创建网络套接字socket;
一个具体实施方式如下:
int listenfd=socket(AF_INET,SOCK_STREAM,0)
S1052、建立与所述服务器的连接;
一个具体实施方式如下:
servaddr.sin_family=AF_INET;//地址族
servaddr.sin_port=htons(13);//端口号(主机字节序到网络字节序)
connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))
S1053、写入请求数据并发送给所述服务器;
具体实现方式如下:
write(sockfd,buf,strlen(buf));
其中,buf则是写入的请求协议数据,并将数据发送给服务器。
S1054、接收从所述服务器发送的数据。
接收服务器发送给客户端程序的数据具体实现方式如下:
Int nRet=recv(sockfd,buf,len,0);
在收到服务器的数据后,则需要对服务器的数据进行处理,对于服务器的消息则判断消息类型后进行消息分发来处理。同时为了增强程序的容错性,需要对数据进行异常处理,保障程序能够正常的执行。下面以直播应用为例进行举例说明判断消息类型后进行消息分发来处理的过程:
通过上述步骤就完成了在编写一个TCP程序来接收服务器下发的数据并进行处理。
进一步的,如图4所示,上述步骤S1012中对***的网络接收数据函数进行HOOK,具体可以包括:
S10121、获取***的网络接收数据函数的函数指针;
S10122、编写伪造的网络接收数据函数;
S10123、使用Detours来HOOK***的网络接收数据函数,使得***在调用所述网络接收数据函数时,转到调用所述伪造的网络接收数据函数。
Detours是Microsoft开发一个库,简称Detours库或Detours,它具有两方面的功能:
(1)拦截x86机器上的任意的win32API函数。
(2)***任意的数据段到PE文件中,修改DDL文件的导入表。
Detours库可以拦截任意的API调用,拦截代码是在动态运行时加载的。Detours替换目标API最前面的几条指令,使其无条件的跳转到用户提供的拦截函数。被替换的API函数的前几条指令被保存到trampoline函数(就是内存中一个数据结构)中.trampoline保存了被替换的目标API的前几条指令和一个无条件转移,转移到目标API余下的指令。当执行到目标API时,直接跳到用户提供的拦截函数中执行,这时拦截函数就可以执行自己的代码了。当然拦截函数可以直接返回,也可以调用trampoline函数,trampoline函数将调用被拦截的目标API,目标API调用结束后又会放回到拦截函数。
下面以一具体示例对上述步骤S1012中对***的网络接收数据函数进行HOOK进行说明:
首先使用Detours来对***的网络接收数据函数recv进行HOOK,从而能够修改接收到的服务器数据。其函数原型如下:
ssize_t recv(int sockfd,void*buf,size_t len,int flags)
其中,第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。那么其中第二个参数buf则是用于接收服务器的数据的缓冲区,从而通过修改此buf的数据则可以实现模拟任意的收到服务器的数据,从而可以实现测试异常数据的情况。
因此,首先需要编写一个自己的伪造的网络接收数据函数(myrecv函数),来替换***的网络接收数据函数(recv函数),从而来挂钩***的recv函数,实现对收到的服务器的数据进行任意修改的行为。
(1)获取***的recv函数的函数指针。
具体实现如下:
static ssize_t(void*src_recv)(int sockfd,void*buf,size_t len,intflags)=recv;
其中,原始的recv函数的指针则保存在变量src_recv中。
(2)编写伪造的myrecv函数。
具体实现如下:
ssize_t myrecv(int sockfd,void*buf,size_t len,int flags)
其中,myrecv函数的原型则必须和原始的recv函数原型是一致的。
接下来则编写myrecv的函数实现,具体如下:
src_recv(sockfd,buf,len,flags);
首先调用***原始的recv函数来从服务器接收数据,并将数据存储到了缓冲区buf中。然后则可以对buf中的数据进行任意的修改,从而实现任意伪造服务器的数据的效果,而这一切的实现对于原始的应用程序来说则是透明的。
例如,可以修改收到的数据为弹幕消息:
Strcpy(buf,“danmu@=dd233”);
例如,可以修改收到的数据为礼物消息:
Strcpy(buf,“gift@=dd233”);
例如,可以修改收到的数据为错误数据:
Strcpy(buf,“d@=dd233”);
因此,在伪造的my_recv函数中则可以伪造任意的虚假数据或者错误数据,或者是很少收到的消息数据,从而可以测试客户端程序的逻辑处理。
(3)使用detours进行hook。
DetourAttach(&(PVOID&)recv,my_recv);
其中,第一个参数则是recv函数的内存地址;第二个参数则是编写的HOOK函数my_recv。从而使得***在调用recv函数时,会转到调用伪造的my_recv函数,而在my_recv函数中则会去收取服务器的数据,并进行伪造数据。
至此,通过上述步骤就完成了使用detours来hook***的recv函数实现对收到的服务器数据进行任意的修改。
进一步的,如图5所示,上述步骤S104中对***的读取文件函数进行HOOK,具体可以包括:
S1041、获取***的读取文件函数的函数指针;
S1042、编写伪造的读取文件函数;
S1043、使用Detours来HOOK***的读取文件函数实现对文件读取进行任意的修改,使得***在调用***的所述读取文件函数时,转到调用所述伪造的读取文件函数函数。
下面以一具体实施例对上述过程进行描述说明:
使用Detours来对***的读取文件函数CreateFile进行HOOK,从而能够修改配置文件的读取数据。其函数原型如下:
第四个参数一般置0。
那么其中第一个参数则是读取的文件名称,本实施例中则可以通过修改程序读取的文件名称来实现程序读取到异常的文件时的处理情况。
首先需要编写一个自己的伪造的读取文件函数(myCreateFile函数),来替换***的CreateFile函数,从而来挂钩***的读取文件函数(CreateFile函数),实现对读取文件的文件名称进行任意修改的行为。
(1)获取***的CreateFile函数的函数指针。
一个具体实现方式如下:
static HANDLE(void*src_CreateFile)(LPCTSTR,lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES
DWORD dwCreationDisposition,
DWORD dwFlagAndAttributes,
HANDLE hTemplateFile)=CreateFile;
其中,原始的CreateFile函数的指针则保存在变量src_CreateFile中。
(2)编写伪造的myCreateFile函数。
ssize_t myCreateFile(LPCTSTR,lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DWORD dwCreationDisposition,
DWORD dwFlagAndAttributes,
HANDLE hTemplateFile)
其中,myCreateFile的原型则必须和原始的CreateFile原型是一致的。
接下来则编写myCreateFile的函数实现。
在此函数中会调用***的CreateFile函数来实现读取文件,那么可以通过传递任意的文件名称来实现读取不同的文件名的情况下,客户端程序的处理情况。
src_CreateFile(”c:\1.txt”,dwDesiredAccess,dwShareMode,dwCreationDisposition,dwFlagAndAttributes,hTemplateFile);
例如,可以将***的读取文件名称改成”c:\1.txt”,来测试读取的其他文件的情况。还可以将文件名称改成一个不存在的文件名称,来测试客户端程序读取不到配置文件的情况。
(3)使用detours进行hook。
DetourAttach(&(PVOID&)CreateFile,my_CreateFile);
其中,第一个参数则是CreateFile函数的内存地址;第二个参数则是编写的HOOK函数my_CreateFile。从而使得***在调用CreateFile函数时,会转到调用伪造的my_CreateFile函数。而在my_CreateFile函数中则会去调用***的读取文件的功能。
至此,通过上述步骤就完成了使用detours来hook***的CreateFile函数实现对文件读取进行任意的修改。
本发明实施例中还提供一种测序测试装置,如图6所示,该装置包括:
第一测试模块601,用于利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试,所述TCP程序用于收取服务器下发的数据并处理;
第一编写模块602,用于编写程序读取配置文件,以进行所述客户端程序的设置;
处理模块603,用于对所述客户端程序读取配置文件进行兼容性处理;
第二测试模块604,用于对***的读取文件函数进行HOOK,以修改所述客户端程序读取配置文件的读取数据,对所述客户端程序进行测试。
进一步的,如图7所示,所述装置还包括:
第二编写模块605,用于编写TCP程序;
所述第一测试模块601具体用于:
利用所述TCP程序测试所述客户端程序的容错性;
对***的网络接收数据函数进行HOOK,以对收到的服务器数据进行修改,测试所述客户端程序对接收的服务器数据的逻辑处理。
进一步的,所述第二编写模块605具体用于:
创建网络套接字socket;
建立与所述服务器的连接;
写入请求数据并发送给所述服务器;
接收从所述服务器发送的数据。
进一步的,所述第一测试模块601具体用于:
获取***的网络接收数据函数的函数指针;
编写伪造的网络接收数据函数,所述伪造的网络接收数据函数的原型和原始的所述网络接收数据函数的原型是一致的;
使用Detours来HOOK***的网络接收数据函数,使得***在调用所述网络接收数据函数时,转到调用所述伪造的网络接收数据函数。
进一步的,所述第二测试模块604具体用于:
获取***的读取文件函数的函数指针;
编写伪造的读取文件函数,所述伪造的读取文件函数的原型和原始的所述读取文件函数的原型是一致的;
使用Detours来HOOK***的读取文件函数实现对文件读取进行任意的修改,使得***在调用***的所述读取文件函数时,转到调用所述伪造的读取文件函数函数。
本发明实施例中还提供一种电子设备,请参见图8,所述电子设备包括:
存储器801,处理器802及存储在所述存储器上并可在所述处理器上运行的计算机程序803,其中,所述处理器802执行所述计算机程序803时可以实现上述程序测试方法。
为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。存储器801可用于存储计算机程序803,上述计算机程序包括软件程序、模块和数据,处理器802通过运行执行存储在存储器801的计算机程序803,从而执行电子设备的各种功能应用以及数据处理。
在具体的实施过程中,存储器801可用于存储软件程序以及模块,处理器802通过运行存储在存储器801的软件程序以及模块,从而执行电子设备的各种功能应用以及数据处理。存储器801可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(例如游戏类应用程序、聊天类应用程序)等;存储数据区可存储根据电子设备的使用所创建的数据(游戏配置数据、音频数据)等。此外,存储器801可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。处理器802是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器801内的软件程序和/或模块,以及调用存储在存储器801内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器802可包括一个或多个处理单元;优选的,处理器802可集成应用处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等。
本发明实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的程序测试方法的部分或全部步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种程序测试方法,其特征在于,所述方法包括:
利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试,所述TCP程序用于收取服务器下发的数据并处理;
编写程序读取配置文件,以进行所述客户端程序的设置;
对所述客户端程序读取配置文件进行兼容性处理;
对***的读取文件函数进行HOOK,以修改所述客户端程序读取配置文件的读取数据,对所述客户端程序进行测试;
在利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试之前,所述方法还包括:
编写TCP程序;
所述利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试,包括:
利用所述TCP程序测试所述客户端程序的容错性;
对***的网络接收数据函数进行HOOK,以对收到的服务器数据进行修改,测试所述客户端程序对接收的服务器数据的逻辑处理。
2.根据权利要求1所述的方法,其特征在于,所述编写TCP程序,具体包括:
创建网络套接字socket;
建立与所述服务器的连接;
写入请求数据并发送给所述服务器;
接收从所述服务器发送的数据。
3.根据权利要求1所述的方法,其特征在于,所述对***的网络接收数据函数进行HOOK,具体包括:
获取***的网络接收数据函数的函数指针;
编写伪造的网络接收数据函数,所述伪造的网络接收数据函数的原型和原始的所述网络接收数据函数的原型是一致的;
使用Detours 来HOOK***的网络接收数据函数,使得***在调用所述网络接收数据函数时,转到调用所述伪造的网络接收数据函数。
4.根据权利要求1所述的方法,其特征在于,所述对***的读取文件函数进行HOOK,具体包括:
获取***的读取文件函数的函数指针;
编写伪造的读取文件函数,所述伪造的读取文件函数的原型和原始的所述读取文件函数的原型是一致的;
使用Detours来HOOK***的读取文件函数实现对文件读取进行任意的修改,使得***在调用***的所述读取文件函数时,转到调用所述伪造的读取文件函数。
5.一种程序测试装置,其特征在于,所述装置包括:
第一测试模块,用于利用预先编写好的TCP程序对已安装客户端程序接收服务器数据异常情况进行测试,所述TCP程序用于收取服务器下发的数据并处理;
第一编写模块,用于编写程序读取配置文件,以进行所述客户端程序的设置;
处理模块,用于对所述客户端程序读取配置文件进行兼容性处理;
第二测试模块,用于对***的读取文件函数进行HOOK,以修改所述客户端程序读取配置文件的读取数据,对所述客户端程序进行测试;
所述装置还包括:
第二编写模块,用于编写TCP程序;
所述第一测试模块具体用于:
利用所述TCP程序测试所述客户端程序的容错性;
对***的网络接收数据函数进行HOOK,以对收到的服务器数据进行修改,测试所述客户端程序对接收的服务器数据的逻辑处理。
6.根据权利要求5所述的装置,其特征在于,所述第二编写模块具体用于:
创建网络套接字socket;
建立与所述服务器的连接;
写入请求数据并发送给所述服务器;
接收从所述服务器发送的数据。
7.根据权利要求6所述的装置,其特征在于,所述第二测试模块具体用于:
获取***的读取文件函数的函数指针;
编写伪造的读取文件函数,所述伪造的读取文件函数的原型和原始的所述读取文件函数的原型是一致的;
使用Detours 来HOOK***的读取文件函数实现对文件读取进行任意的修改,使得***在调用***的所述读取文件函数时,转到调用所述伪造的读取文件函数。
8.一种电子设备,其特征在于,包括:存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时可以实现权利要求1至4任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810445240.0A CN110471830B (zh) | 2018-05-10 | 2018-05-10 | 一种程序测试方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810445240.0A CN110471830B (zh) | 2018-05-10 | 2018-05-10 | 一种程序测试方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110471830A CN110471830A (zh) | 2019-11-19 |
CN110471830B true CN110471830B (zh) | 2022-06-21 |
Family
ID=68504219
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810445240.0A Active CN110471830B (zh) | 2018-05-10 | 2018-05-10 | 一种程序测试方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110471830B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111176722B (zh) * | 2019-12-30 | 2023-12-26 | 腾讯音乐娱乐科技(深圳)有限公司 | 第三方库的文件版本检测方法、装置及存储介质 |
CN111858381B (zh) * | 2020-07-31 | 2023-05-16 | 抖音视界有限公司 | 应用程序容错能力测试方法、电子设备及介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103631720A (zh) * | 2013-12-20 | 2014-03-12 | 百度在线网络技术(北京)有限公司 | 测试用例的生成方法和装置 |
CN104281520A (zh) * | 2013-07-10 | 2015-01-14 | 腾讯科技(深圳)有限公司 | 跟踪和调试的方法、装置及*** |
CN105528546A (zh) * | 2015-12-25 | 2016-04-27 | 北京金山安全软件有限公司 | 一种挖掘漏洞的方法、装置及电子设备 |
CN105550080A (zh) * | 2015-11-26 | 2016-05-04 | 广州华多网络科技有限公司 | 一种基于Linux进行服务器程序故障注入方法、装置及*** |
CN106371940A (zh) * | 2015-07-21 | 2017-02-01 | 腾讯科技(深圳)有限公司 | 一种程序崩溃解决方法及装置 |
CN106502896A (zh) * | 2016-10-21 | 2017-03-15 | 武汉斗鱼网络科技有限公司 | 一种函数测试代码的生成方法及装置 |
CN107315679A (zh) * | 2017-05-12 | 2017-11-03 | 昆明奥多智能科技有限公司 | 一种嵌入式软件自动化确认测试方法及测试*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040123279A1 (en) * | 2002-12-18 | 2004-06-24 | International Business Machines Corporation | Method and system for auto-instrumenting java applications through probe injection |
US8793662B2 (en) * | 2008-03-25 | 2014-07-29 | Microsoft Corporation | Runtime code hooking for print driver and functionality testing |
-
2018
- 2018-05-10 CN CN201810445240.0A patent/CN110471830B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104281520A (zh) * | 2013-07-10 | 2015-01-14 | 腾讯科技(深圳)有限公司 | 跟踪和调试的方法、装置及*** |
CN103631720A (zh) * | 2013-12-20 | 2014-03-12 | 百度在线网络技术(北京)有限公司 | 测试用例的生成方法和装置 |
CN106371940A (zh) * | 2015-07-21 | 2017-02-01 | 腾讯科技(深圳)有限公司 | 一种程序崩溃解决方法及装置 |
CN105550080A (zh) * | 2015-11-26 | 2016-05-04 | 广州华多网络科技有限公司 | 一种基于Linux进行服务器程序故障注入方法、装置及*** |
CN105528546A (zh) * | 2015-12-25 | 2016-04-27 | 北京金山安全软件有限公司 | 一种挖掘漏洞的方法、装置及电子设备 |
CN106502896A (zh) * | 2016-10-21 | 2017-03-15 | 武汉斗鱼网络科技有限公司 | 一种函数测试代码的生成方法及装置 |
CN107315679A (zh) * | 2017-05-12 | 2017-11-03 | 昆明奥多智能科技有限公司 | 一种嵌入式软件自动化确认测试方法及测试*** |
Also Published As
Publication number | Publication date |
---|---|
CN110471830A (zh) | 2019-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11113407B2 (en) | System and methods for automated detection of input and output validation and resource management vulnerability | |
US7827531B2 (en) | Software testing techniques for stack-based environments | |
WO2020062673A1 (zh) | 智能合约的测试方法、存储介质、测试终端及测试装置 | |
US9367415B1 (en) | System for testing markup language applications on a device | |
JP7412594B2 (ja) | データ処理方法、データ処理装置、コンピュータ機器、及びコンピュータプログラム | |
CN110471830B (zh) | 一种程序测试方法、装置及电子设备 | |
CN111858296B (zh) | 接口测试方法、装置、设备和存储介质 | |
CN116028292B (zh) | 用于远程直接内存访问仿真验证的仿真验证***及方法 | |
CN110955409B (zh) | 在云平台上创建资源的方法和装置 | |
CN112988608A (zh) | 数据测试方法、装置、计算机设备及存储介质 | |
CN112540808B (zh) | 一种程序行为层级调用关系的记录方法及相关设备 | |
McDonald | A network specification language and execution environment for undergraduate teaching | |
CN114448823A (zh) | Nfs服务测试方法、***及电子设备 | |
CN116483517B (zh) | 虚拟机控制方法、装置及*** | |
CN104570967B (zh) | 基于Android***的远程控制方法及*** | |
US9892022B2 (en) | Apparatus for minimally intrusive debugging of production user interface software | |
CN112306507A (zh) | 一种图片资源处理方法、装置、终端及存储介质 | |
CN105339974B (zh) | 模拟传感器 | |
US9614891B1 (en) | Assembling communications based on captured packets | |
CN112631949B (zh) | 一种调试方法、装置、计算机设备及存储介质 | |
CN114996955A (zh) | 一种云原生混沌工程实验的靶场环境构建方法及装置 | |
CN110324345B (zh) | 服务器的登陆方法、装置、存储介质及终端 | |
CN113535578A (zh) | 一种cts测试方法、装置及测试设备 | |
CN111045918A (zh) | 调试程序的方法、装置、客户端、存储介质及*** | |
CN111310175A (zh) | 基于插件化的iOS应用安全监测与防护方法及装置 |
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 |