数据驱动的几种方式
1使用DDT实现数据驱动
2.使用Excel文件进行数据驱动
安装ddt模块
pip install ddt
下面是列表形式和字典形式
#列表形式
@data([1,"刘德华"],[2,"周杰伦"],[3,"张杰"])
#字典形式
@data({"search_id":1,"search_keys":"刘德华"},{"search_id":2,"search_keys":"刘德华"},{"search_id":3,"search_keys":"刘德华"})
from selenium import webdriver
from time import sleep
import unittest
from ddt import ddt,data,file_data,unpack
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
@ddt
#定义测试类
class TestBaidu(unittest.TestCase):
#定义类级别的前置条件,浏览器驱动对象
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome(ChromeDriverManager().install())
cls.url = "https://www.baidu.com"
@classmethod
#定义类级别的后置条件,退出浏览器
def tearDownClass(cls):
cls.driver.quit()
#定义一个方法实现百度搜索
def search(self,search_id,search_keys):
print("这是",search_id,"次搜索")
self.driver.get(self.url)
#定位到输入框输入关键词
self.driver.find_element(By.ID,"kw").send_keys(search_keys)
self.driver.find_element(By.ID,"su").click()
#列表形式
@data([1,"刘德华"],[2,"周杰伦"],[3,"张杰"])
#字典形式
# @data({"search_id":1,"search_keys":"刘德华"},{"search_id":2,"search_keys":"刘德华"},{"search_id":3,"search_keys":"刘德华"})
@unpack
def test_search(self,search_id,search_keys):
self.search(search_id,search_keys)
sleep(3)
#通过断言形式判断返回网页是否正确
self.assertEqual(self.driver.title,search_keys+"_百度搜索")
if __name__ == '__main__':
unittest.main()
DDT结合excel表格(针对大量数据)
1.安装第三方库openpyxl
![](https://i-blog.csdnimg.cn/blog_migrate/b7b35e535ae795ace2597c8906f5765e.png)
2.创建excel表格,将测试的数据保存
![](https://i-blog.csdnimg.cn/blog_migrate/506b0107492691b3ab004fc9754f97e3.png)
3.封装读取excel,ddt和excel结合
import openpyxl
from selenium import webdriver
from time import sleep
import unittest
from ddt import ddt,data,file_data,unpack
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
#定义方法读取数据
def read_data():
excel1 = openpyxl.load_workbook("data_test.xlsx")
sheet1 = excel1["Sheet1"]
#获取最大行号
rows = sheet1.max_row
#获取最大列数
cols = sheet1.max_column
#定义一个列表来存储表单数据
list_datas = []
#循环遍历读取数据
for row in range(1,rows+1):
# 定义一个列表来存储一行数据
row_list = []
for col in range(1,cols+1):
#获取指定位置的值
row_list.append(sheet1.cell(row,col).value)
list_datas.append(row_list)
return list_datas
@ddt
#定义测试类
class TestBaidu(unittest.TestCase):
# 定义类级别的前置条件,浏览器驱动对象
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome(ChromeDriverManager().install())
cls.url = "https://www.baidu.com"
@classmethod
# 定义类级别的后置条件,退出浏览器
def tearDownClass(cls):
cls.driver.quit()
# 定义一个方法实现百度搜索
def search(self, search_id, search_keys):
print("这是", search_id, "次搜索")
self.driver.get(self.url)
# 定位到输入框输入关键词
self.driver.find_element(By.ID, "kw").send_keys(search_keys)
self.driver.find_element(By.ID, "su").click()
sleep(3)
@data(*read_data())
@unpack
def test_search_baidu(self, id,keys):
self.search(id,keys)
sleep(3)
# 通过断言形式判断返回网页是否正确
self.assertEqual(self.driver.title, keys + "_百度搜索")
if __name__ == '__main__':
unittest.main()