一、目录

  数据驱动概述
  环境准备
  使用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. MS14-064/CVE-2014-6332漏洞复现(OLE远程代码执行漏洞、IE浏览器漏洞)

    漏洞介绍:MS14-064 Microsoft Internet Explorer Windows OLE Automation Array Remote Code Execution,主要利用IE浏 ...

  2. 不是用第三方插件,用JS 解析 excel 文件

    参考:https://juejin.cn/post/7154395040507232264 excel 表格文件到底是什么 首先要解析 excel 文件,得先了解他是如何存储数据的,经过我百般搜索,终 ...

  3. JS 替代eval方法

  4. PDF.JS 预览pdf文件,中文不显示问题

    pdf.js 下载路径 http://mozilla.github.io/pdf.js/ pdf.js的使用不多说,网上都有 讲一下,.NET CORE MVC的使用遇到的问题 1. 将下载文件解压放 ...

  5. pip 下载换源

    命令:[pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple]

  6. QT使用中出现的问题

    1.运行程序程序弹出The CDB process terminated 2.调试弹出窗口提示缺少qtcreatorcdbext.dll 1.运行程序程序弹出The CDB process termi ...

  7. HIVE- lag函数和lead函数

    select date_flag,category_flag,field,LAG(filed, 1) OVER (PARTITION BY category_flag ORDER BY date_fl ...

  8. Blockchain for Edge of Things: Applications, Opportunities, and Challenges

    物联网:物联网设备,如传感器和手机,负责从物理环境中生成或收集数据,然后通过接入点或基站传输到附近的边缘服务器(ES).具有某些资源的物联网设备(例如,智能手机和笔记本电脑)可以充当移动区块链实体进行 ...

  9. Jupyter notebook upload无法加载本地ipynb文件

    可能是本地浏览器(IE)问题,修改默认浏览器.

  10. K8s validating data: the server could not find the requested resource ... with --validate=false

    转载: https://blog.csdn.net/yangchao1125/article/details/106193107/