最近一段時間在寫測試框架–關鍵字和數據驅動的,後續完善一下會持續更新到博客裏面。
本篇博客是在寫框架的時候思考到的一個問題,如果不同文件中的成百上千個用例都需要執行呢,難道要一個一個py文件點擊去運行嗎?當然不能夠,selenium還是很貼心的,這一點早就爲大家想到了!通過unittest就可也以完美實現這個功能,那麼我和大家分享一下我的學習心得。
- 下面分享的內容是關於WEB的自動化測試。
用例部分:
通常包括三部分:
測試前準備setUp、測試用例testCase、測試後環境還原tearDown
例子:
test01.py
#encoding=utf-8
"""百度搜索"""
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
class BaiDuTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome(executable_path='c:\\Python27\\chromedriver')
self.wait=WebDriverWait(self.driver,10)
print 'BaiDuTest Start'
def test_baidu(self):
self.driver.get("https://www.baidu.com/")
sleep(1)
self.wait.until(lambda x: x.find_element("id", "kw")).send_keys('hello')
sleep(0.5)
self.wait.until(lambda x:x.find_element("id","su")).click()
sleep(1)
def tearDown(self):
self.driver.quit()
print "BaiDuTest Over"
if __name__=="__main__":
unittest.main()
test02.py
#encoding=utf-8
"""搜狗搜索"""
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
class SouGouTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome(executable_path='c:\\Python27\\chromedriver')
self.wait=WebDriverWait(self.driver,10)
print 'SouGouTest Start'
def test_sougou(self):
self.driver.get('https://www.sogou.com/')
sleep(1)
self.wait.until(lambda x:x.find_element("id","query")).send_keys('hello')
sleep(0.5)
self.wait.until(lambda x:x.find_element("id","stb")).click()
sleep(2)
def tearDown(self):
self.driver.quit()
print "SouGouTest Over"
if __name__=="__main__":
unittest.main()
這裏面,每個.py裏面都有一條測試用例:
test_sougou和test_baidu。
如何進行單元測試呢?——unittest.main()
該方法可以搜索到該模塊下的所有以test開頭的測試用例,並執行他們,但是執行順序是根據ASCII碼的順序加載測試用例,數字與字母的順序爲:0-9,A-Z,a-z。所以以A開頭的測試用例方法會優先執行,以a開頭會後執行。
還有一種執行方式,就是構造測試集合,往測試集合裏面添加測試用例,然後實例化TextTestRunner()類,用實例調用run方法,傳遞構造好的測試用例集合,這樣就可以一次性按照順序執行所有的想要執行的測試用例;
腳本如下:
test_for_run.py
#encoding=utf-8
from test import test01
from test import test02
import unittest
#構造測試集合
suite=unittest.TestSuite()
#方法一
#測試用例,哪個寫在列表前面,就被先執行,可以一條一條添加用例,也可以用列表的形式傳遞到測試集合裏面。
#【注意】一條一條添加是suite.addTest,用例列表添加是suite.addTests;
test_cases=[test01.BaiDuTest('test_baidu'),test02.SouGouTest('test_sougou')]
suite.addTests(test_cases)
#方法二:
suite.addTest(test02.SouGouTest('test_sougou'))
suite.addTest(test01.BaiDuTest('test_baidu'))
if __name__=="__main__":
#實例化TextTestRunner()類
runner=unittest.TextTestRunner()
#使用類TextTestRunner中的run方法運行測試套件(所要執行的所有測試用例)
runner.run(suite)
上面例子的測試目錄如下:
這裏面推薦一篇博客,http://www.cnblogs.com/yufeihlf/p/5707929.html
我查資料的時候看到的,裏面對unittest的各個模塊的屬性的介紹還蠻多的,有需要的可以瞭解下,好東西,要分享!!!
我打算每篇博客以後帶一張圖,爲博客增添的色彩,不要那麼枯燥,本篇博客上一張我去青海和我家狗子的圖片,不多說,上圖!