DirectFB压力测试工具

介绍了一种基于DirectFB的GUI自动测试工具,该工具通过事件录制与重放进行BUG重现及压力测试。文章详细展示了如何获取键盘与鼠标设备、注册事件监听函数以及实现事件的录制与重放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DirectFB压力测试工具

转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>

GUI应用程序自动测试一直是个难题,通常的做法就是先把人工测试过程录制下来,然后去重放这个测试过程。这种方法的主要缺点是很难自动检测运行结果的正确性,所以很多人都不屑去使用它。其实工具总是有它的局限性,它能不能发挥它应有的作用,还依赖于人的灵活运用。即不能过分依赖于工具,也不能盲目排斥工具。

在质量保证的过程中,人无疑是最重要的,没有什么比一次性写出高质量代码就有效的了。但事实是即使有良好的架构设计,辅之于单元测试和代码评审等一些有效实践,仍然有些BUG成为漏网之鱼,更何况很多团队这些工作做得并到位。单一工具和方法很难包医百病,但各种方法和工具综合起来使用的效果就大不一样了。

前段时间一位同事开发了一个GUI自动测试工具,我们把它用于BUG重现和压力测试中,取得了不错的效果。这里介绍一下DirectFB里面事件录制和重放的方法:

获得键盘设备:
dfb_input_enumerate_devices((InputDeviceCallback)device_callback,
&context->keyboard_device,DICAPS_KEYS);


获得鼠标或触摸屏设备:
dfb_input_enumerate_devices((InputDeviceCallback)device_callback,
&context->mouse_device,DICAPS_AXES|DICAPS_BUTTONS);


向设备注册事件监听函数:
dfb_input_attach(context->mouse_device,
input_device_listener,context,
&context->mouse_reaction);
dfb_input_attach(context
->keyboard_device,
input_device_listener,context,
&context->keyboard_reaction);


事件监听函数:
staticReactionResultinput_device_listener(constvoid*msg_data,void*ctx)
...{
DFBContext
*context=(DFBContext*)ctx;
DFBInputEvent
*event=(DFBInputEvent*)msg_data;

event->locks=0;
event->flags&=~DIEF_LOCKS;

if(fwrite(msg_data,sizeof(DFBInputEvent),1,context->file)!=1)
...{
printf(
"[%s]:fwriteErrorerrno=%d ",__func__,errno);

g_main_loop_quit(context
->loop);
}

fflush(context
->file);

returnRS_OK;
}


事件重放函数:
staticgbooleanreplay_one_event(gpointeruser_data)
...{
DFBContext
*context=(DFBContext*)user_data;
off_tcur
=0;

DFBInputEvent
event=context->event;

if(event.type==DIET_KEYPRESS||event.type==DIET_KEYRELEASE)
...{
dfb_input_dispatch(context
->keyboard_device,&event);
}

else
...{
dfb_input_dispatch(context
->mouse_device,&event);
}


if(fread(&context->event,sizeof(DFBInputEvent),1,context->file)==1)
...{
guintms
=(context->event.timestamp.tv_sec-event.timestamp.tv_sec)*1000
+(context->event.timestamp.tv_usec-event.timestamp.tv_usec)/1000;

g_timeout_add(ms,replay_one_event,user_data);
}

else
...{
g_main_loop_quit(context
->loop);
}


returnFALSE;
}


注意:DirectFB中的笔点事件是以相对坐标方式表示的,所以要保证重放时光标在同样的初始位置。如果DirectFB以多进程的方式运行,这个程序可以是一个独立的进程,否则要放到应用程序的进程中才行。

~~end~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值