一、目录

  数据驱动概述
  环境准备
  使用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. 不需要鼠标交互的UI去掉RaycastTarget

    UI事件会在EventSystem在Update的Process触发.UGUI会遍历屏幕中所有RaycastTarget是true的UI,接着就会发射线,并且排序找到玩家最先触发的那个UI,在抛出事件 ...

  2. VMvare虚拟机的安装及新建虚拟机(一)

    a:hover { color: rgba(255, 102, 0, 1) } 一.VMvare虚拟机的安装 1.首先双击--你下载的安装包,这里我分享百度云盘,供大家下载:http://pan.ba ...

  3. 32位机转化11位手机号以及BLE与USB的切换

    目录 用现有的资源,去实现本应该用更多资源来实现的需求,是一件很有意思的事情.不是说提倡这样使用,而是换一种思路解决问题比较新奇,或是在很多限制既定的情况下可以应急. 比如说,582m芯片,默认用32 ...

  4. 阐述智能站变电站时钟同步系统(NTP时间同步服务器)的意义

    阐述智能站变电站时钟同步系统(NTP时间同步服务器)的意义 阐述智能站变电站时钟同步系统(NTP时间同步服务器)的意义 阐述观点只代表本人,如有疑问可加微 ahjzsz 1.概述 在现代电网中,统一的 ...

  5. 4-20mA换算为实际值公式

    Ov = [(Osh - Osl) * (Iv - Isl) / (Ish - Isl)] + Osl 实际工程量 = [((实际工程量)的高限 - (实际工程量)的低限)*(lv - 4) / (2 ...

  6. (三)用go实现平衡二叉树

    本篇,我们用go简单的实现平衡二叉查找树.具体原理参考大佬博客即可:AVL树(一)之 图文解析 和 C语言的实现 1.节点定义 type AVLNode struct{ data int height ...

  7. 关于WPF的圆角

    失败案例 <Border CornerRadius="3" Width="100" Height="100"> <Stac ...

  8. vue项目埋点实践,使用img发送埋点数据

    埋点数据种类:1.按钮点击2.页面切换(具体数据内容根据实际需求再定义)埋点数据交互:采用img的默认下载功能,发送get请求,带上埋点数据(此处后期需要加上加密)发送频率:1.固定时间2.固定数据量 ...

  9. FastJson JdbcRowSetImpl

    Java安全之FastJson JdbcRowSetImpl 链分析 利用限制 RMI利用的JDK版本≤ JDK 6u132.7u122.8u113 LADP利用JDK版本≤ 6u211 .7u201 ...

  10. hive在执行简单的insert命令也会卡在kill command

    终于解决了 我的配置有点问题,但在每次进入hive后,执行一遍   set hive.exec.mode.local.auto=true; 就可以用了 终于,困扰我三四天的问题解决了