目录

一、数据驱动概述

二、数据文件驱动

三、Excel驱动

四、XML驱动

五、MySQL驱动


一、数据驱动概述

数据驱动的定义:

  • 相同的测试脚本使用不同的测试数据来执行
  • 测试数据和测试行为完全分离
  • 是一种测试脚本设计模式

实施数据驱动测试步骤:

  • 编写测试脚本,脚本需要支持从程序对象、文件或数据库读入测试数据。
  • 将测试脚本使用测试数据存入程序对象、文件或数据库等外部介质中。
  • 运行脚本过程中,循环调用存储在外部介质中的测试数据。
  • 验证所有的测试结果是否符合预期结果。

安装:

在线安装

离线安装

下载安装包:https://pypi.python.org/pypi/ddt
在CMD中切换至解压后目录,执行python setup.py install

数据驱动使用说明:

  • 头部导入ddt模块(import ddt)
  • 在测试类前声明使用ddt(@ddt.ddt)
  • 在测试方法前使用@ddt.data()添加测试数据
  • 多组测试数据以逗号隔开如@ddt.data(1,2,3)
  • 每组数据中的数据与测试方法中定义的形参个数及顺序一一对应
  • 使用@ddt.unpack进行修饰
  • 测试过程中将测试数据传给测试方法中的形参。

实例:

import ddtimport unittest@ddt.ddtclass DoubanTest(unittest.TestCase):def setUp(self):passdef tearDown(self):pass@ddt.data([1,2,3,6],[2,3,4,9],[3,4,5,12]) # @ddt.data([1,2,3,6])@ddt.unpackdef test_add(self,testdata1,testdata2,testdate3,exceptdata):sum=0sum=testdata1+testdata2+testdate3self.assertEqual(sum,exceptdata)if __name__ =='__main__':unittest.main()

二、数据文件驱动

语法:@ddt.file_data(‘data.json’) 走data.json文件中获取数据

实例:

data.json
‘“data.json”’["QQ||QQ_百度搜索","微信||微信_百度搜索","钉钉||钉钉_百度搜索"]

run_test.py

import ddt,timeimport unittestfrom selenium import webdriver@ddt.ddtclass Douban(unittest.TestCase):@classmethoddef setUpClass(self):self.driver = webdriver.Chrome()@classmethoddef tearDownClass(self):self.driver.quit()def setUp(self):self.driver.get('http://www.baidu.com')def tearDown(self):pass@ddt.file_data('data.json')@ddt.unpackdef test_baidu(self,value):can,yu = value.split('||')print(can,yu)time.sleep(2)self.driver.find_element_by_id('kw').send_keys(can)time.sleep(2)self.driver.find_element_by_id('su').click()time.sleep(2)self.assertEqual(self.driver.title,yu)if __name__ == '__main__':unittest.main()

三、Excel驱动

安装:pip install openpyxl

思路:

  1. 先获取excle文件的路径和文件名
  2. 获取表名
  3. 根据表的列和行读取数据

测试Excel文件

Excel_test.py

from openpyxl import load_workbookclass ParseExcel():def __init__(self, excelPath, sheetName):self.wb = load_workbook(excelPath)self.sheet = self.wb.get_sheet_by_name(sheetName)self.maxRowNum = self.sheet.max_rowdef getDatasFromSheet(self):dataList = []for line in self.sheet.rows[1:]:tmpList=[]tmpList.append(line[0].value)tmpList.append(line[1].value)dataList.append(tmpList)#print(line)return dataListif __name__ == '__main__':excelPath='E:/data/测试数据.xlsx'sheetName = '数据'pe = ParseExcel(excelPath,sheetName)for i in pe.getDatasFromSheet():print(i[0])print(i[1])
DataDiver.py
from selenium import webdriverfrom Excal_data.Excal_text import ParseExcelimport unittest,time,logging,traceback,ddt#初始化日志对象logging.basicConfig(#此处省略)excelPath = 'E:/data/测试数据.xlsx'sheetName = '数据'excel = ParseExcel(excelPath,sheetName)@ddt.ddtclass TestDemo(unittest.TestCase):# def setUp(self):# self.driver = webdriver.Firefox()## def tearDown(self):# self.driver.quit()@ddt.data( * excel.getDatasFromSheet())def test_dataDrivenByFile(self,data):testData,expectData = tuple(data)print(testData,expectData) # 打印获取的两个数据# 根据上面的获得数据建立下面逻辑

四、XML驱动

安装:Python自带不用安装

TestData.XML

from xml.etree import ElementTreeclass ParseXML():def __init__(self, xmlPath):self.xmlPath = xmlPathdef getRoot(self):tree = ElementTree.parse(self.xmlPath)return tree.getroot()def findNodeByName(self, parentNode, nodeName):nodes = parentNode.findall(nodeName)return nodesdef getNodeOfChildText(self, node):childrenTextDict = {i.tag: i.text for i in list(node.iter())[1:]}# childrenTextDict={}# for i in list(node.iter())[1:]:# childrenTextDict[i.tag] = i.textreturn childrenTextDictdef getDataFromXml(self):root = self.getRoot()books = self.findNodeByName(root, "book")dataList = []for book in books:childrenText = self.getNodeOfChildText(book)dataList.append(childrenText)return dataListif __name__ == '__main__':xml = ParseXML("./TestData.xml")datas = xml.getDataFromXml()for i in datas:print(i["name"])

XmlDriver.py

from selenium import webdriverfrom XML_data.XmlUtil import ParseXMLfrom selenium.common.exceptions import NoSuchElementExceptionimport unittest,time,os,logging,traceback,ddt#初始化日志对象logging.basicConfig(#此处省略)currentPath = os.path.dirname(os.path.abspath(__file__))dataFilePath = os.path.join(currentPath,"TestData.xml")xml = ParseXML(dataFilePath)@ddt.ddtclass TestDemo(unittest.TestCase):# def setUp(self):# self.driver = webdriver.Firefox()## def tearDown(self):# self.driver.quit()@ddt.data( * xml.getDataFromXml())def test_dataDrivenByXML(self,data):testData,expectData = data["name"],data["author"]print(testData,expectData)# self.driver.get("http://www.baidu.com/")# time.sleep(3)## 根据上面的获得数据建立下面逻辑

五、MySQL驱动

思路:连接数据库 – 根据数据库的表获取数据 – unittest框架ddt获取数据 – 处理数据格式

准备:数据库相关准备和操作

环境准备

  1. 下载mysql安装包
  2. 设置用户名密码(user:root passwd:1234)
  3. 安装mysql for python插件
    •   将下载好文件放在pip下
    •   在cmd下切换至pip所在目录下
    •   执行pip install mysql***.whl
    •   安装完成后进入python,输入import MySQLdb
    •   不报错即为安装成功

数据库操作

更改数据库host

数据库创建和表数据插入

操作数据库

初始数据库变量,并启动对应方法

关联对应数据表

建立unittest框架驱动数据并处理

获取数据处理

B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)