unittest框架数据驱动
一、目录
数据驱动概述
环境准备
使用unittest和ddt驱动
使用数据文件驱动
使用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 ddt
import unittest
@ddt.ddt
class DoubanTest(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@ddt.data([1,2,3,6],[2,3,4,9],[3,4,5,12])
# @ddt.data([1,2,3,6])
@ddt.unpack
def test_add(self,testdata1,testdata2,testdate3,exceptdata):
sum=0
sum=testdata1+testdata2+testdate3
self.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,time
import unittest
from selenium import webdriver
@ddt.ddt
class Douban(unittest.TestCase):
@classmethod
def setUpClass(self):
self.driver = webdriver.Chrome()
@classmethod
def 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.unpack
def 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
思路:
- 先获取excle文件的路径和文件名
- 获取表名
- 根据表的列和行读取数据
测试Excel文件


Excel_test.py
from openpyxl import load_workbook class 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_row def 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 dataList if __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 webdriver
from Excal_data.Excal_text import ParseExcel
import unittest,time,logging,traceback,ddt #初始化日志对象
logging.basicConfig(
#此处省略
)
excelPath = 'E:/data/测试数据.xlsx'
sheetName = '数据'
excel = ParseExcel(excelPath,sheetName) @ddt.ddt
class 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
<?xml version='1.0' encoding='utf-8'?>
<bookList type='technology'>
<book>
<name>钉钉</name>
<author>阿里</author>
</book>
<book>
<name>微信</name>
<author>腾讯</author>
</book>
</bookList>
XmlUtil.py
from xml.etree import ElementTree class ParseXML():
def __init__(self, xmlPath):
self.xmlPath = xmlPath def getRoot(self):
tree = ElementTree.parse(self.xmlPath)
return tree.getroot() def findNodeByName(self, parentNode, nodeName):
nodes = parentNode.findall(nodeName)
return nodes def 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.text
return childrenTextDict def getDataFromXml(self):
root = self.getRoot()
books = self.findNodeByName(root, "book")
dataList = []
for book in books:
childrenText = self.getNodeOfChildText(book)
dataList.append(childrenText)
return dataList if __name__ == '__main__':
xml = ParseXML("./TestData.xml")
datas = xml.getDataFromXml()
for i in datas:
print(i["name"])
XmlDriver.py
from selenium import webdriver
from XML_data.XmlUtil import ParseXML
from selenium.common.exceptions import NoSuchElementException
import 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.ddt
class 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获取数据 - 处理数据格式
准备:数据库相关准备和操作
环境准备
- 下载mysql安装包
- 设置用户名密码(user:root passwd:1234)
- 安装mysql for python插件
- 将下载好文件放在pip下
- 在cmd下切换至pip所在目录下
- 执行pip install mysql***.whl
- 安装完成后进入python,输入import MySQLdb
- 不报错即为安装成功
数据库操作


更改数据库host

数据库创建和表数据插入

操作数据库

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

关联对应数据表




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




获取数据处理

unittest框架数据驱动的更多相关文章
- Unittest框架+ddt数据驱动+HTMLTestRunner+sendmail(自动发送测试报告)+git+Jenkins
本次写的是针对有代码基础的,没基础建议先去学基础,以下所有描述内容都是我已经在公司项目实践成功的!仅供参考 整体思路: 1.接口自动化用的是Python中unittest框架 2.所有的测试数据用例存 ...
- unittest框架(三)unittest+yaml数据驱动
学习完了如何用yaml文件管理用例,如何进行单元测试,如何产生漂亮的测试报告,那么结合这几点,我们简单学习下unittest+yaml数据驱动来测试. 第一步:首先,我们建一个yaml文件,管理用例, ...
- selenium + python自动化测试unittest框架学习(一)selenium原理及应用
unittest框架的学习得益于虫师的<selenium+python自动化实践>这一书,该书讲得很详细,大家可以去看下,我也只学到一点点用于工作中,闲暇时记录下自己所学才能更加印象深刻. ...
- selenium-webdriver(python) (十六) --unittest 框架
学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试(一)----selen ...
- Selenium2+python自动化30-引入unittest框架
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.com ...
- unittest 框架
unittest 框架 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试 ...
- unittest框架概要
unittest是Python语言自带的单元测试框架,原名PyUnit. 认识unittest 在unittest框架中有4个重要概念:test fixture.test case.test suit ...
- 接口登录CSDN发布博客---封装方法,使用unittest框架
一个简单的跑接口流程:登录后发表带图片的博客.这里涉及到的知识点: 1.登录时通过cookies去保持登录状态,把cookies添加到一个session中,这样可以保持长时间登录状态: 2.我们通过爬 ...
- 记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
- unittest框架(惨不忍睹低配版)
根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码: #login_test.py import requests class L ...
随机推荐
- spring boot创建多线程定时任务
@Component@EnableScheduling // 1.开启定时任务@EnableAsync // 2.开启多线程public class MultithreadScheduleTask { ...
- 青少年CTF-从尾看到头[WP]
一 题目描述 二 解题步骤 2.1第一层压缩包 压缩包打开提示出错 010editor中观察文件格式,文件尾明显观察到是正常压缩包的逆序,考虑逆序读取生成一个新的zip python代码 with o ...
- 解决移动H5页面的刷组造成件传值数据丢失问题
问题描述 当前页面由2个组件组成分别命名成a,b,其中组件b(子)需要组件a(父)内接口响应的时间字段,因为组件b不能实时的接收到数据 因此组件b在接收数据的时用定时器加了一个延迟,但是在网络不好或者 ...
- xxx.app 已损坏,无法打开,你应该将它移到废纸篓/打不开 xxx,因为它来自身份不明的开发者解决方法
xxx已损坏,无法打开,你应该将它移到废纸篓解决办法 打不开 xxx,因为它来自身份不明的开发者 打不开xxxx,因为 Apple 无法检查其是否包含恶意软件 在安装的时候提示加载失败! 解决: 打开 ...
- 【Linux】ArchLinux 使用之旅
主要参考以下两个链接进行,安装系统和安装桌面环境. 以官方Wiki的方式安装ArchLinux | viseator's blog ArchLinux安装后的必须配置与图形界面安装教程 | visea ...
- java传递参数调用python完成剪切多个视频最终拼接成一个
需求如题,综合考虑之后我选择python去做视频处理,最终结果也让我非常满意. 我是windows 环境,安装的python3.8和moviepy模块 第一步:安装python3.8 第二步:修改py ...
- 转发-》c++ stl multimap基本操作使用技巧详细介绍
c++ stl multimap基本操作使用技巧详细介绍 C++ stl Multimap 和C++ stl map 很相似,但是MultiMap允许重复的元素. C++ stl Multima ...
- 电脑安装不同版本的QT
系统:windows Qt版本:5.10/5.13 电脑中已经安装5.10版本的,安装5.13版本的不知道是否会出现问题,故此记录. 下载安装Qt5.13,安装过程跟之前版本的基本没差别,安装路径 D ...
- 通过 HDU 2048 来初步理解动态规划
HDU 2048 数塔 问题描述: 题目链接-点我查看题目 给出一个数塔,要求从顶层走到底层,每一步只能从高层走到相邻的低层节点,求经过的结点的数字之和最大是多少? 动态规划的定义 dynam ...
- idea主题插件 ->Atom Material File Icons
Atom Material File Icons 插件名