CN109815140A - 一种嵌入式c语言实现的自动化测试系统及方法 - Google Patents
一种嵌入式c语言实现的自动化测试系统及方法 Download PDFInfo
- Publication number
- CN109815140A CN109815140A CN201910009873.1A CN201910009873A CN109815140A CN 109815140 A CN109815140 A CN 109815140A CN 201910009873 A CN201910009873 A CN 201910009873A CN 109815140 A CN109815140 A CN 109815140A
- Authority
- CN
- China
- Prior art keywords
- module
- information
- debug
- kernel
- running state
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种嵌入式C语言实现的自动化测试系统及方法,所述系统包括:调用模块、内核模块、收集模块及统计分析模块;所述方法包括:步骤A1:对被测试或监控的业务逻辑进程,调用模块在需要反馈信息的地方调用debug函数,将信息写入内核模块;步骤A2:内核模块对所述信息进行缓存;步骤A3:收集模块读取内核模块缓存的信息;步骤A4:统计分析模块对收集模块收集的信息进行统计分析,并分类存储;采用本发明的系统及方法,能实现嵌入式linux设备业务逻辑的自动化测试和监控,提高测试和监控的便捷性,提升工作效率。
Description
技术领域
本发明涉及C语言技术领域,具体涉及一种嵌入式C语言实现的自动化测试系统及方法。
背景技术
由于Linux系统开放源代码,功能强大、稳定可靠、伸缩性好,而且它广泛支持大量的微处理器体系结构、硬件设备、图形支持和通信协议,因此,在嵌入式应用的领域里,无论从因特网设备(路由器、交换机、负载均衡器等)还是到专用的控制系统(自动售货机、手机、各种家用电器等),Linux操作系统都有着广阔的应用前景。特别是经过最近几年的发展,Linux系统已经成功地跻身于主流嵌入式开发平台。例如,在智能手机领域,Android Linux已经在智能手机开发平台牢牢地占据了一席之地。
业务逻辑测试或是运行监控,一般要采集业务逻辑程序的运行到某个节点反馈逻辑节点状态、遇到某种错误返回错误代码、进程线程崩溃、异常等反馈信息。Linux的许多内核和许多其他自由软件以及开放源码应用程序都是用C语言编写。但在C语言中,目前缺乏对系统上的业务逻辑程序的测试信息收集和运行日常状态信息的收集监控。因此,提供一种嵌入式linux系统设备上收集业务逻辑测试信息和日常运行状态监控信息的系统及方法是十分必要的。
发明内容
本发明所要解决的技术问题是针对现有技术中存在的上述不足,提供一种嵌入式C语言实现的自动化测试系统及方法,以实现嵌入式linux设备业务逻辑的自动化测试和监控,提高测试和监控的便捷性,提升工作效率。
为实现以上发明目的,采用的技术方案是:
一种嵌入式C语言实现的自动化测试系统,该系统包括:
调用模块、内核模块、收集模块及统计分析模块;
所述调用模块,用于反馈程序运行状态信息,将需要反馈的程序运行状态信息写入内核模块;所述内核模块,用于缓存所述调用模块写入的程序运行状态信息;所述收集模块,用于收集所述内核模块缓存的程序运行状态信息;所述统计分析模块,用于统计分析和分类存储各程序运行状态信息。
进一步的,还包括快照模块,所述快照模块用于读取系统的运行状态信息。
进一步的,还包括导出模块,所述导出模块用于将状态信息分析结果导入系统日志。
一种嵌入式C语言实现的自动化测试方法,包括以下步骤:
步骤A1:对被测试或监控的业务逻辑进程,调用模块在需要反馈信息的地方调用debug函数,将信息写入内核模块;
步骤A2:内核模块对所述信息进行缓存;
步骤A3:收集模块读取内核模块缓存的信息;
步骤A4:统计分析模块对收集模块收集的信息进行统计分析,并分类存储。
进一步的,所述步骤A1具体包括:
步骤A11:进程初始化好内核模块,打开内核模块,注册缓存容量;
步骤A12:实现debug函数,进程全局函数,当遇到反馈信息时调用:
Debug(err_m, err_s, str),err_m/err_s 分别为主/次错误代码,Str为标注信息;
步骤A13:Debug的信息写入到内核模块。
进一步的,所述内核模块设有4个可选缓存通道,分别为:
(1)1通道缓存512条debug信息;
(2)2通道缓存1K条debug信息;
(3)3通道缓存2K条debug信息;
(4)4通道缓存4K条debug信息。
进一步的,所述通道的信息数据采用先入先出的传输机制。
进一步的,所述通道的信息数据采用阻塞超时的读取模式。
进一步的,还包括:
步骤B4:快照模块定时读取系统的运行状态信息,并导入统计分析模块进行存储,所述运行状态信息包括CPU使用率、内存使用清理和交换分析使用情况。
进一步的,还包括:
步骤A5:导出模块将状态信息分析结果导入系统日志。
如上所述,本发明的一种嵌入式C语言实现的自动化测试系统及方法,具有以下有益效果:
(1)采用本发明的嵌入式C语言实现的自动化测试系统及方法可实现嵌入式linux设备对业务逻辑进行自动化测试,自动收集分析测试结果,不仅减轻了测试人员的工作负担,且有利于提高测试效率和准确度,测试便捷性好、智能化程度高。
(2)设备正常上线运行时,采用本发明系统及方法实现自动监控收集结果,有利于维护人员分析设备状态、降低维护人员的工作难度和提高工作效率。
(3)采用本发明系统及方法自动监控收集结果,并把分析结果实时显示在系统日志上,业务逻辑程序开发时可不保留传统的syslog,简化业务逻辑程序代码。
附图说明
图1是本发明嵌入式C语言实现的自动化测试系统结构示意图;
图2是本发明嵌入式C语言实现的自动化测试方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的目的在于提供一种嵌入式C语言实现的自动化测试系统及方法,以实现嵌入式linux设备业务逻辑的自动化测试和监控,提高测试和监控的便捷性,提升工作效率。以下将详细阐述本发明的一种嵌入式C语言实现的自动化测试系统及方法的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本发明的技术内容。
图1是本发明嵌入式C语言实现的自动化测试系统结构示意图。如图1所示,本发明一种嵌入式C语言实现的自动化测试系统,包括:调用模块1、内核模块2、收集模块3、统计分析模块4、快照模块5和导出模块6。
调用模块1主要用于反馈程序运行状态信息,在需要反馈信息的地方调用debug函数,将反馈的状态信息写入内核模块,具体的,反馈的状态信息包括逻辑节点状态、遇到某种错误返回错误代码、进程线程崩溃、异常等;内核模块2缓存调用模块1写入的状态信息,具体的,内核模块设有4个可选缓存通道,分别为:
(1)1通道缓存512条debug信息;
(2)2通道缓存1K条debug信息;
(3)3通道缓存2K条debug信息;
(4)4通道缓存4K条debug信息。
如果频繁产生debug信息优先使用大容量通道,同一通道可以被多个进程打开。
收集模块3收集内核模块2缓存的状态信息,通过调用读取接口对内核模块2的信息进行读取;统计分析模块4对收集模块3收集的状态信息进行统计分析,并进行分类存储,通过对状态信息的自动收集与归类统计,有利于提高测试效率和准确度,减轻测试人员的工作负担和提高工作效率。
快照模块5主要用于读取系统的运行状态信息,并将其导入统计分析模块4进行存储;导出模块6主要用于将状态信息分析结果导入系统日志,以方便测试人员、维护人员实时查看业务逻辑允许的状态信息。
图2是本发明嵌入式C语言实现的自动化测试方法流程图。以下结合图1和图2详细说明本发明嵌入式C语言实现的自动化测试方法步骤:
步骤A1:对被测试或监控的业务逻辑进程,调用模块在需要反馈信息的地方调用debug函数,将信息写入内核模块;
具体的,步骤A1包括:
步骤A11:进程初始化好内核模块,打开内核模块,选择缓存通道,注册缓存容量;例如,注册1通道缓存512条debug信息的容量;
步骤A12:实现debug函数,如:debug_chl512_ex,进程全局函数,当遇到反馈信息时调用:
Debug(err_m, err_s, str),err_m/err_s 分别为主/次错误代码,Str为标注信息;
步骤A13:调用debug_chl512_ex接口将信息写入到内核模块。
以下是实现上述步骤的程序代码:
#include "auto_debug.h"
int main(int argc,char **argv)
{
int ret = 0;
ret = debug_init_write_chl512();
if(0 > ret){
printf("auto_debug_init FAIL\n");
return -1;
}
while(1)
{
ret = debug_chl512_ex(ERR_1,ERR_1,(char*)"this is 1 error");
if(0 <= ret){
printf("debug_V2 ok\n");
}else {
printf("debug_V2 fail\n");
}
usleep(1000*1000);
}
debug_exit_write_chl512();
return 0;
}
通过调用debug函数将需要反馈的业务逻辑程序运行状态信息写入内核模块,简单方便,既不产生阻塞,也不会消耗过多资源。
步骤A2:内核模块对程序运行状态信息进行缓存;具体的,缓存通道的信息数据采用先入先出的传输机制,即缓存通道信息数据被读取时,按写入信息的先后顺序进行,先写入的信息优先被读出,每写入1条信息缓存余量减少一条,每读出1条信息缓存余量增加一条,当缓存信息余量为0时,Debug(err, str)则写入失败。
步骤A3:收集模块读取内核模块缓存的信息;具体的,缓存通道的信息数据采用阻塞超时的读取模式,即当调用读取接口对通道数据进行读取时,有可读数据立即读出数据,没有可读数据将阻塞等待数据,可预先设定等待超时时间。
步骤A4:统计分析模块对收集模块收集的信息进行统计分析,并分类存储。具体的,采用sqlite数据库对收集模块收集的debug信息进行统计分析、存储;更为具体的,每个主错误码对应一个表,表主键为次错误码,每个表头包含:次错误码、发生进程名称、发生文件名称、发生函数名称、发生最新时间戳、发生次数、备注信息。优选的,按正序排序的方式,每一次错误码插入表内一行,如产生相同信息则产生次数进行累加,时间戳更新为最新,备注信息进行累加。通过将业务逻辑的状态信息进行统计分析和分类存储,方便了测试人员、维护人员进行分类查看,有利于维护人员分析设备状态、降低维护人员的工作难度和提高工作效率。
以下为具体的实例程序框架:
#include "auto_debug.h"
#include "sql_debug_msg.h"
#include <syslog.h>
int main(int argc,char **argv)
{
struct debug_data msg;
int debug_fd = -1;
int ret = 0;
char tabname[512] = {0};
char option[512] = {0};
char value[512] = {0};
debug_fd = auto_debug_init(DEBUG_CLASS_READER);
if(0 > debug_fd){
printf("auto_debug_init FAIL.ret=%d\n",debug_fd);
goto out;
}
ret = debug_sql_init_db();
if(0 != ret){
printf("auto_debug_init FAIL.ret=%d\n",debug_fd);
goto out1;
}
printf("LOOP ......\n");
while(1)
{
ret = auto_debug_read(debug_fd,&msg);
if(0 <= ret)
{
sprintf(tabname,"err_%d",msg.err_m);
if(0 == debug_sql_create_debug_tab(tabname))
{
sprintf(option,"err_s,app,file,func,line,timestamp,notes");
sprintf(value,"%d,'%s','%s','%s',%d,%lld,'%s'",
msg.err_s,
msg.app,
msg.file,
msg.func,
msg.line,
msg.timeStamp,
msg.remarks);
if(0 != debug_sql_insert(tabname, option,value)){
printf("debug_sql_insert %s fail\n",tabname);
}
}else{
printf("debug_sql_create_debug_tab %s fail\n",tabname);
}
}else{
printf("auto_debug_read fail\n");
}
usleep(1000);
}
debug_sql_deinit_db();
out1:
auto_debug_deinit(debug_fd);
out:
return 0;
}
进一步的,还包括:
步骤B4:快照模块定时读取系统的运行状态信息,并导入统计分析模块进行存储,具体的,可设置一小时读取一次,将每一小时读取的系统运行状态信息存储在sqlite表内,运行状态信息包括但不限于CPU使用率、内存使用清理和交换分析使用情况等。
进一步的,还包括:
步骤A5:导出模块将状态信息分析结果导入系统日志。通过允许配置选择将分析结果导入系统日志,可方便实时查看,业务逻辑程序开发时可不保留传统的syslog,从而简化业务逻辑程序代码。
由以上技术方案可知,采用本发明的嵌入式C语言实现的自动化测试系统及方法可实现嵌入式linux设备对业务逻辑进行自动化测试,自动收集分析测试结果,不仅能减轻测试人员的工作负担,且有利于提高测试效率和准确度,测试便捷性好、智能化程度高。
在设备正常上线运行时,采用本发明系统及方法实现自动监控收集结果,有利于维护人员分析设备状态、降低维护人员的工作难度和提高工作效率。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围内。
Claims (10)
1.一种嵌入式C语言实现的自动化测试系统,其特征在于,该系统包括:
调用模块、内核模块、收集模块及统计分析模块;
所述调用模块,用于反馈程序运行状态信息,将需要反馈的程序运行状态信息写入内核模块;
所述内核模块,用于缓存所述调用模块写入的程序运行状态信息;
所述收集模块,用于收集所述内核模块缓存的程序运行状态信息;
所述统计分析模块,用于统计分析和分类存储各程序运行状态信息。
2.根据权利要求1所述的系统,其特征在于,还包括快照模块,所述快照模块用于读取系统的运行状态信息。
3.根据权利要求1或2所述的系统,其特征在于,还包括导出模块,所述导出模块用于将状态信息分析结果导入系统日志。
4.一种嵌入式C语言实现的自动化测试方法,其特征在于,包括以下步骤:
步骤A1:对被测试或监控的业务逻辑进程,调用模块在需要反馈信息的地方调用debug函数,将信息写入内核模块;
步骤A2:内核模块对所述信息进行缓存;
步骤A3:收集模块读取内核模块缓存的信息;
步骤A4:统计分析模块对收集模块收集的信息进行统计分析,并分类存储。
5.根据权利要求4所述的方法,其特征在于,所述步骤A1具体包括:
步骤A11:进程初始化好内核模块,打开内核模块,注册缓存容量;
步骤A12:实现debug函数,进程全局函数,当遇到反馈信息时调用:
Debug(err_m, err_s, str),err_m/err_s 分别为主/次错误代码,Str为标注信息;
步骤A13:Debug的信息写入到内核模块。
6.根据权利要求4或5所述的方法,其特征在于,所述内核模块设有4个可选缓存通道,分别为:
(1)1通道缓存512条debug信息;
(2)2通道缓存1K条debug信息;
(3)3通道缓存2K条debug信息;
(4)4通道缓存4K条debug信息。
7.根据权利要求6所述的方法,其特征在于,所述通道的信息数据采用先入先出的传输机制。
8.根据权利要求6所述的方法,其特征在于,所述通道的信息数据采用阻塞超时的读取模式。
9.根据权利要求4所述的方法,其特征在于,还包括:
步骤B4:快照模块定时读取系统的运行状态信息,并导入统计分析模块进行存储,所述运行状态信息包括CPU使用率、内存使用清理和交换分析使用情况。
10.根据权利要求4或9所述的方法,其特征在于,还包括:
步骤A5:导出模块将状态信息分析结果导入系统日志。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910009873.1A CN109815140A (zh) | 2019-01-05 | 2019-01-05 | 一种嵌入式c语言实现的自动化测试系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910009873.1A CN109815140A (zh) | 2019-01-05 | 2019-01-05 | 一种嵌入式c语言实现的自动化测试系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109815140A true CN109815140A (zh) | 2019-05-28 |
Family
ID=66603920
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910009873.1A Pending CN109815140A (zh) | 2019-01-05 | 2019-01-05 | 一种嵌入式c语言实现的自动化测试系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109815140A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004139458A (ja) * | 2002-10-18 | 2004-05-13 | Advantest Corp | プログラム開発支援装置、プログラム実行装置、コンパイル方法およびデバッグ方法 |
CN101067798A (zh) * | 2007-06-14 | 2007-11-07 | 华南理工大学 | 一种动态探针方法及其在嵌入式系统中的应用 |
CN102087629A (zh) * | 2011-01-25 | 2011-06-08 | 南京航空航天大学 | 一种基于Agent嵌入式软件的不变量测试方法与工具 |
CN102662785A (zh) * | 2012-04-12 | 2012-09-12 | 青岛海信移动通信技术股份有限公司 | 一种Android系统内核错误信息获取方法及装置 |
US20130247008A1 (en) * | 2012-03-16 | 2013-09-19 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
CN104951395A (zh) * | 2014-03-27 | 2015-09-30 | 浙江大华技术股份有限公司 | 一种嵌入式系统调试信息处理方法及装置 |
CN106094788A (zh) * | 2016-06-02 | 2016-11-09 | 西安诺瓦电子科技有限公司 | 嵌入式板卡稳定性测试系统及方法 |
CN108509333A (zh) * | 2017-02-28 | 2018-09-07 | 腾讯科技(深圳)有限公司 | 调试方法及装置 |
CN109086193A (zh) * | 2017-06-13 | 2018-12-25 | 阿里巴巴集团控股有限公司 | 监控方法、装置及系统 |
CN109144844A (zh) * | 2017-06-27 | 2019-01-04 | 阿里巴巴集团控股有限公司 | 追踪方法、装置、设备和机器可读介质 |
-
2019
- 2019-01-05 CN CN201910009873.1A patent/CN109815140A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004139458A (ja) * | 2002-10-18 | 2004-05-13 | Advantest Corp | プログラム開発支援装置、プログラム実行装置、コンパイル方法およびデバッグ方法 |
CN101067798A (zh) * | 2007-06-14 | 2007-11-07 | 华南理工大学 | 一种动态探针方法及其在嵌入式系统中的应用 |
CN102087629A (zh) * | 2011-01-25 | 2011-06-08 | 南京航空航天大学 | 一种基于Agent嵌入式软件的不变量测试方法与工具 |
US20130247008A1 (en) * | 2012-03-16 | 2013-09-19 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
CN102662785A (zh) * | 2012-04-12 | 2012-09-12 | 青岛海信移动通信技术股份有限公司 | 一种Android系统内核错误信息获取方法及装置 |
CN104951395A (zh) * | 2014-03-27 | 2015-09-30 | 浙江大华技术股份有限公司 | 一种嵌入式系统调试信息处理方法及装置 |
CN106094788A (zh) * | 2016-06-02 | 2016-11-09 | 西安诺瓦电子科技有限公司 | 嵌入式板卡稳定性测试系统及方法 |
CN108509333A (zh) * | 2017-02-28 | 2018-09-07 | 腾讯科技(深圳)有限公司 | 调试方法及装置 |
CN109086193A (zh) * | 2017-06-13 | 2018-12-25 | 阿里巴巴集团控股有限公司 | 监控方法、装置及系统 |
CN109144844A (zh) * | 2017-06-27 | 2019-01-04 | 阿里巴巴集团控股有限公司 | 追踪方法、装置、设备和机器可读介质 |
Non-Patent Citations (1)
Title |
---|
QQ_37924645: "【Linux】管道容量及缓冲区的存储方式", 《HTTPS://BLOG.CSDN.NET/QQ_37924645/ARTICLE/DETAILS/72026902》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109284269B (zh) | 异常日志分析方法、装置、存储介质及服务器 | |
US8584098B2 (en) | Component statistics for application profiling | |
CN108304308A (zh) | 用户行为监控方法、装置、计算机设备和存储介质 | |
CN101316185B (zh) | 一种基于日志文件的分析结果定位系统资源瓶颈的方法 | |
US9697104B2 (en) | End-to end tracing and logging | |
CN110399303B (zh) | 用于准备测试数据的方法、数据准备装置和电子设备 | |
EP2600250A1 (en) | Method and system for performance assurance of applications. | |
CN107133174A (zh) | 测试用例代码自动生成装置与方法 | |
CN113254323B (zh) | 线上全链路压测方法、装置及计算机设备 | |
CN105283851A (zh) | 用于选择跟踪目标的成本分析 | |
CN101188523A (zh) | 告警相关性规则的生成方法及生成系统 | |
CN109189642A (zh) | 基于插件的应用系统业务行为特征获取方法及监控系统 | |
US10528456B2 (en) | Determining idle testing periods | |
CN103475535A (zh) | 云计算服务器日志管理系统 | |
CN110928930A (zh) | 一种软件开发行为监控系统 | |
CN117370217B (zh) | 一种基于python的接口测试结果自动生成方法 | |
CN117573214B (zh) | 一种串口设备和Android系统框架融合的方法及装置 | |
CN109815140A (zh) | 一种嵌入式c语言实现的自动化测试系统及方法 | |
CN111930611B (zh) | 一种测试数据的统计方法和装置 | |
Steinle et al. | Mapping moving landscapes by mining mountains of logs: novel techniques for dependency model generation | |
Ding et al. | Automatic Software Fault Diagnosis by Exploiting Application Signatures. | |
CN113010417A (zh) | 基于自动化测试的脚本执行方法及装置 | |
Zhang et al. | Quality assurance technologies of big data applications: A systematic literature review | |
CN111062681B (zh) | 选课巡检方法、装置、服务器及存储介质 | |
US7516048B2 (en) | Externalized metric calculation engine |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190528 |
|
WD01 | Invention patent application deemed withdrawn after publication |