Selenium3自動化測試——21.數據驅動應用

往往我們需要通過數據集合直接驅動應用,這裏通過循序漸進的三種方式來描述。

1. 通過csv獲取數據並驅動應用

baidu_data.csv文件如下:

name,search_key
case1,selenium
case2,unittest
case3,parameterized

 test1_baidu_data.py文件如下:

import csv
import codecs
import unittest
from time import sleep
from itertools import islice
from selenium import webdriver


class TestBaidu(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.base_url = "https://www.baidu.com"

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def baidu_search(self, search_key):
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys(search_key)
        self.driver.find_element_by_id("su").click()
        sleep(3)

    def test_search(self):
        with codecs.open('baidu_data.csv', 'r', 'utf_8_sig') as f:
            data = csv.reader(f)
            for line in islice(data, 1, None):
                search_key = line[1]
                self.baidu_search(search_key)


if __name__ == '__main__':
    unittest.main(verbosity=2)

結果:打開百度瀏覽器後,依次輸入關鍵字selenium,unittest,parameterized,依次得到三個搜索界面。

缺點:如果有一個數據沒有獲取到就會影響後續數據的解析。

2.將數據獲取後存儲到數組中,再創建不同測試方法使用數據

import csv
import codecs
import unittest
from time import sleep
from itertools import islice
from selenium import webdriver


class TestBaidu(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.base_url = "https://www.baidu.com"
        cls.test_data = []
        with codecs.open('baidu_data.csv', 'r', 'utf_8_sig') as f:
            data = csv.reader(f)
            for line in islice(data, 1, None):
                cls.test_data.append(line)

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def baidu_search(self, search_key):
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys(search_key)
        self.driver.find_element_by_id("su").click()
        sleep(3)

    def test_search_selenium(self):
        self.baidu_search(self.test_data[0][1])

    def test_search_unittest(self):
        self.baidu_search(self.test_data[1][1])

    def test_search_parameterized(self):
        self.baidu_search(self.test_data[2][1])


if __name__ == '__main__':
    unittest.main(verbosity=2)

結果:先測試parameterized--selenium--unittest

3. 使用Parameterized實現參數化

1)安裝parameterized

pip install parameterized

2)實現百度搜索的測試

import unittest
from time import sleep
from itertools import islice
from selenium import webdriver
from parameterized import parameterized


class TestBaidu(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.base_url = "https://www.baidu.com"

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def baidu_search(self, search_key):
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys(search_key)
        self.driver.find_element_by_id("su").click()
        sleep(2)

    # 通過Parameterized實現參數化,case1--定義測試用例的名稱,selenium--定義搜索的關鍵字
    @parameterized.expand([
        ("case1", "selenium"),
        ("case2", "unittest"),
        ("case3", "parameterized"),
    ])
    def test_search(self, name, search_key):
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + "_百度搜索")


if __name__ == '__main__':
    #執行更詳細的執行日誌
    unittest.main(verbosity=2)

步驟1)導入Parameterized

      2)通過@parameterized.expand()裝飾測試用例

      3)使用unittest的main方法,設置verbosity參數爲2,輸出更詳細的執行日誌。

得到的結果如下:

通過@parameterized.expand()中元組的個數來統計測試用例數,產生3條測試用例。

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