selenium-Python之unittest(一)

最近一段時間在寫測試框架–關鍵字和數據驅動的,後續完善一下會持續更新到博客裏面。
本篇博客是在寫框架的時候思考到的一個問題,如果不同文件中的成百上千個用例都需要執行呢,難道要一個一個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)

上面例子的測試目錄如下:
這裏寫圖片描述
test01.py

test02.py
run.py
這裏面推薦一篇博客,http://www.cnblogs.com/yufeihlf/p/5707929.html
我查資料的時候看到的,裏面對unittest的各個模塊的屬性的介紹還蠻多的,有需要的可以瞭解下,好東西,要分享!!!
我打算每篇博客以後帶一張圖,爲博客增添的色彩,不要那麼枯燥,本篇博客上一張我去青海和我家狗子的圖片,不多說,上圖!
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章