qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          我所知道的自動(dòng)化測(cè)試模型

            這一篇我的偶像Jackei 致敬:
            (關(guān)于偶像的問題,發(fā)表一下自己的看法,我覺得每個(gè)人都應(yīng)該有“偶像”,偶像是標(biāo)桿和奮斗目標(biāo)。關(guān)于有些人拿比爾蓋茨 和 自己當(dāng)偶像的,要么活在夢(mèng)里,要么活在自己的世界,我只能 呵呵 了。)
            其實(shí),從剛開始做測(cè)試就有學(xué)習(xí)自動(dòng)化(基于UI 的web自動(dòng)動(dòng)化測(cè)試),理解上一直處于非常皮毛的狀態(tài)。再次的深入學(xué)習(xí)并實(shí)踐自動(dòng)化大概從半年前開始。邊學(xué)習(xí)邊總結(jié)是我的一貫學(xué)習(xí)方式。
            《我所知道的軟件測(cè)試自動(dòng)化》- 關(guān)鍵字驅(qū)動(dòng)的過去和未來
            Jackei 的這篇文章我了好幾遍,雖然將的內(nèi)容并不高深,但隨著自己自動(dòng)化水平的提高,每次看完也會(huì)一新體會(huì)。基于這篇文章,擴(kuò)展的來談一下自己對(duì)幾種自動(dòng)化測(cè)試模型的理解。
            線性測(cè)試
            通過錄制或編寫腳本,一個(gè)腳本完成用戶一套完整的操作,通過對(duì)腳本的回放來進(jìn)行自動(dòng)化測(cè)試。
            這是早期進(jìn)行自動(dòng)化測(cè)試的一種形式。
            腳本一
          from selenium import webdriver
          import time
          driver = webdriver.Firefox()
          driver.get("http://passport.cnblogs.com/login.aspx?ReturnUrl=http://www.cnblogs.com/fnng/admin/EditPosts.aspx")
          driver.find_element_by_id("tbUserName").send_keys("admin")
          driver.find_element_by_id("tbPassword").send_keys("123456")
          driver.find_element_by_id("btnLogin").click()
          ......
          driver.quit ()
            腳本二
          from selenium import webdriver
          import time
          driver = webdriver.Firefox()
          driver.get("http://passport.cnblogs.com/login.aspx?ReturnUrl=http://www.cnblogs.com/fnng/admin/EditPosts.aspx")
          driver.find_element_by_id("tbUserName").send_keys("user")
          driver.find_element_by_id("tbPassword").send_keys("456123")
          driver.find_element_by_id("btnLogin").click()
          ......
          driver.quit ()
            通過上面的兩個(gè)腳本,我們很明顯的發(fā)現(xiàn)它的問題:
            一個(gè)用例對(duì)應(yīng)一個(gè)腳本,假如界面發(fā)生變化,用戶名的屬性發(fā)生改變,不得不需要對(duì)每一個(gè)腳本進(jìn)行修改,測(cè)試用例形成一種規(guī)模,我們可能將大量的工作用于腳本的維護(hù),從而失去自動(dòng)化的意義。
            這種模式下數(shù)據(jù)和腳本是混在一起的,如果數(shù)據(jù)發(fā)生變也也需要對(duì)腳本進(jìn)行修改。
            這種模式下腳本的可重復(fù)使用率很低。
          模塊化與庫
            我們會(huì)清晰的發(fā)現(xiàn)在上面的腳本中,其實(shí)有不少內(nèi)容是重復(fù)的;于是就有了下面的形式。
          #coding=utf-8
          from selenium import webdriver
          import time
          #登錄模塊
          def login():
          driver.find_element_by_id("tbUserName").send_keys("user")
          driver.find_element_by_id("tbPassword").send_keys("456123")
          driver.find_element_by_id("btnLogin").click()
          #退出模塊
          def  quit():
          ..............
          driver = webdriver.Firefox()
          driver.get("http://passport.cnblogs.com/login.aspx?ReturnUrl=http://www.cnblogs.com/fnng/admin/EditPosts.aspx")
          #調(diào)用登錄模塊
          login()
          #其它個(gè)性化操作
          ......
          #調(diào)用退出模塊
            注意,為了省事我把代碼寫在了一個(gè)文件里,真正的實(shí)施時(shí)需要把模塊放到其它文件進(jìn)行調(diào)用。還有上面代碼不能完整運(yùn)行。
            通過上面的代碼發(fā)現(xiàn),我們可以把腳本中相同的部分獨(dú)立出來,形成模塊或庫;當(dāng)腳本需要進(jìn)行調(diào)用。這樣做有兩個(gè)好處:
            一方面提高了開發(fā)效率,不用重復(fù)的編寫相同的腳本。
            另一方面提高了代碼的復(fù)用。
            數(shù)據(jù)驅(qū)動(dòng)
            數(shù)據(jù)驅(qū)動(dòng)應(yīng)該是自動(dòng)化的一個(gè)進(jìn)步;從它的本意來講,數(shù)據(jù)的改變(更新)驅(qū)動(dòng)自動(dòng)化的執(zhí)行,從而引起結(jié)果改變。這顯然是一個(gè)非常高級(jí)的概念和想法。
            其實(shí),我們能做到的是下面的形式。
            d:\abc\data.txt
          #coding=utf-8
          from selenium import webdriver
          import os,time
          source = open("D:\\abc\\data.txt", "r")
          values = source.readlines()
          source.close()
          # 執(zhí)行循環(huán)
          for serch in values:
          browser = webdriver.Firefox()
          browser.get("http://www.baidu.com")
          browser.find_element_by_id("kw").send_keys(serch)
          browser.find_element_by_id("su").click()
          browser.quit()
            好吧!不管我們讀取的是txt 文件,還是csv、excel 文件的之類,又或者是數(shù)組、字典函數(shù)。我們實(shí)現(xiàn)了數(shù)據(jù)與腳本的分離,換句話說,我們實(shí)現(xiàn)了參數(shù)化。我們?nèi)砸磺l數(shù)據(jù),通過腳本的執(zhí)行,可以返回一千條結(jié)果出來。
            同樣的腳本執(zhí)行不同的數(shù)據(jù)從而得到了不同的結(jié)構(gòu)。是不是增強(qiáng)的腳本的復(fù)用性呢!
            其實(shí),這對(duì)開發(fā)來說是完全沒有什么技術(shù)含量的;對(duì)于當(dāng)初QTP 自動(dòng)化工具來說確是一個(gè)買點(diǎn),因?yàn)樗鎸?duì)的大多是不懂開發(fā)的測(cè)試。
            關(guān)鍵字驅(qū)動(dòng)
            理解了數(shù)據(jù)驅(qū)動(dòng),無非是把“數(shù)據(jù)”換成“關(guān)鍵字”,關(guān)鍵字的改變引起測(cè)試結(jié)果的改變。
            關(guān)鍵字驅(qū)動(dòng)用編程方式就不太容易表現(xiàn)了。QTP 、 robot framework 等自動(dòng)化工具就是典型的關(guān)鍵字驅(qū)動(dòng)(填表格)
            好吧!我能說selenium IDE 也是關(guān)鍵字驅(qū)動(dòng)么?
            轉(zhuǎn)化成表格是這樣的:
            Selenium IDE 腳本分:命令(command)、對(duì)象(command)、值(value)
            格式就那里不偏不移,通過這樣的格式去描述不同的對(duì)象,從而引起最終結(jié)果的改變。也就是說一切以對(duì)象為出發(fā)點(diǎn)。
            當(dāng)然,這樣的腳本,顯然對(duì)于不懂代碼的同學(xué)非常直觀!我要找誰(對(duì)象)?怎么做(命令)?做什么(值)?
            更高級(jí)的關(guān)鍵字驅(qū)動(dòng),可以自己定義keyword然后“注冊(cè)”到框架;從而實(shí)現(xiàn)更強(qiáng)大的功能和擴(kuò)展性。關(guān)鍵字更詳細(xì)的理解可以看我偶像的那偏文章。
            本文所列出了不同自動(dòng)化模型,雖然簡單闡述了他們的優(yōu)缺點(diǎn),但并不主觀的說評(píng)判某一模型好壞。其實(shí)他們也并非單純后者淘汰前者的關(guān)系,實(shí)施自動(dòng)化更多的是以需求為出發(fā)點(diǎn),混合的來使用以上模型去解決問題。

          posted on 2014-03-11 10:42 順其自然EVO 閱讀(310) 評(píng)論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動(dòng)化測(cè)試學(xué)習(xí)

          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 石柱| 寿阳县| 余江县| 水富县| 边坝县| 平邑县| 太和县| 龙南县| 工布江达县| 高邑县| 巩义市| 三亚市| 德令哈市| 芜湖县| 庐江县| 杭锦后旗| 资兴市| 三亚市| 许昌县| 三门峡市| 大港区| 花莲市| 玉田县| 内江市| 红安县| 芜湖县| 林芝县| 遂平县| 玉田县| 武汉市| 西吉县| 奉新县| 集安市| 图木舒克市| 忻城县| 开鲁县| 合山市| 洞口县| 丰台区| 庐江县| 潜江市|