<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2814字,需瀏覽 6分鐘

           ·

          2020-09-15 06:20

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


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



          1

          概念描述



          關(guān)于 dogtail


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


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



          sniff?組件


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


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



          Accessibility 技術(shù)


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


          Qt 中的 Accessibility 支持包含了一個(gè)通用接口,該接口對(duì)每種平臺(tái)實(shí)現(xiàn)了一項(xiàng)技術(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)。比如盲人看不到窗口,但是他可以通過一個(gè) USB 讀屏器連接到電腦上,讀屏器通過 UI 程序暴露出來的這個(gè) Interface,就可以獲取程序信息,通過盲文或者其它形式傳遞給盲人。


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

          測試腳本


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


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


          #include?
          #include?

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

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

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

          ????//?將被輔助技術(shù)識(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)點(diǎn)擊程序中的按鈕:


          #!/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)點(diǎn)擊
          for?i?in?range(3):
          ????button.click()
          ????sleep(1)



          4

          執(zhí)行自動(dòng)化


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


          $?sniff



          運(yùn)行 Python 腳本,執(zhí)行自動(dòng)化測試:


          $?python3?autotest.py



          恭喜,這時(shí)候你就能看到鼠標(biāo)被自動(dòng)點(diǎn)擊了。


          后面還有更多有意思的功能,比如模擬鍵盤輸入、自動(dòng)生成測試報(bào)告等,敬請(qǐng)期待!



          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í),愛編程,愛生活。
          歡迎來撩,一起暢談程序人生!

          點(diǎn)個(gè)在看,么么噠!

          瀏覽 266
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产午夜一区二区 | 狠狠躁日日躁夜夜躁A片无码 | 国产精品AV片 | 久久久久久国产精品频道 | 五月天激情婷婷婷久久 |