python+selenium九:ddt数据驱动
第一种,测试数据放在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数据驱动的更多相关文章
- Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构
1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...
- python自动化测试之DDT数据驱动
时隔已久,再次冒烟,自动化测试工作仍在继续,自动化测试中的数据驱动技术尤为重要,不然咋去实现数据分离呢,对吧,这里就简单介绍下与传统unittest自动化测试框架匹配的DDT数据驱动技术. 话不多说, ...
- python Unittest+excel+ddt数据驱动测试
#!user/bin/env python # coding=utf- # @Author : Dang # @Time : // : # @Email : @qq.com # @File : # @ ...
- python自动化测试中的数据驱动unittest+ddt
ddt是一个unittest的插件,用来实现uniitest的数据驱动 本文以python自动化测试中的数据驱动为原则,记录学习ddt的过程 一.数据的传递规则
- 基于Python的接口自动化-unittest测试框架和ddt数据驱动
引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...
- 【python】以souhu邮箱为例学习DDT数据驱动测试
前言 DDT(Data-Driven Tests)是针对 unittest 单元测试框架设计的扩展库.允许使用不同的测试数据来运行一个测试用例,并将其展示为多个测试用例.通俗理解为相同的测试脚本使用不 ...
- Python+Selenium笔记(九):操作警告和弹出框
#之前发的 driver.switch_to_alert() 这句虽然可以运行通过,但是会弹出警告信息(这种写法3.x不建议使用) 改成 driver.switch_to.alert就不会了. (一 ...
- python+unittest+ddt数据驱动进行接口自动化测试
所谓数据驱动测试,简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化,避 ...
- 如何快速掌握DDT数据驱动测试?
1.前言 (网盗概念^-^)相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动.(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用 ...
随机推荐
- php-fpm sock文件权限设置
在编译php-fpm时,若没有指定fpm用户,在配置文件中也没有指定用户,则sock文件会由root(启动php-fpm的用户)创建,其权限是srw-rw----. 而nginx一般由nginx用户启 ...
- MYCAT分库分表
一.整体架构 1.192.168.189.130:mysql master服务,两个数据库db_store.db_user,db_store做了主从复制 db_user: 用户表users为分片表 数 ...
- 学习windows编程 day5 之按键消息
case WM_KEYDOWN://带sys的按键消息大多是系统需要自己处理的,我们一般不需要,默认处理 //wParam 指定按键的虚拟键代码 //lParam 指定技术,扫描码,闲钱状态,转换状态 ...
- vue props的理解
vue用了这么久,今天发现父子组件还是傻傻的分不清,不过还好,今天终于搞懂了 vue中到底什么是父组件,什么是子组件 vue之props父子组件之间的谈话 简单的理解就是:使用的地方是父组件,定义的地 ...
- C#星夜拾遗之delegate示例
概念 delegate即委托.如果你使用过C++或者js中的回调函数,你会更容易明白一些.在异步操作中常常使用回调函数,例如在Ajax中,当HttpRequest执行异步请求时,就需要有一个状态改变时 ...
- for、foreach和Iterator区别及ConcurrentModificationException异常
(问:1.for.foreach和Iterator遍历有什么区别 2.遍历删除ConcurrentModificationException异常.) 1.在形式上 for的形式是 for(int ...
- 【C++ STL】Set和Multiset
1.结构 set和multiset会根据特定的排序原则将元素排序.两者不同之处在于,multisets允许元素重复,而set不允许重复. 只要是assignable.copyable.comparab ...
- C#中使用Application.AddMessageFilter(this)要手动释放
如题,要使用Application.RemoveMessageFilter(this);释放,如果不释放会造成很严重的内存泄漏.
- ICS Hack Tools
参考链接:http://icstraining.org/en/security-tools/configurations ICS-Security-Tool: https://github.com/I ...
- hadoop HA 配置 + zookeeper 服务注册
环境测试 6台机器 centos6.7 x64 master ( namenode/cluster ) 10.10.100.101 namenode1 10.10.100.105 namenode2 ...