1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        利用 dogtail 快速進(jìn)行 GUI 自動化測試

        共 2814字,需瀏覽 6分鐘

         ·

        2020-09-15 06:20

        最近在協(xié)助測試小組做一些 GUI 方面的自動化測試,主要使用了 Python 中的 dogtail 框架,以及 Qt 中的 Accessibility 技術(shù)。


        這個東西很有意思,可以讓 GUI 的測試變得很方便,比如:模擬鼠標(biāo)點擊、用戶輸入等。因此在這里分享一下,希望能幫到大家!



        1

        概念描述



        關(guān)于 dogtail


        dogtail 是一個用 Python 編寫的 GUI 自動化測試框架,它使用 Accessibility(a11y)技術(shù)與桌面應(yīng)用程序通信。


        dogtail 腳本是用 Python 編寫的,并能夠像其他 Python 程序一樣執(zhí)行。



        sniff?組件


        在 dogtail 的發(fā)行包中,自帶了一個 sniff 組件(嗅探器),該組件在 GUI 程序追蹤方面非常有用。


        打開終端,執(zhí)行 sniff 命令,會彈出一個 AT-SPI Browser 界面,里面包含了所有正在運行的程序。值得一提的是,這些程序是以 tree 的形式顯示的。因此在 sniff 程序里面,根據(jù)顯示便能夠很容易地查看所要調(diào)試程序的 layout。



        Accessibility 技術(shù)


        既然 dogtail 利用 Accessibility 技術(shù)與桌面程序通信,那么想自動化測試 Qt 程序,就必須啟用 Qt Accessibility。


        Qt 中的 Accessibility 支持包含了一個通用接口,該接口對每種平臺實現(xiàn)了一項技術(shù):Windows 上的 MSAA、Mac 上的 Mac OS X accessibility,以及 Linux 上的 Unix/X11 AT-SPI。Qt 的 Accessibility 接口嚴(yán)格遵循 MSAA 標(biāo)準(zhǔn)。那么,什么是 MSAA 呢?


        MSAA 全稱為 Microsoft Active Accessibility,其初衷是為了方便殘疾人士使用電腦 - 可用于放大器、屏幕閱讀器,以及觸覺型鼠標(biāo)。比如盲人看不到窗口,但是他可以通過一個 USB 讀屏器連接到電腦上,讀屏器通過 UI 程序暴露出來的這個 Interface,就可以獲取程序信息,通過盲文或者其它形式傳遞給盲人。


        MSAA 的主要思想是提供一種以程序方式訪問 UI 元素信息或操作這些 UI 元素的功能。支持這種功能的 UI 元素是可訪問的。在大多數(shù)情況下,這意味著一個 UI 元素支持 IAccessible 接口。你也可以說在 MSAA 的世界里,一個可訪問的 UI 元素可表示為 IAccessible 接口。



        2

        環(huán)境安裝



        安裝依賴


        要使用 dogtail,首先要安裝依賴:


        $?sudo?apt-get?install?python3-pyatspi?python3-pyqt5




        安裝 dogtail


        下載 dogtail 源碼(地址:https://gitlab.com/dogtail/dogtail/),并進(jìn)行安裝:


        $?sudo?python3?setup.py?install



        3

        測試腳本


        為了實現(xiàn)自動化測試,先用 Qt 編寫一個簡單的示例程序 - Sample01。


        顯示一個 button,并連接它的 clicked() 信號,當(dāng)鼠標(biāo)被點擊之后,文本發(fā)生改變:


        #include?
        #include?

        int?main(int?argc,?char?*argv[])
        {
        ????QApplication?a(argc,?argv);

        ????QPushButton?button("test");

        ????//?每點擊一次,文本就會發(fā)生變化
        ????QObject::connect(&button,?&QPushButton::clicked,?[&]()?{
        ????????static?int?index?=?0;
        ????????index++;
        ????????button.setText(QString("click?%1").arg(index));
        ????});

        ????//?將被輔助技術(shù)識別
        ????button.setAccessibleName("button");
        ????button.setAccessibleDescription("this?is?a?simple?button");

        ????//?設(shè)置大小并顯示
        ????button.resize(300,?200);
        ????button.show();

        ????return?a.exec();
        }


        現(xiàn)在編寫 Python 腳本 - autotest.py,模擬鼠標(biāo)點擊程序中的按鈕:


        #!/usr/bin/env?python3
        #?-*-?coding:?utf-8?-*-

        from?dogtail.tree?import?*
        import?time

        #?獲取應(yīng)用程序(根據(jù)程序名稱查找)
        app?=?root.application(appName="Sample01",?description="/home/waleon/workspace/demos/build-Samples-unknown-Debug/Sample01/Sample01")

        #?獲取按鈕(根據(jù)?accessibleName?遞歸查找)
        button?=?app.child('button')

        #?模擬鼠標(biāo)點擊
        for?i?in?range(3):
        ????button.click()
        ????sleep(1)



        4

        執(zhí)行自動化


        運行上述的示例程序,然后執(zhí)行 sniff 命令,可以查看 Sample01 的標(biāo)記:


        $?sniff



        運行 Python 腳本,執(zhí)行自動化測試:


        $?python3?autotest.py



        恭喜,這時候你就能看到鼠標(biāo)被自動點擊了。


        后面還有更多有意思的功能,比如模擬鍵盤輸入、自動生成測試報告等,敬請期待!



        5

        更多參考


        • dogtail 源碼:https://gitlab.com/dogtail/dogtail/

        • dogtail api:http://fedorapeople.org/~vhumpa/dogtail/epydoc/

        • dogtail 教程:https://wiki.ubuntu.com/Testing/Automation/DogtailTutorial

        • 輔助功能在 GNOME 中如何工作:https://developer.gnome.org/accessibility-devel-guide/stable/gad-how-it-works.html.zh_CN



        ·END·
        ?

        作者:一去、二三里
        愛學(xué)習(xí),愛編程,愛生活。
        歡迎來撩,一起暢談程序人生!

        點個在看,么么噠!

        瀏覽 266
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            免费性爱视频 | 疯狂做爰小说高潮细节 | 精品少妇无码视频 | 国产精品秘 一区二区三区高潮 | 国内一区二区在线观看 | 青青国产免费 | 黄色小说网站在线观看免费 | 超碰爆乳| 懂色AV一区二区三区国产中文在线 | 大尺度一区二区 |