李先静的专栏

欢迎大家加入Linux Mobile Research,本圈子主要致力于基于linux的嵌入式系统的学习和研究,包括内核、驱动、GUI、MMI、软件设计方法和软件优化等方面,欢迎大家加入,无论是高手还是新手,一起学习共同进步。个人网站上线:http://www.limodev.cn

用户操作
[即时聊天] [发私信] [加为好友]
李先静ID:absurd
1018498次访问,排名26好友231人,关注者236
Only those who attempt the absurd can achieve the impossible.
absurd的文章
原创 384 篇
翻译 1 篇
转载 57 篇
评论 1513 篇
李先静的公告
个人网站上线: http://www.limodev.cn,以后BLOG将在CSDN和limodev上同时更新,欢迎交流,评论和交换友情链接。
最近评论
securitydoor:加油哦
SuperKris:应该把rootfs里的/var/tmp改成是指向/tmp的连接,
别的程序也可能用/var/tmp保存临时文件,好像pppd这个拨号程序就是
creative55:牛人,佩服。
Nick518:即将实现MTK方案动态加载,到时候可以无限扩展手机功能. 哈哈
AntiSoul:不错,这些是什么方面的开发?
文章分类
收藏
相册
1.个人相册
2.设计备忘录用图
3.设计本质论用图
4.scim架构用图
6.临时文件
7.其它文件
8.研究笔记用图
marvell-linux
1.友情链接
aimself@CSDN(RSS)
directfb中文网站(RSS)
Eric's Little Hut
eye_of_back的专栏(RSS)
Linux Mobile Research
Phoenix@上海(RSS)
segments的专栏(RSS)
study's Blog(RSS)
tracestudio
伐木丁丁鸟鸣嘤嘤(RSS)
会飞的鱼的专栏(RSS)
创系的技术博客
小四的BLOG(RSS)
小马哥的博客(RSS)
开源电信(RSS)
御风剑客
新奇的BLOG
易军军的网络家
李吉群的专栏(RSS)
2.亲情链接
凤凰的幸福蓄水池(RSS)
我的相册
3.软界高手
Donald E. Knuth (RSS)
孟岩(RSS)
透明(RSS)
4.LinuxMobile
celinuxforum(RSS)
GPE(RSS)
maemo.org(RSS)
opensource.motorola
palowireless
5.XWindow
Jserv's blog(RSS)
Keith Packard(RSS)
6.技术资源
7.开源项目
freedesktop(RSS)
GNU(RSS)
GTK+(RSS)
matchbox(RSS)
pxa27x-linux/
8.我的BLOG镜像
absurd@chinaunix
absurd@msn
My English BLOG(RSS)
存档
订阅我的博客
XML聚合  FeedSky

原创 DirectFB压力测试工具收藏

新一篇: 数据同步管理器设计备忘录 | 旧一篇: broncho Linux手机平台网站上线(http://www.broncho.cn)

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);


事件监听函数:
static ReactionResult input_device_listener (const void *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]: fwrite Error errno = %d ", __func__, errno);

        g_main_loop_quit (context
->loop);
    }

    fflush(context
->file);

    
return RS_OK;
}


事件重放函数:
static gboolean replay_one_event (gpointer user_data)
{
    DFBContext 
*context = (DFBContext*)user_data;
    off_t cur 
= 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->eventsizeof (DFBInputEvent), 1, context->file) == 1)
    
{
        guint ms 
= (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);
    }


    
return FALSE;
}


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

~~end~~
 

发表于 @ 2008年04月20日 13:09:00|评论(loading...)|编辑|收藏

新一篇: 数据同步管理器设计备忘录 | 旧一篇: broncho Linux手机平台网站上线(http://www.broncho.cn)

评论:没有评论。

Csdn Blog version 3.1a
Copyright © 李先静