一、目录

  数据驱动概述
  环境准备
  使用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

思路:

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

测试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获取数据 - 处理数据格式

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

环境准备

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

数据库操作

                更改数据库host

                          数据库创建和表数据插入

                            操作数据库

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

                            关联对应数据表

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

                              获取数据处理

unittest框架数据驱动的更多相关文章

  1. Unittest框架+ddt数据驱动+HTMLTestRunner+sendmail(自动发送测试报告)+git+Jenkins

    本次写的是针对有代码基础的,没基础建议先去学基础,以下所有描述内容都是我已经在公司项目实践成功的!仅供参考 整体思路: 1.接口自动化用的是Python中unittest框架 2.所有的测试数据用例存 ...

  2. unittest框架(三)unittest+yaml数据驱动

    学习完了如何用yaml文件管理用例,如何进行单元测试,如何产生漂亮的测试报告,那么结合这几点,我们简单学习下unittest+yaml数据驱动来测试. 第一步:首先,我们建一个yaml文件,管理用例, ...

  3. selenium + python自动化测试unittest框架学习(一)selenium原理及应用

    unittest框架的学习得益于虫师的<selenium+python自动化实践>这一书,该书讲得很详细,大家可以去看下,我也只学到一点点用于工作中,闲暇时记录下自己所学才能更加印象深刻. ...

  4. selenium-webdriver(python) (十六) --unittest 框架

    学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试(一)----selen ...

  5. Selenium2+python自动化30-引入unittest框架

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.com ...

  6. unittest 框架

    unittest 框架 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试 ...

  7. unittest框架概要

    unittest是Python语言自带的单元测试框架,原名PyUnit. 认识unittest 在unittest框架中有4个重要概念:test fixture.test case.test suit ...

  8. 接口登录CSDN发布博客---封装方法,使用unittest框架

    一个简单的跑接口流程:登录后发表带图片的博客.这里涉及到的知识点: 1.登录时通过cookies去保持登录状态,把cookies添加到一个session中,这样可以保持长时间登录状态: 2.我们通过爬 ...

  9. 记录python接口自动化测试--unittest框架基本应用(第二目)

    在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...

  10. unittest框架(惨不忍睹低配版)

    根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码: #login_test.py import requests class L ...

随机推荐

  1. spring boot创建多线程定时任务

    @Component@EnableScheduling // 1.开启定时任务@EnableAsync // 2.开启多线程public class MultithreadScheduleTask { ...

  2. 青少年CTF-从尾看到头[WP]

    一 题目描述 二 解题步骤 2.1第一层压缩包 压缩包打开提示出错 010editor中观察文件格式,文件尾明显观察到是正常压缩包的逆序,考虑逆序读取生成一个新的zip python代码 with o ...

  3. 解决移动H5页面的刷组造成件传值数据丢失问题

    问题描述 当前页面由2个组件组成分别命名成a,b,其中组件b(子)需要组件a(父)内接口响应的时间字段,因为组件b不能实时的接收到数据 因此组件b在接收数据的时用定时器加了一个延迟,但是在网络不好或者 ...

  4. xxx.app 已损坏,无法打开,你应该将它移到废纸篓/打不开 xxx,因为它来自身份不明的开发者解决方法

    xxx已损坏,无法打开,你应该将它移到废纸篓解决办法 打不开 xxx,因为它来自身份不明的开发者 打不开xxxx,因为 Apple 无法检查其是否包含恶意软件 在安装的时候提示加载失败! 解决: 打开 ...

  5. 【Linux】ArchLinux 使用之旅

    主要参考以下两个链接进行,安装系统和安装桌面环境. 以官方Wiki的方式安装ArchLinux | viseator's blog ArchLinux安装后的必须配置与图形界面安装教程 | visea ...

  6. java传递参数调用python完成剪切多个视频最终拼接成一个

    需求如题,综合考虑之后我选择python去做视频处理,最终结果也让我非常满意. 我是windows 环境,安装的python3.8和moviepy模块 第一步:安装python3.8 第二步:修改py ...

  7. 转发-》c++ stl multimap基本操作使用技巧详细介绍

    c++ stl multimap基本操作使用技巧详细介绍 C++ stl  Multimap 和C++ stl  map 很相似,但是MultiMap允许重复的元素. C++ stl  Multima ...

  8. 电脑安装不同版本的QT

    系统:windows Qt版本:5.10/5.13 电脑中已经安装5.10版本的,安装5.13版本的不知道是否会出现问题,故此记录. 下载安装Qt5.13,安装过程跟之前版本的基本没差别,安装路径 D ...

  9. 通过 HDU 2048 来初步理解动态规划

    HDU 2048 数塔 问题描述: 题目链接-点我查看题目   给出一个数塔,要求从顶层走到底层,每一步只能从高层走到相邻的低层节点,求经过的结点的数字之和最大是多少? 动态规划的定义   dynam ...

  10. idea主题插件 ->Atom Material File Icons

    Atom Material File Icons    插件名