前言
今天我們開(kāi)始我們的第一個(gè)python webdriver自動(dòng)化測(cè)試腳本炮温。并就測(cè)試腳本進(jìn)行一一解釋說(shuō)明。
webdriver python代碼
本示例代碼演示了使用Ie瀏覽器訪問(wèn)百度進(jìn)行搜索測(cè)試。
HTMLTestRunner 從這里下載:
http://tungwaiyip.info/software/HTMLTestRunner_0_8_2/HTMLTestRunner.py
下載后和當(dāng)前測(cè)試腳本放在同一目錄。
# 將以下代碼保存到first_webdriver.py中
#-*- coding:utf-8 -*-
__author__ = u'苦葉子'
from selenium import webdriver
import unittest
import HTMLTestRunner
import sys
from time import sleep
reload(sys)
sys.setdefaultencoding("utf-8")
class BaiduTest(unittest.TestCase):
"""百度首頁(yè)搜索測(cè)試用例"""
def setUp(self):
self.driver = webdriver.Ie()
self.driver.implicitly_wait(30)
self.base_url = u"http://www.baidu.com"
def test_baidu_search(self):
driver = self.driver
print u"開(kāi)始[case_0001]百度搜索"
driver.get(self.base_url)
# 驗(yàn)證標(biāo)題
self.assertEqual(driver.title, u"百度一下,你就知道")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys(u"開(kāi)源優(yōu)測(cè)")
driver.find_element_by_id("su").click()
sleep(3)
# 驗(yàn)證搜索結(jié)果標(biāo)題
self.assertEqual(driver.title, u"開(kāi)源優(yōu)測(cè)_百度搜索")
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
testunit = unittest.TestSuite()
testunit.addTest(BaiduTest('test_baidu_search'))
# 定義報(bào)告輸出路徑
htmlPath = u"testReport.html"
fp = file(htmlPath, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
title=u"百度測(cè)試",
description=u"測(cè)試用例結(jié)果")
runner.run(testunit)
fp.close()
代碼解釋
總體上代碼分為五大塊
- 文件保存編碼及作者定義
#-*- coding:utf-8 -*-
__author__ = u'苦葉子'
- 導(dǎo)入相關(guān)基礎(chǔ)模塊
# 從selenium中導(dǎo)入webdriver模塊
from selenium import webdriver
# 導(dǎo)入unittest模塊碳蛋,作為用例基類(lèi)
import unittest
# 導(dǎo)入html報(bào)告生成模塊,用于html格式報(bào)告生成
import HTMLTestRunner
# 導(dǎo)入sys模塊
import sys
# 導(dǎo)入sleep模塊省咨,用于強(qiáng)制等待
from time import sleep
- 設(shè)置當(dāng)前python運(yùn)行環(huán)境為utf8
# 設(shè)置當(dāng)前python運(yùn)行在utf-8編碼下肃弟,這樣你的中文就不會(huì)亂碼了
reload(sys)
sys.setdefaultencoding("utf-8")
- 定義和實(shí)現(xiàn)測(cè)試用例
# 從unittest.TestCase繼承
class BaiduTest(unittest.TestCase):
"""百度首頁(yè)搜索測(cè)試用例"""
# 用例級(jí)初始化函數(shù),自動(dòng)執(zhí)行
def setUp(self):
# 初始化基于IE瀏覽器的webdriver實(shí)例
self.driver = webdriver.Ie()
# 給當(dāng)前webdriver設(shè)置全局隱性等待時(shí)間零蓉,最大30s
self.driver.implicitly_wait(30)
# 設(shè)置首頁(yè)url
self.base_url = u"http://www.baidu.com"
def test_baidu_search(self):
# 簡(jiǎn)單賦值笤受,這樣在本測(cè)試中后續(xù)就不用每次都寫(xiě)self.driver,
# 少寫(xiě)幾個(gè)字符壁公, 都是為了偷懶啊??
driver = self.driver
# 在控制臺(tái)打印輸出
print u"開(kāi)始[case_0001]百度搜索"
# 啟動(dòng)瀏覽器感论,并訪問(wèn)首頁(yè)
driver.get(self.base_url)
# 驗(yàn)證標(biāo)題
self.assertEqual(driver.title, u"百度一下,你就知道")
# 清理搜索輸入框中的數(shù)據(jù)
driver.find_element_by_id("kw").clear()
# 在搜索輸入框中輸入 開(kāi)源優(yōu)測(cè)
driver.find_element_by_id("kw").send_keys(u"開(kāi)源優(yōu)測(cè)")
# 單擊 百度一下 按鈕
driver.find_element_by_id("su").click()
# 強(qiáng)制等3s
sleep(3)
# 驗(yàn)證搜索結(jié)果標(biāo)題
self.assertEqual(driver.title, u"開(kāi)源優(yōu)測(cè)_百度搜索")
# 用例級(jí)清理函數(shù)紊册,自動(dòng)執(zhí)行
def tearDown(self):
# 退出webdriver比肄,同時(shí)關(guān)閉當(dāng)前webdrier session下所有瀏覽器窗口
self.driver.quit()
- 測(cè)試腳本主運(yùn)行入口
# python main函數(shù)
if __name__ == '__main__':
# 初始化一個(gè)用例套件集
testunit = unittest.TestSuite()
# 往用例套件集新增一個(gè)測(cè)試
testunit.addTest(BaiduTest('test_baidu_search'))
# 定義報(bào)告輸出路徑,這里是當(dāng)前目錄
htmlPath = u"testReport.html"
# 打開(kāi)測(cè)試報(bào)告文件
fp = file(htmlPath, "wb")
# 構(gòu)建一個(gè)HTMLTestReport執(zhí)行器
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
title=u"百度測(cè)試",
description=u"測(cè)試用例結(jié)果")
# 運(yùn)行測(cè)試集
runner.run(testunit)
# 關(guān)閉打開(kāi)的測(cè)試報(bào)告文件
fp.close()
運(yùn)行代碼
使用以下命令運(yùn)行上述代碼
python first_webdriver.py
可以看到:
- 將啟動(dòng)瀏覽器訪問(wèn)百度首頁(yè)
- 在百度首頁(yè)搜索框中輸入了 開(kāi)源優(yōu)測(cè) 單擊了 百度一下 按鈕 顯示出搜索結(jié)果
- 閉關(guān)了瀏覽器
- 在當(dāng)前目錄下 生成了testReport.html的測(cè)試報(bào)告文件
總結(jié)
最后總結(jié)下囊陡,要注意的幾個(gè)關(guān)鍵點(diǎn):
- 確保要啟動(dòng)的瀏覽器的驅(qū)動(dòng)已經(jīng)下載好芳绩,具體在哪下載請(qǐng)參見(jiàn)上一章
- 確保下載了HTMLTestRunner模塊
- 最好自己把代碼一行行敲入一遍,不要直接拷貝運(yùn)行