• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    DirectFB壓力測試工具

    發布: 2008-4-21 13:58 | 作者: 李先靜 | 來源: 李先靜Blog | 查看: 127次 | 進入軟件測試論壇討論

    領測軟件測試網 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以多進程的方式運行,這個程序可以是一個獨立的進程,否則要放到應用程序的進程中才行。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: 工具 壓力 DirectFB


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>