四種自動化測試模型實例及優缺點


一,線性測試

1.概念:

通過錄制或編寫對應應用程序的操作步驟產生的線性腳本。單純的來模擬用戶完整的操作場景。

(操作,重復操作,數據)都混合在一起。

2.優點:

每個腳本相對獨立,且不產生其他依賴和調用。

3.缺點:

開發成本高,用例之間存在重復的操作。比如重復的用戶登錄和退出。

維護成本高,由於重復的操作,當重復的操作發生改變時,則需要逐一進行腳本的修改。

4.線性測試實例

用戶登錄

以下的用戶名密碼到時候自己去申請,就不將筆者的用戶密碼貼出來了。

# coding=utf-8
'''
Created on 2016-7-20
@author: Jennifer
Project:簡單元素操作登錄126郵箱,元素的clear(),send_keys(),click()操作
在定位的時候發現有些元素定位不到,最后發現有iframe,frame中實際上是嵌入了另一個頁面。
如果iframe有name或id的話,直接使用switch_to_frame("name值")或switch_to_frame("id值"),
這是最理想的方法,也是最簡單好用的方法。
'''
from selenium import webdriver
import time

driver=webdriver.Firefox()
driver.get(r'http://www.126.com/')  #字符串加r,防止轉義。
time.sleep(3)

print '開始登錄郵箱'

try:
    assert '126' in driver.title    #title是變量,不能title()
except AssertionError:
    print "error:網址輸入不正確"
else:
    print "記錄日志:網址輸入正確"

#    driver.switch_to_frame('x-URS-iframe')  #跳轉到iframe框架
    driver.switch_to.frame('x-URS-iframe')   #同上面語句一樣,跳轉到iframe框架
    username=driver.find_element_by_name('email')
    username.clear()
    username.send_keys('Jennifer···')
    time.sleep(0.1)
    
    userpasswd=driver.find_element_by_name('password')
    userpasswd.clear()
    userpasswd.send_keys('·····')
    time.sleep(0.1)
    
    loginbt=driver.find_element_by_id('dologin')
    loginbt.click()
    time.sleep(3)
    
    try:
        assert '網易郵箱' in driver.title
    except AssertionError:
        print '郵箱登錄失敗'
    else:
        print '郵箱登錄成功'
    
finally:
    #操作:收信,寫信等操作,暫不寫例子了
    driver.quit()
    
print '測試結束'

 

二,模塊化驅動測試

1.概念:

將重復的操作獨立成功共模塊,當用例執行過程中需要用到這一模塊操作時則被調用。

操作+(重復操作,數據)混合在一起。

2.優點:

由於最大限度消除了重復,從而提高了開發效率和提高測試用例的可維護性。

3.缺點:

雖然模塊化的步驟相同,但是測試數據不同。比如說重復的登錄模塊,如果登錄用戶不同,依舊要重復編寫登錄腳本。

4.實例

公共模塊:對登陸和退出進行模塊化封裝

以下的用戶名密碼到時候自己去申請,就不將筆者的用戶密碼貼出來了。

# coding=utf-8
'''
Created on 2016-7-27
@author: Jennifer
Project:模塊化驅動測試實例,將重復的登錄腳本放在單獨的腳本中供其他用例調用
'''
import time
class Login():
    def user_login(self,driver):
        username=driver.find_element_by_name('email')
        username.clear()
        username.send_keys('username')
        time.sleep(0.1)
        
        userpasswd=driver.find_element_by_name('password')
        userpasswd.clear()
        userpasswd.send_keys('password')
        time.sleep(0.1)
        
        loginbt=driver.find_element_by_id('dologin')
        loginbt.click()
        time.sleep(3)
        
    def user_logout(self,driver):
        driver.find_element_by_link_text(u'退出').click()
        driver.quit()
        

寫信用例:以下代碼用了各種定位方法,值得學習,后續再重新對這部分進行總結

直接調用模塊的登錄和退出方法。

# coding=utf-8
'''
Created on 2016-7-27
@author: Jennifer
Project:發送郵件
'''
from selenium import webdriver
import time

from test_5_2_public import Login  #由於公共模塊文件命名為test_5_2_public
driver=webdriver.Firefox()
driver.implicitly_wait(30)
driver.get(r'http://www.126.com/')  #字符串加r,防止轉義。
time.sleep(3)
driver.switch_to.frame('x-URS-iframe')
#調用登錄模塊
Login().user_login(driver)
time.sleep(10)
#發送郵件
#點擊發件箱
#_mail_component_61_61是動態id,所以不能用於定位
#driver.find_element_by_css_selector('#_mail_component_61_61>span.oz0').click()
#不能加u"//span[contains(text(),u'寫 信')]",否則定位不到。
#以下定位是查找span標簽有個文本(text)包含(contains)'寫 信' 的元素,該定位方法重要
driver.find_element_by_xpath("//span[contains(text(),'寫 信')]").click()
#填寫收件人
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys(r'xxx@163.com') #填寫主題 #通過and連接更多的屬性來唯一地標志一個元素 driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @maxlength='256']").send_keys(u'自動化測試') #填寫正文 #通過switch_to_frame()將當前定位切換到frame/iframe表單的內嵌頁面中 driver.switch_to_frame(driver.find_element_by_class_name('APP-editor-iframe')) #在內嵌頁面中定位郵件內容位置 emailcontext=driver.find_element_by_class_name('nui-scroll') #填寫郵件內容 emailcontext.send_keys(u'這是第一封自動化測試郵件') #通過switch_to().default_content()跳回最外層的頁面 #注:不要寫成switch_to().default_content(),否則報AttributeError: SwitchTo instance has no __call__ method driver.switch_to.default_content() #driver.switch_to.parent_frame() #點擊發送 time.sleep(3) #有可能存在元素不可見(查看元素是灰色的),會報ElementNotVisibleException錯誤 #包含發送二字的元素很多,所以還得再加上其他限制 #sendemails=driver.find_element_by_xpath("//span[contains(text(),'發送')]") sendemails=driver.find_element_by_xpath("//span[contains(text(),'發送') and @class='nui-btn-text']") time.sleep(3) #校驗郵件是否發送成功 try: assert '發送成功' in driver.page_source except AssertionError: print '郵件發送成功' else: print '郵件發送失敗' #調用退出模塊 Login().user_logout(driver)

