第一种,测试数据放在Excel里面

test_Login:

import unittest
import time
import ddt
import os
from selenium import webdriver
from SWYJR.common.readexcel import ExcelUtil
from SWYJR.encapsulation.LoginPage import Login # # 获取xlsx路径
# curpath = os.path.dirname(os.path.realpath(__file__))
# testxlsx = os.path.join(curpath, "demo_api.xlsx")
#
# # 复制demo_api.xlsx文件到report下
# report_path = os.path.join(os.path.dirname(curpath), "report")
# reportxlsx = os.path.join(report_path, "result.xlsx")
# sheetName = "登录"
# testdata = readexcel.ExcelUtil(testxlsx, sheetName).dict_data() excel = ExcelUtil("testdata.xlsx", "登录")
print(excel.dict_data())
datas = excel.dict_data() @ddt.ddt
class LogIn(unittest.TestCase):
''' 登录测试 ''' def setUp(self):
self.driver = webdriver.Firefox()
self.login = Login(self.driver)
self.login.login_before() # 调前置条件 def tearDown(self):
self.driver.quit() @ddt.data(*datas)
def test_login(self, data):
self.login.login(data['userName'], data['psw'])
self.text = self.login.exit_button()
self.assertIn(data['result'], self.text) if __name__ == "__main__":
unittest.main()

readExcel:

# coding:utf-8
import xlrd
class ExcelUtil(): def __init__(self, excelPath, sheetName):
#def __init__(self, excelPath, sheetName):
self.data = xlrd.open_workbook(excelPath)
self.table = self.data.sheet_by_name(sheetName)
# 获取第一行作为key值
self.keys = self.table.row_values(0)
# 获取总行数
self.rowNum = self.table.nrows
# 获取总列数
self.colNum = self.table.ncols def dict_data(self):
if self.rowNum <= 1:
print("总行数小于1")
else:
r = []
j=1
for i in range(self.rowNum-1):
s = {}
# 从第二行取对应values值
values = self.table.row_values(j)
for x in range(self.colNum):
s[self.keys[x]] = values[x]
r.append(s)
j+=1
return r if __name__ == "__main__":
# filepath = "D:\\test\\web-project\\5ke\\testdata.xlsx"
filepath = "E:\\testdata.xlsx"
sheetName = "登录"
data = ExcelUtil(filepath, sheetName)
print(data.dict_data())

第二种,搭建个数据库,测试数据放在数据库里面,如:MySQL(个人比较喜欢用数据库的方式做数据分离)

导入第三方库pymysql,进行二次封装

import unittest, ddt, urllib3
from interfaces.Process import login
from common.MySQL import MysqlUtil
urllib3.disable_warnings() # 拿测试数据
datas = MysqlUtil("SELECT explanation, userName, password, expect FROM Login").mysql_getrows()
# print(datas) @ddt.ddt
class LogIn(unittest.TestCase):
''' 登录测试 ''' @ddt.data(*datas)
def test_login(self, data):
''' 测试用例 '''
self.user = data[1]
print(f'\n用户名:{self.user}') self.password = data[2]
print(f'\n密码:{self.user}') loginResult = login(self.user, self.password)[0]
print(f'\n预期结果: {data[3]} \n执行结果: {loginResult}') self.assertEqual(loginResult, data[3]) if __name__=='__main__':
unittest.main()

python+selenium九:ddt数据驱动的更多相关文章

  1. Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

    1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...

  2. python自动化测试之DDT数据驱动

    时隔已久,再次冒烟,自动化测试工作仍在继续,自动化测试中的数据驱动技术尤为重要,不然咋去实现数据分离呢,对吧,这里就简单介绍下与传统unittest自动化测试框架匹配的DDT数据驱动技术. 话不多说, ...

  3. python Unittest+excel+ddt数据驱动测试

    #!user/bin/env python # coding=utf- # @Author : Dang # @Time : // : # @Email : @qq.com # @File : # @ ...

  4. python自动化测试中的数据驱动unittest+ddt

    ddt是一个unittest的插件,用来实现uniitest的数据驱动 本文以python自动化测试中的数据驱动为原则,记录学习ddt的过程 一.数据的传递规则

  5. 基于Python的接口自动化-unittest测试框架和ddt数据驱动

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  6. 【python】以souhu邮箱为例学习DDT数据驱动测试

    前言 DDT(Data-Driven Tests)是针对 unittest 单元测试框架设计的扩展库.允许使用不同的测试数据来运行一个测试用例,并将其展示为多个测试用例.通俗理解为相同的测试脚本使用不 ...

  7. Python+Selenium笔记(九):操作警告和弹出框

    #之前发的 driver.switch_to_alert() 这句虽然可以运行通过,但是会弹出警告信息(这种写法3.x不建议使用)  改成 driver.switch_to.alert就不会了. (一 ...

  8. python+unittest+ddt数据驱动进行接口自动化测试

    所谓数据驱动测试,简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化,避 ...

  9. 如何快速掌握DDT数据驱动测试?

    1.前言 (网盗概念^-^)相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动.(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用 ...

随机推荐

  1. Idea默认的全局设置,如Maven等

    每次使用IDEA打开一个新的项目,maven都需要重新配置,非常不开心,所以需要有个默认全局配置,打破不开心 配置完就OK了 公众号 欢迎关注我的公众号“码上开发”,每天分享最新技术资讯.最优原创文章 ...

  2. cdqz2017-test10-柚的策略(期望DP & 组合数学)

    根据期望的可加性,我们可以算出每一位客人的期望等待时间,将他们累加 即 每一位客人所有可能情况的时间之和 / n! 设S= 每一位客人所有可能情况的时间之和 如果有f(i,p)种方案使客人i是恰好第p ...

  3. Javaweb学习笔记——(三)——————JavaScript基础&DOM基础

    day031.js的String对象 **创建String对象 ***var str = "abc"; **方法和属性(文档) ***属性 lenth:字符串的长度 ***方法 ( ...

  4. Linux之Ubuntu无线网络配置

    无线网络使用问题: 0.插上有线网络电线与电脑NIC上. 1.set->系统设置->软件和更新->Ubuntu软件->下载自:   选择一个网络服务器地址(软件源)[http: ...

  5. HDU 1569 - 方格取数(2) - [最大点权独立集与最小点权覆盖集]

    嗯,这是关于最大点权独立集与最小点权覆盖集的姿势,很简单对吧,然后开始看题. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1569 Time Limi ...

  6. Centos7编译hadoop异常:Received fatal alert: handshake_failure

    保持网络畅通 或者 配置代理 能够访问cdh的仓库 https://repository.cloudera.com/artifactory/cloudera-repos/ 编译hadoop版本 had ...

  7. Sql server 查询某个时间段,分布有几周,几月和几日

    1. 查询:以“周”为单位 --查询以下时间段内分别有几周 --时间段:“2017-09-01”到“2017-10-1” select number as wknum from master..spt ...

  8. java先导课程学习总结

    经过两个星期四节课的java学习,我也对java这门语言有了一定的认识.刚开始上课的时候,我认为java把C语言中老师所说的模块化编程进行了强调,进行一个类,一个类的编程,在类中构造相应的方法,使用的 ...

  9. Navicat Premium连接各种数据库

    版本信息 Navicat Premium 是一套数据库开发工具,让你从单一应用程序中同时连接 MySQL.MariaDB.SQL Server.Oracle.PostgreSQL 和 SQLite 数 ...

  10. TypeError: view must be a callable or a list/tuple in the case of include()

    原文连接: http://www.imooc.com/qadetail/98920 我是这么写的就好了 from django.conf.urls import url from django.con ...