一、前言:

阅读此文之前请先阅读:

[ddt01篇]十年测试老鸟帮您解析:ddt数据驱动入门基础应用:https://www.cnblogs.com/csmashang/p/12679448.html

二、ddt数据驱动框架结合txt文件实现数据驱动

test_demo.py代码如下:

import unittest
from ddt import ddt, data, unpack #读取txt文件中的内容,strip()方法去掉首位的指定字符。
def read_txt():
list = []
file = open('param.txt','r',encoding='utf-8')
for line in file.readlines():
list.append(line.strip('\n').split(','))
return list @ddt
class aaa(unittest.TestCase):
def setUp(self):
pass @data(*read_txt())
def test1_data(self,args1):
print(args1) def tearDown(self):
pass if __name__ == '__main__':
unittest.main()

param.txt文件中内容如下:

诸葛,司马
马超,关羽

三、使用ddt结合excel(.csv格式也可以)文件实现数据驱动

test_demo.py代码如下:

import time
import unittest
import ddt
from selenium import webdriver
from selenium.webdriver.common.by import By
from a.excel_util import ExcelUtil @ddt.ddt
class TestDemo(unittest.TestCase): eu = ExcelUtil() def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.get("https://www.baidu.com")
self.driver.maximize_window()
self.driver.implicitly_wait(10) @ddt.data(*eu.read_excel("D:\\testdata.xlsx","Sheet1"))
def test_data_driver_by_jsonfile(self,value):
try:
testData,expectData = tuple(value)
self.driver.find_element(By.ID,"kw").send_keys(testData)
time.sleep(3)
self.driver.find_element(By.ID,"su").click()
time.sleep(5)
self.assertTrue(expectData in self.driver.page_source)
except:
print("搜索:%s,期望:%s,失败"%(testData,expectData))
pass
else:
print("搜索:%s,期望:%s,通过"%(testData,expectData))
pass def tearDown(self) -> None:
self.driver.quit() if __name__ == '__main__':
unittest.main()

excel_util.py读取excel(csv)数据文件如下:

import xlrd
class ExcelUtil:
#读取excel数据
def read_excel(self,excel_path,sheet_name):
xls = xlrd.open_workbook(excel_path)
sheet = xls.sheet_by_name(sheet_name)
dataList=[]
for line in range(1,sheet.nrows):
tempList = []
tempList.append(sheet.cell_value(line,1))
tempList.append(sheet.cell_value(line,2))
dataList.append(tempList)
return dataList if __name__ == '__main__':
data = ExcelUtil().read_excel("d:\\testdata.xlsx","Sheet1")
print(data)

D:\\testdata.xlsx文件中Sheet1的工作表内容如下:

实例讲解:@ddt.data()从eu.read_excel("D:\\testdata.xlsx","Sheet1")方法中接收一个可迭代的数组对象,以此来判断需要执行的次数。如果@ddt.data()括号中传的是一个方法,方法前需要加星号(*)修饰。*表示出掉最外层的括号。

四、使用ddt结合mysql数据库进行数据驱动

1.在dos窗口安装pymysql模块来操作数据库。命令:pip install pymysql

2.安装mysql数据库(安装过程省略),创建database.py文件,使用pymysql创建数据库datadriver,创建表testdata,并向testdata表中插入三条数据。

database.py代码如下:

