在編寫用例之間,筆者再次強(qiáng)調(diào)幾點(diǎn)編寫自動(dòng)化測(cè)試用例的原則:
1、一個(gè)腳本是一個(gè)完整的場(chǎng)景,從用戶登陸操作到用戶退出系統(tǒng)關(guān)閉瀏覽器。
2、一個(gè)腳本腳本只驗(yàn)證一個(gè)功能點(diǎn),不要試圖用戶登陸系統(tǒng)后把所有的功能都進(jìn)行驗(yàn)證再退出系統(tǒng)
3、盡量只做功能中正向邏輯的驗(yàn)證,不要考慮太多逆向邏輯的驗(yàn)證,逆向邏輯的情況很多(例如手號(hào)輸錯(cuò)有很多種情況),驗(yàn)證一方面比較復(fù)雜,需要編寫大量的腳本,另一方面自動(dòng)化腳本本身比較脆弱,很多非正常的邏輯的驗(yàn)證能力不強(qiáng)。(我們盡量遵循用戶正常使用原則編寫腳本即可)
4、腳本之間不要產(chǎn)生關(guān)聯(lián)性,也就是說編寫的每一個(gè)腳本都是獨(dú)立的,不能依賴或影響其他腳本。
5、如果對(duì)數(shù)據(jù)進(jìn)行了修改,需要對(duì)數(shù)據(jù)進(jìn)行還原。
6、在整個(gè)腳本中只對(duì)驗(yàn)證點(diǎn)進(jìn)行驗(yàn)證,不要對(duì)整個(gè)腳本每一步都做驗(yàn)證。
一、登陸用例實(shí)例:
筆者建議通過excle 表格來編寫自動(dòng)化測(cè)試用例。
用例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("http://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()
二、添加文件用例實(shí)例
用例002:
?備注:通過計(jì)算用戶列表中的文件的數(shù)量來判斷文件是否添加成功。
用例腳本(collect.py):
注:用例登陸與退出參考用例001,本用例只關(guān)注收藏用戶分享的邏輯代碼。#判斷當(dāng)前文件個(gè)數(shù)
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āng)前列表文件為%d" %n
#收藏用戶分享文件
driver.find_element_by_class_name("collect").click()
time.sleep(3)
#再次獲取當(dāng)前文件的個(gè)數(shù)
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āng)前列表文件為%d" %ns
#判斷執(zhí)行收藏文件之后比收藏之間文件加1 ,否則拋異常
if? ns==n+1:
???? print "ok!"
else:
?? ? raise NameError('添加文件失敗!!')
三、刪除文件實(shí)例:
用例003:
備注:因?yàn)閯h除了一個(gè)文件對(duì)文件的數(shù)據(jù)發(fā)生的改變,如果多次執(zhí)行腳本,列表中的文件被刪除完了就會(huì)引發(fā)異常,所以在刪除一個(gè)文件后,需要再添加一文件,但添加文件操作不做驗(yàn)證。
用例腳本(del_one_file.py):#判斷當(dāng)前文件個(gè)數(shù)
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āng)前列表文件為%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)
#再次獲取當(dāng)前文件的個(gè)數(shù)
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āng)前列表文件為%d" %ns
#判斷執(zhí)行刪除單個(gè)文件之后比刪除之后文件減1 ,否則拋異常
if? ns==n-1:
??? print "ok!"
else:
???? raise NameError('刪除文件失敗!!')
#收藏用戶分享單個(gè)文件
driver.find_element_by_class_name("collect").click()
time.sleep(3)
四、重命名文件用例實(shí)例
用例004:
備注:文件的重命名其實(shí)我們很難找到證據(jù)(驗(yàn)證點(diǎn))證明重命名成功,那么腳本整個(gè)運(yùn)行沒有報(bào)錯(cuò),我們也可模糊的判斷功能測(cè)試是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)
#鼠標(biāo)移動(dòng)到“更多”按鈕彈下拉框
element=driver.find_element_by_class_name("more-fe")???? #定位到“更多”按鈕
ActionChains(driver).move_to_element(element).perform()?? #鼠標(biāo)移動(dòng)到“更多”按鈕彈下拉框
time.sleep(2)???
#在li 標(biāo)簽(更多下拉框)中篩選到data-action==rename(重命名)選項(xiàng)點(diǎn)擊
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 標(biāo)簽中篩選type==text 的重命名輸入框
inputs=driver.find_elements_by_tag_name('input')
for input in inputs:
?????? if input.get_attribute('type') == 'text':
??????????????? input.send_keys(u"新文件名") #進(jìn)行重名操作
??????????????? input.send_keys(Keys.ENTER) #回車確認(rèn)重命名
??????????????? time.sleep(2)
總結(jié):
在本章中,簡(jiǎn)單對(duì)比了手工測(cè)試用戶與自動(dòng)化測(cè)試用例的區(qū)別,自動(dòng)化測(cè)試用例編寫的原則,如何通過python 捕捉異常和拋出異常,以及webdriver 提供的get_screenshot_as_file()函數(shù),以及如何編寫自動(dòng)化用例與腳本等。文章來源:http://www.zghlxwxcb.cn/news/detail-660234.html
不過筆者先不要急于開始實(shí)施自動(dòng)化測(cè)試,雖然我們可以編寫單個(gè)的測(cè)試用例,并通過異常捕捉判斷用例是否運(yùn)行成功。但只有與通過測(cè)試框架的整合,我們才能真正有效可行的運(yùn)用自動(dòng)化測(cè)試技術(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-660234.html
到了這里,關(guān)于自動(dòng)化測(cè)試用例設(shè)計(jì)實(shí)例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!