一、前言:

阅读此文之前请先阅读:

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

​二、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文件实现数据驱动。

因内容太多,这里对json和yaml文件的读取就先不帖出来了,如果你觉得此文对你有帮助,如果你对此文有任何疑问,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣请拉到最上面关注笔者的名字!

一箭三雕:如果你觉得本文对你有帮助,请关注,赞同,分享三连!谢谢!

作者出处:逍遥子:[ddt02篇]十年测试老鸟帮您解析:ddt结合excel,csv,mysql实现自动化测试数据驱动

转载声明:欢迎转载,但未经作者同意请保留此段声明,并在文章明显位置给出原文链接。

mysql数据驱动测试_[ddt02篇]十年测试老鸟帮您解析:ddt结合excel,csv,mysql实现自动化测试数据驱动...相关推荐

  1. 左右声道测试_小说:少年参加测试,直接挑战十只狗恐兽,众人见了惊呼:SS级...

    穿过那个奇怪的走廊,韩意将那个队长给他的卡交给了走廊尽头转角边上的与刚才那几个人穿着一样,十六七岁左右,一脸浓妆,身材那是该挺的挺,该翘的翘,在加上那一抹媚笑,让整个看起来有些不伦不类的女子. 原本对 ...

  2. 什么是端到端训练测试_为什么端到端测试对您的团队很重要

    什么是端到端训练测试 by Phong Huynh 由Phong Huynh 为什么端到端测试对您的团队很重要 (Why End-to-End Testing is Important for You ...

  3. ddr老化测试_塑胶类材料老化测试(Aging Test )常用的测试标准

    材料或者产品的老化目前已经越来越被关注,在日常生活中我们也会经常会碰到,一些涂料在户外使用过程中出现变色.起泡.粉化之类的现象:一些家电外壳如空调的白色外壳,使用一段时间会变黄,同时性能也变差,很容易 ...

  4. mysql脚本解读_一篇很好的关于mysqld_safe脚本源码解读的文章,收藏了!!

    #!/bin/sh# 一些状态变量的定义 KILL_MYSQLD=1; # 试图kill多余的mysqld_safe程序,1表示需要kill MYSQLD=# mysqld二进制可执行文件的名称 ni ...

  5. mysql在线主从复制_一篇搞懂MySQL 8.0 Clone技术在线搭建主从复制全过程

    墨墨导读:MySQL从8.0.17开始新增了克隆Clone技术,可以在线进行MySQL的本地克隆或远程克隆,从此搭建从库可以不再需要备份工具来实现了,本文分享Clone技术在线搭建主从复制全过程,希望 ...

  6. 实用盘点 十大mysql开发工具_细数十大你不得不用的MySQL开发工具

    SQLyog SQLyog是一个MySQL数据库全能管理工具.其社区版为自由及开源软件,遵循GPL许可协议.开发者在使用MySQL时所需的多数功能都可以通过简单的点击鼠标完成,通过标签界面可以查看查询 ...

  7. a/b测试_如何进行A / B测试?

    a/b测试 The idea of A/B testing is to present different content to different variants (user groups), g ...

  8. 随心测试_软测基础_005 测试人员工作内容

    接上篇:清楚了_测试人员的工作职责范围,那每项测试活动的具体工作内容有哪些呢? Q1:如何理解测试工程师的工作内容? A1:SX的观点:综合一体化 现如今互联网行业高速发展,每一项IT职业的工作职责与 ...

  9. camera客观测试_光学图像测试之屏幕色彩管理测试

    作者简介:SongZi,紫光展锐高级光学测试工程师,有近十年的测试经验,负责camera影像.Display相关的测试方案落地.擅长测试方案设计.用户体验研究.数据分析与呈现等. 所谓屏幕色彩管理(简 ...

  10. spock测试_将Spock 1.3测试迁移到Spock 2.0

    spock测试 了解Spock 2.0 M1(基于JUnit 5)的期望,如何在Gradle和Maven中迁移到它以及为什么报告发现的问题很重要:). 重要说明 . 我绝对不建议您永久将您的现实项目迁 ...

最新文章

  1. 1小时学会:最简单的iOS直播推流(十一)spspps和AudioSpecificConfig介绍(完结)
  2. 关于JS闭包一篇不错的文章记录下
  3. JavaScript基础初始时期分支(018)
  4. http 301 和 302的区别
  5. 如何处理SAP CRM错误消息the item category X is not permitted
  6. android 新的布局,Android新布局方式ConstraintLayout快速入门教程
  7. mac os qt项目编译_【Qt开发】第一个Qt程序Hello World!
  8. 用U盘安装Linux系统的简单方法
  9. window端口号被占用解决
  10. 清明节,如何用代码让网页变灰
  11. [转载] pickle:让python对象序列化
  12. Tomcat如果默认8080被占用修改端口号和查询端口号地址
  13. docker 拷贝镜像文件
  14. Struts2类型转换--浪曦视频第三讲
  15. iOS开发_UI_AutoLayout
  16. ArcCatalog连接ArcSDE连接报:unable to create new database connection file,permission is denied
  17. mysql调整specified key_MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法...
  18. Win11触摸键盘如何开启?
  19. [Android 4.4.4] Oppo Find7 MIUI 4.8.8 by crazyi
  20. 海思HI3516移植使用AP6181 BCM43362

热门文章

  1. Pyecharts绘制图表大全——柱形图
  2. [Unity] 二维洞穴地图随机生成
  3. [BZOJ3772]精神污染(主席树)
  4. vps和云主机哪个好
  5. 一本书读懂大数据时代
  6. 机器学习_第四天(线性回归+岭回归+逻辑回归)
  7. 我的地盘ol位置服务器拒绝怎么办,微信我的地盘ol等级划分详解 微信我的地盘ol等级怎么分...
  8. 信用评分模型详解(下)之 信用评分系统搭建
  9. 实验一 第1关:从自然数中取3个数进行组合之循环算法
  10. raster包—projectRaster函数