import time
import pymysql as pymysql class DataBase:
#删除datadriver数据库的SQL语句
drop_database = " drop database if exists datadriver;"
#创建datadriver的SQL语句:
create_database = "create database datadriver default charset utf8 COLLATE utf8_general_ci;"
#创建testdata表的SQL语句:
create_table = """
create table testdata(
id int not null auto_increment comment '主键',
searchContent varchar(40) unique not null comment '百度搜索的内容',
assertContent varchar(30) not null comment '断言的内容',
primary key(id)
);
""" def __init__(self,host,port,username,password,db):
self.host = host
self.port = port
self.username = username
self.password = password
self.db = db #连接数据库创建数据库和表
def create_databse_and_table(self):
try:
#连接Mysql数据库。
conn = pymysql.connect(host=self.host,port=self.port,user=self.username,password=self.password)
#获取数据库游标
cur = conn.cursor()
#删除数据库
cur.execute(self.drop_database)
time.sleep(3)
#执行创建数据库的SQL语句
cur.execute(self.create_database)
time.sleep(3)
#选中创建好的datadriver数据库。
conn.select_db("datadriver")
#执行创建表的SQL语句
cur.execute(self.create_table)
# 提交操作
conn.commit()
except Exception:
raise
else:
cur.close() #关闭游标
conn.close() #关闭连接
print("创建数据库和表成功!") #插入数据
def insert_data(self):
try:
# 连接Mysql数据库。
conn = pymysql.connect(host=self.host, port=self.port, user=self.username, password=self.password,db=self.db)
# 获得数据库游标
cur = conn.cursor()
# 执行插入数据的SQL语句
sql = "insert into testdata(searchContent,assertContent) values(%s,%s)"
cur.executemany(sql,[('神奇动物在哪里','叶茨'),('疯狂动物城','霍华德'),('杜兰特','凯文')])
# 提交操作
conn.commit()
except Exception:
raise
else:
cur.close() # 关闭游标
conn.close() # 关闭连接
print("数据插入成功!") #查询数据
def select_data(self):
result = ""
try:
conn = pymysql.connect(host=self.host,port=self.port,user=self.username,password=self.password,db=self.db)
cur = conn.cursor()
cur.execute("select searchContent,assertContent from testdata;")
result=cur.fetchall()
except Exception:
raise
else:
cur.close() # 关闭游标
conn.close() # 关闭连接
print("数据查询成功!")
return result if __name__ == '__main__':
db = DataBase("localhost",3306,"root","admin","datadriver")
db.create_databse_and_table()
db.insert_data()
print(db.select_data())

注意事项:

# 以下代码连接Mysql数据库。最好使用关键字传参,否则可能会出现参数顺序问题,关键字包括:host,port,user,password,db

conn = pymysql.connect(host=self.host, port=self.port, user=self.username, password=self.password,db="datadriver")

#以下代码在传值时3306必须传数字类型,不能传入"3306"这种字符串类型。

db = DataBase("localhost",3306,"root","admin")

3.使用ddt结合mysql数据库进行数据驱动

test_demo.py文件内容如下:

import time
import unittest
import warnings
import ddt
from selenium import webdriver
from selenium.webdriver.common.by import By
from a.database import DataBase def get_data():
db = DataBase("localhost", 3306, "root", "admin","datadriver")
data = db.select_data()
return data @ddt.ddt
class TestDemo(unittest.TestCase):
def setUp(self) -> None:
warnings.simplefilter('ignore',ResourceWarning) #处理资源警告。
self.driver = webdriver.Chrome()
self.driver.get("https://www.baidu.com")
self.driver.maximize_window()
self.driver.implicitly_wait(10) @ddt.data(*get_data())
def test_data_driver_by_jsonfile(self,data):
try:
testData,expectData = data
self.driver.find_element(By.ID,"kw").send_keys(testData)
time.sleep(3)
self.driver.find_element(By.ID,"su").click()
time.sleep(5)
self.assertTrue(expectData in self.driver.page_source)
except:
print("搜索:%s,期望:%s,失败"%(testData,expectData))
pass
else:
print("搜索:%s,期望:%s,通过"%(testData,expectData))
pass def tearDown(self) -> None:
self.driver.quit() if __name__ == '__main__':
unittest.main()

案例讲解:get_data()方法用于调用database.py中的select_data()查询数据库中数据的方法。warnings.simplefilter('ignore',ResourceWarning)代码用于处理警告信息。

五、使用ddt中读取json/yaml文件实现数据驱动。

因内容太多,这里就不在详述了,如果你觉得此文对你有帮助,如果你想要获取[ddt中读取json/yaml文件实现数据驱动]的资料,如果你对软件测试、接口测试、自动化测试、
面试经验交流感兴趣欢迎加入:软件测试技术群:695458161,群里发放的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

作者:来自公众号:软测之家

出处:https://www.cnblogs.com/csmashang/p/12679477.html
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