收信用例:

直接調用模塊的登錄和退出方法。

# coding=utf-8
'''
Created on 2016-7-27
@author: Jennifer
Project:接收郵件
'''
from selenium import webdriver
import time

from test_5_2_public import Login
driver=webdriver.Firefox()
driver.implicitly_wait(30)
driver.get(r'http://www.126.com/')  #字符串加r,防止轉義。
time.sleep(3)
driver.switch_to.frame('x-URS-iframe')
#調用登錄模塊
Login().user_login(driver)
time.sleep(10)
#接收郵件
#點擊收信
#以下定位是查找span標簽有個文本(text)包含(contains)'收 信' 的元素,該定位方法重要
driver.find_element_by_xpath("//span[contains(text(),'收 信')]").click()

#校驗是否進入收件箱,沒報錯即進入
try:
    #點擊其中一封郵件
    driver.find_element_by_xpath("//div[@sign='letter']").click()
except Exception as e:
    print e
else:
    print '成功收信'

#調用退出模塊    
Login().user_logout(driver)

 

三,數據驅動測試

1.概念:

它將測試中的測試數據和操作分離,數據存放在另外一個文件中單獨維護。

通過數據的改變從而驅動自動化測試的執行,最終引起測試結果的改變。

操作+重復操作+數據分開。

2.優點:

通過這種方式,將數據和重復操作分開,可以快速增加相似測試,完成不同數據情況下的測試。

3.缺點

暫無

4.實例

從excel表格讀取用戶名密碼,登錄郵箱。

以下的用戶名密碼到時候自己去申請,就不將筆者的用戶密碼貼出來了。

# coding=utf-8
'''
Created on 2016-7-28
@author: Jennifer
Project:數據驅動測試,數據保存在excel中,需要導入xlrd模塊
'''
from selenium import webdriver
import time
import xlrd

#將用戶密碼表格轉換為用戶密碼列表
def exceltolist(excelfile,colnameindex=0,by_index=0):
    excelfile=xlrd.open_workbook(excelfile)   #打開excel表格
#    table = excelfile.sheets()[by_index]     #默認獲取sheet0頁
    table = excelfile.sheet_by_index(by_index)#默認獲取sheet0頁
    nrows=table.nrows                         #獲取excel的sheet0頁的行數
    colnames=table.row_values(colnameindex)   #默認獲取第0行的列表數據:name和password兩個值
    list =[]                                  #建一個空列表,用來存放用戶密碼字典
    for rownum in range(1,nrows):             #初始行為0,從第1行開始
        row = table.row_values(rownum)        #獲取某一行的列表數據
        if row:
            app = {}                          #建立一個空字典,存放某一組用戶密碼數據
            for i in range(len(colnames)):    #目前是2
                app[colnames[i]] = row[i]     #字典新增數據:循環兩次,字典新增兩對key-value
            list.append(app)                  #將新增的字典數據,添加到列表數據中                 
    return list

def Login():
    file=r'D:\pythontest\rightpassword\userpassword.xls'
    userlist=exceltolist(file)
    for i in range(len(userlist)):
        driver=webdriver.Firefox()
        driver.get(r'http://www.126.com/')  #字符串加r,防止轉義。
        time.sleep(3)
    
        driver.switch_to.frame('x-URS-iframe')   #同上面語句一樣,跳轉到iframe框架
        username=driver.find_element_by_name('email')
        username.clear()
        username.send_keys(userlist[i]['name'])
        time.sleep(0.1)
        
        userpasswd=driver.find_element_by_name('password')
        userpasswd.clear()
        userpasswd.send_keys(userlist[i]['password'])
        time.sleep(0.1)
        
        loginbt=driver.find_element_by_id('dologin')
        loginbt.click()
        time.sleep(3)
        try:
            assert '網易郵箱' in driver.title
        except AssertionError:
            print '用戶%s郵箱登錄失敗'%(userlist[i]['name'])
        else:
            print '用戶%s郵箱登錄成功'%(userlist[i]['name'])
        
        finally:
            driver.quit()


if __name__=='__main__':
    Login()

 

 

四,關鍵字驅動測試

1.概念:

通過關鍵字的改變從而驅動自動化測試的執行,最終引起測試結果的改變。關鍵字驅動工具有:RobotFramework(RIDE)。

2.優點

未完待續

 

(尊重筆者的勞動哦,轉載請說明出處哦。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM