数据驱动应用

 EXCEL写入以上数据,然后save as  baidu_data.CSV文件

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

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()
        time.sleep(2)

    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__":
    suit = unittest.TestSuite()
    suit.addTest(TestBaidu("test_search_selenium"))
    suit.addTest(TestBaidu("test_search_unittest"))
    suit.addTest(TestBaidu("test_search_parameterized"))
    
    now_time = time.strftime("%Y-%m-%d  %H_%M_%S")
    with open(now_time + " Baidu_search.html", "wb") as fp:
        runner = HTMLTestRunner(stream=fp,title="百度搜索测试报告",
                                description="运行环境:win10, Chrome浏览器")
        runner.run(suit)
        fp.close()

 二、通过 parameterized参数化

import unittest
from selenium import webdriver
import time
from HTMLTestRunner import HTMLTestRunner
from parameterized import parameterized

class TestBaidu(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.base_url = "https://www.baidu.com"
      
   
    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()
        time.sleep(2)

    #通过parameterized实现参数化
    @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 + "_百度搜索")

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

if __name__=="__main__":
    suit = unittest.TestSuite()
    #添加整个测试类
    suit.addTests(unittest.TestLoader().loadTestsFromTestCase(TestBaidu))
    now_time = time.strftime("%Y-%m-%d  %H_%M_%S")
    with open(now_time + " Baidu_search.html", "wb") as fp:
        runner = HTMLTestRunner(stream=fp,title="百度搜索测试报告",
                                description="运行环境:win10, Chrome浏览器",verbosity=2)
        runner.run(suit)
        fp.close()

= RESTART: C:UsersAdministratorAppDataLocalProgramsPythonPython38-32Baidu_search.py
ok test_search_0_case1 (__main__.TestBaidu)
ok test_search_1_case2 (__main__.TestBaidu)
ok test_search_2_case3 (__main__.TestBaidu)

二、 DDT(Data-Driver Tests)

1、测试类要通过@ddt 装饰器修饰

2、DDT提供列表、元组、字典形式参数化

3、DDT支持读取json文件

import unittest,time
from time import sleep
from selenium import webdriver
from ddt import ddt, data, file_data, unpack
from HTMLTestRunner import HTMLTestRunner

@ddt
class TestBaidu(unittest.TestCase):

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

    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)

    #参数化使用方式一
    @data(["case1", "selenium"], ["case2", "ddt"], ["case3", "python"])
    @unpack
    def test_search1(self,case, search_key):
        print("第一组测试用例:", case)
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + "_百度搜索")


    #参数化使用方式二
    @data(("case1", "selenium"), ("case2", "ddt"), ("case3","python"))
    @unpack
    def test_search2(self, case, search_key):
        print("第二组测试用例:", case)
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + "_百度搜索")

    #参数化方式三
    @data({"search_key":"selenium"},{"search_key":"ddt"},{"search_key":"python"})
    @unpack
    def test_search3(self, search_key):
        print("第三组测试用例:", search_key)
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + "_百度搜索")

    #参数化方式四:读取JSON文件
    @file_data('ddt_data.json') 
    def test_search4(self, search_key):
        print("第四组测试用例:", search_key)
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + "_百度搜索")
        

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

if __name__=="__main__":
    suit = unittest.TestSuite()
    suit.addTests(unittest.TestLoader().loadTestsFromTestCase(TestBaidu))
    now_time = time.strftime("%Y-%m-%d %H_%M_%S")
    with open(now_time + "baidu_search.html", "wb") as fp:
        runner = HTMLTestRunner(stream=fp,verbosity=2,title="百度搜索测试报告",
                                description="win10, chrome()")
        runner.run(suit)
        fp.close()

原文地址:https://www.cnblogs.com/yijierui/p/13526703.html