自動化測試用例設計實例


上一節我們簡單討論了手工測試用例與自動化測試用之間的差異,以及自動化測試用例設計時的注意事項,這一節就通過實例向讀者介紹如何編寫具體的自動化測試用。
筆者以快播私有雲產品為例:

http://webcloud.kuaibo.com/

快播私有雲是快播社區的產品之一,為用戶提供免費的在線空間,讀者進入空間后可以收藏用戶分享的影片,同時可以將自己的影片分享給其他用戶。對於私有雲本身具有創建文件夾,文件/文件夾重命名,刪除到回收,文件/文件夾的移動,去除重復影片,影片播放等功能。


在編寫用例之間,筆者再次強調幾點編寫自動化測試用例的原則:

1、一個腳本是一個完整的場景,從用戶登陸操作到用戶退出系統關閉瀏覽器。
2、一個腳本腳本只驗證一個功能點,不要試圖用戶登陸系統后把所有的功能都進行驗證再退出系統
3、盡量只做功能中正向邏輯的驗證,不要考慮太多逆向邏輯的驗證,逆向邏輯的情況很多(例如手號輸錯有很多種情況),驗證一方面比較復雜,需要編寫大量的腳本,另一方面自動化腳本本身比較脆弱,很多非正常的邏輯的驗證能力不強。(我們盡量遵循用戶正常使用原則編寫腳本即可)
4、腳本之間不要產生關聯性,也就是說編寫的每一個腳本都是獨立的,不能依賴或影響其他腳本。
5、如果對數據進行了修改,需要對數據進行還原。
6、在整個腳本中只對驗證點進行驗證,不要對整個腳本每一步都做驗證。

一、登陸用例實例:

 

筆者建議通過excle 表格來編寫自動化測試用例。
用例001:

代碼示例:

備注:通過匹配用戶登錄之后的昵稱來判斷用戶是否登錄成功。
用例腳本(login.py):

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Firefox()
driver.get("http://passport.kuaibo.com/login/?referrer=http%3A%2F%2Fwebcloud.kuaibo.com%2F")
driver.maximize_window() #瀏覽器最大化

#登陸快播私有雲
driver.find_element_by_id("user_name").send_keys("testing360")
driver.find_element_by_id("user_pwd").send_keys("198876")
driver.find_element_by_id("dl_an_submit").click()
time.sleep(3)

#獲取用戶名
now_user=driver.find_element_by_xpath("//div[@id='Nav']/ul/li[4]/a[1]/span").text

#用戶名是否等於蟲師,不等於將拋出異常
if now_user==u'蟲師':
       print '登陸成功'
else:
       raise NameError('user name error!')

#退出
driver.find_element_by_class_name("Usertool").click()
time.sleep(2)
driver.find_element_by_link_text("退出").click()
time.sleep(2)
driver.close()

 

二、添加文件用例實例

 

用例002:

 備注:通過計算用戶列表中的文件的數量來判斷文件是否添加成功。

用例腳本(collect.py):

注:用例登陸與退出參考用例001,本用例只關注收藏用戶分享的邏輯代碼。

#判斷當前文件個數
inputs=driver.find_elements_by_tag_name('input')
n=0
for i in inputs:
    if i.get_attribute('type')=="checkbox":
    n=n+1
print u"當前列表文件為%d" %n

 

#收藏用戶分享文件
driver.find_element_by_class_name("collect").click()
time.sleep(3)

#再次獲取當前文件的個數
inputs=driver.find_elements_by_tag_name('input')
ns=0
for ii in inputs:
     if ii.get_attribute('type')=="checkbox":
         ns=ns+1
print u"當前列表文件為%d" %ns

 

#判斷執行收藏文件之后比收藏之間文件加1 ,否則拋異常
if  ns==n+1:
     print "ok!"
else:
     raise NameError('添加文件失敗!!')

 

三、刪除文件實例:

用例003:

備注:因為刪除了一個文件對文件的數據發生的改變,如果多次執行腳本,列表中的文件被刪除完了就會引發異常,所以在刪除一個文件后,需要再添加一文件,但添加文件操作不做驗證。
用例腳本(del_one_file.py):

#判斷當前文件個數
inputs=driver.find_elements_by_tag_name('input')
n=0
for i in inputs:
      if i.get_attribute('type')=="checkbox":
            n=n+1
print u"當前列表文件為%d" %n

 

#刪除操作
driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[4]/table/tbody/tr/td/input").click()
driver.find_element_by_class_name("dele").click()
driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/div").click()
time.sleep(4)

#再次獲取當前文件的個數
inputs=driver.find_elements_by_tag_name('input')
ns=0
for ii in inputs:
         if ii.get_attribute('type')=="checkbox":
               ns=ns+1
print u"當前列表文件為%d" %ns

 

#判斷執行刪除單個文件之后比刪除之后文件減1 ,否則拋異常
if  ns==n-1:
    print "ok!"
else:
     raise NameError('刪除文件失敗!!')
#收藏用戶分享單個文件


driver.find_element_by_class_name("collect").click()
time.sleep(3)

 

四、重命名文件用例實例

用例004:

備注:文件的重命名其實我們很難找到證據(驗證點)證明重命名成功,那么腳本整個運行沒有報錯,我們也可模糊的判斷功能測試是OK 的。


用例腳本(renaming.py)

#勾選重命名的文件
driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[4]/table/tbody[5]/tr/td/input").click()
time.sleep(3)


#鼠標移動到“更多”按鈕彈下拉框

element=driver.find_element_by_class_name("more-fe")     #定位到“更多”按鈕
ActionChains(driver).move_to_element(element).perform()   #鼠標移動到“更多”按鈕彈下拉框
time.sleep(2)   

 

#在li 標簽(更多下拉框)中篩選到data-action==rename(重命名)選項點擊

 

lis=driver.find_elements_by_tag_name('li')
for li in lis:
      if li.get_attribute('data-action') == 'rename':
            li.click()
time.sleep(2)

在input 標簽中篩選type==text 的重命名輸入框

inputs=driver.find_elements_by_tag_name('input')
for input in inputs:
       if input.get_attribute('type') == 'text':
                input.send_keys(u"新文件名") #進行重名操作
                input.send_keys(Keys.ENTER) #回車確認重命名
                time.sleep(2)

總結:
在本章中,簡單對比了手工測試用戶與自動化測試用例的區別,自動化測試用例編寫的原則,如何通過python 捕捉異常和拋出異常,以及webdriver 提供的get_screenshot_as_file()函數,以及如何編寫自動化用例與腳本等。


不過筆者先不要急於開始實施自動化測試,雖然我們可以編寫單個的測試用例,並通過異常捕捉判斷用例是否運行成功。但只有與通過測試框架的整合,我們才能真正有效可行的運用自動化測試技術。


免責聲明!

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



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