[ddt02篇]十年测试老鸟帮您解析:ddt结合txt,excel,csv,mysql实现自动化测试数据驱动的更多相关文章

  1. [ddt01篇]十年测试老鸟帮您解析:ddt数据驱动实现自动化测试入门基础应用

    一.什么是DDT数据驱动框架 ​ 全称:data driver test数据驱动测试框架,可以完美的应用于unittest框架实现数据驱动.ddt使用简介: 1.测试数据为多个字典的list类型 2. ...

  2. 十年测试老鸟告诉你--自动化测试选JAVA还是选Python--写给还在迷茫中的朋友

    一.前言 Python和Java哪个更适合做自动化测试?这是很多测试工程师从功能跨入自动化纠结的问题,今天测试老鸟来带大家详细分析一下!写给还在迷茫中的朋友! 首先可以确认的是提出这个问题的肯定是一个 ...

  3. python自动化测试应用-第6篇(WEB测试)--Selenium元素篇

    篇6                            python自动化测试应用-Selenium基础篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),上一篇我们搭建好p ...

  4. 【RAC】 RAC For W2K8R2 安装--结尾篇(十)

    [RAC] RAC For W2K8R2 安装--结尾篇(十) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其 ...

  5. 第二十篇 Linux条件测试语句相关知识点介绍

      条件测试语句的格式如下: [ 条件表达式 ]        # 条件表达式两侧各有一个空格 按测试对象不同,条件测试语句共分为4中类型: 文件测试语句 逻辑测试语句 整数值比较语句 字符串比较语句 ...

  6. 1.入门篇十分钟了解Spring Cloud

    文章目录 Spring Cloud入门系列汇总 为什么需要学习Spring Cloud 什么是Spring Cloud 设计目标与优缺点 设计目标 优缺点 Spring Cloud发展前景 整体架构 ...

  7. java提高篇(十八)-----数组之一:认识JAVA数组

          噢,它明白了,河水既没有牛伯伯说的那么浅,也没有小松鼠说的那么深,只有自己亲自试过才知道!道听途说永远只能看到表明现象,只有亲自试过了,才知道它的深浅!!!!! 一.什么是数组      ...

  8. python自动化测试应用-第7篇(WEB测试)--Selenium进阶篇

    篇7                            python自动化测试应用-Selenium进阶篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),本篇文章将是我们介 ...

  9. 2018全球十大测试工具Top2 Katalon

    引言 由Capgemini,Sogeti和Micro Focus发布的2017-2018年世界质量报告中,Katalon超越老牌测试工具UFT(源自QTP)成为黑马新秀,在全球十大自动化测试工具中排名 ...

随机推荐

  1. .NET Conf: Xamarin专场会议3.23 开幕

    聚焦于 Xamarin 的 NET Conf 是一项免费的为期一天的直播活动,来自社区和.NET产品团队的演讲者正在使用Xamarin技术构建本机移动应用程序!Xamarin允许您使用C#(而不是Ja ...

  2. libfastcommon总结(〇)

    libfastcommon提供众多基础功能,该系列笔记将进行学习介绍. load_local_host_ip_addrs 进行加载主机上所有网卡的IPv4的地址. iniLoadFromFile 从文 ...

  3. Anaconda3环境下安装OpenCV(cv2)

    Anaconda3环境下安装OpenCV(cv2) 主要步骤 1 首先查看自己的Anaconda安装的python版本 2 下载相应的OpenCv.whl文件 3 使用cmd安装.whl文件 查看自己 ...

  4. seldom之数据驱动

    seldom之数据驱动 如果自动化某个功能,测试数据不一样而操作步骤是一样的,那么就可以使用参数化来节省测试代码. seldom是我在维护一个Web UI自动化测试框,这里跟大家分享seldom参数化 ...

  5. Android UI性能测试——使用 Systrace 查找问题

    一 官方文档翻译 官文地址:https://developer.android.com/studio/command-line/systrace systrace命令允许您在系统级别上收集和检查所有运 ...

  6. Vysor Pro1.9.3破解,连接 USB 数据线在电脑上远程控制 Android 手机平板/同步显示画面

    Vysor PRO 破解方法 1.下载Vysor Pro,   Vysor Pro下载地址 ,chrome版需要挂梯子. 下载后,能连接,但是清晰度太低,能使用的功能也很少,下面我们就开始来破解它. ...

  7. [剑指offer]62.圆圈中最后剩下的数字

    62.圆圈中最后剩下的数字 题目 0,1,...,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成 ...

  8. nmap加载nse脚本在内网渗透中的使用-上

    转载自:https://mp.weixin.qq.com/s/zEgHxJEOfaiYVZYmg7NnXA? 大多数情况下,大家都认为nmap只是一个扫描工具,而不把当成是一个渗透工具.nmap集成了 ...

  9. vue2源码分析:patch函数

    目录 1.patch函数的脉络 2.类vnode的设计 3.createPatch函数中的辅助函数和patch函数 4.源码运行展示(DEMO) 一.patch函数的脉络 首先梳理一下patch函数的 ...

  10. bzoj4693

    题意 bzoj 做法 结论1:对于\((X_1,X_2,...,X_k)\),其为红的充要条件为:令\(Y_i=X_i-1\),\(\prod\limits_{k=1}^K {\sum\limits_ ...