引入DDT
一、大致介绍:
DDT-Data Driven Test 是Python的第三方库,提供了创建数据驱动的测试,在线安装为:pip install ddt
@data 表示元祖的列表数据
@unpack 表示解压列表里的数据到各个参数
from ddt import *
二、DDT的使用条件
ddt只适合测试用例里的测试步骤一致的,比如登录页,输入账户--输入密码--点击登录
以百度登录为例,测试用例代码
文件目录如下:

首先是webDri.py
#!/usr/bin/env python
#-*-coding:utf-8-*-
from selenium.common.exceptions import NoSuchElementException
import time class webDri(): def driver(self,driver):
self.driver=driver def findelement(self,*loc):
try:
return self.driver.find_element(*loc)
except NoSuchElementException as e:
print 'error details is %s'%(e.args[0]) def findelements(self,*loc):
try:
return self.driver.find_elements(*loc)
except NoSuchElementException as e:
print 'error details is %s'%(e.args[0])
对象层init.py
#!/usr/bin/env python
#-*-coding:utf-8-*- from selenium import webdriver
import unittest class init(unittest.TestCase): def setUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://www.baidu.com/') def tearDown(self):
self.driver.quit()
对象层loginpage.py,跟以前的区别是,创建了一个login方法,封装了点登录链接、输入账户、输入密码、点登录按钮操作
#!/usr/bin/env python
#-*-coding:utf-8-*-
from selenium.webdriver.common.by import By
from webDDT.basePage.webDri import * class login(webDri): loginlink_loc=(By.LINK_TEXT,u'登录')
username_loc = (By.ID, 'TANGRAM__PSP_10__userName')
password_loc = (By.ID, 'TANGRAM__PSP_10__password')
loginButton_loc = (By.ID, 'TANGRAM__PSP_10__submit')
error_loc = (By.ID, 'TANGRAM__PSP_10__error') def clickLogin(self):
self.findelement(*self.loginlink_loc).click() def typeUsername(self, username):
self.findelement(*self.username_loc).send_keys(username) def typePassword(self, password):
self.findelement(*self.password_loc).send_keys(password) def clickLoginButton(self):
self.findelement(*self.loginButton_loc).click() def login(self, username, password):
self.clickLogin()
self.typeUsername(username)
self.typePassword(password)
self.clickLoginButton() @property
def getError(self):
return self.findelement(*self.error_loc).text
测试层,loginTest.py, 演示引入DDT
import unittest
from webDDT.pageOBJ.init import *
from webDDT.pageOBJ.loginPage import *
from ddt import * @ddt
class loginDdt(init,login):
@data(('','',u'请您输入手机/邮箱/用户名'),('','',u'请您输入密码'),('','',u'请您输入验证码'))
@unpack
def test_all(self,name,pw,error):
self.login(name,pw)
self.assertEqual(self.getError,error) if __name__=='__main__':
unittest.main(verbosity=2)
将测试代码中的测试数据data的列表分离出去
写一个helper.py文件,读取list的值
def readlists():
lists=[
['','',u'请您输入手机/邮箱/用户名'],
['admin','',u'请您输入密码'],
['','admin',u'请您输入手机/邮箱/用户名']]
return lists
修改后的loginTest.py
@ddt
class loginDdt(init,login):
@data(*helper.readlist())
@unpack
def test_all(self,name,pw,error):
self.login(name,pw)
self.assertEqual(self.getError,error) if __name__=='__main__':
unittest.main(verbosity=2)
引入DDT的更多相关文章
- Python 数据驱动 unittest + ddt
一数据驱动测试的含义: 在百度百科上的解释是: 数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把测试对象看作一个黑盒子.利用黑盒测试法进行动态测试时,需要测试软件产 ...
- python-使用unittest和ddt实现数据驱动
一.数据驱动的概念 相同测测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式成为数据驱动.测试框架使用unittest 和ddt模块相结合的方式 二.unittest ...
- 黑盒测试在App自动化测试中的应用
黑盒测试在App自动化测试中的应用 不废话,直接来. 先说说什么是黑盒测试 黑盒测试,这里就说的是app功能测试,之前看到一个介绍说,就是在测试中,把测试对象看作一个黑盒子.利用黑盒测试法进行动态测试 ...
- 初步探究Android App API接口测试--实战
一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...
- 通过实例介绍Android App自动化测试框架--Unittest
1.为什么需要使用框架实现自动化测试 作为测试工程师,可能在代码能力上相比开发工程师要弱一点,所以我们在写脚本的时候就会相对容易的碰到更多的问题,如果有一个成熟的框架供给我们使用的话,可以帮助我们避免 ...
- python的数据驱动
什么叫数据驱动? 登录用例 ->不用的用户名登录,但是自动化化脚本一样,虽然脚本相同,步骤相同,但是不同的用户名登录得出的数据是不一样的,于是就有了数据驱动,就是数据的改变驱动自动化测试的执行导 ...
- 3.抓包神器Fiddler简介(转载)
转自:https://www.cnblogs.com/ailiailan/p/hanxiaobei.html 使用Fiddler的两个场景,1:客户端对服务端返回数据的容错:2:服务端对异常请求数据的 ...
- python - 接口自动化测试实战 - case1 - 再次优化版
本次优化: 1. 各级分Package 2. 封装[ReadExcel]类 3. 封装[ReadConfig]类 4. 封装[GetLog]类 5. 引入ddt数据驱动测试,优化测试用例代码 ...
- 实战Rest API接口测试
一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...
随机推荐
- 【React自制全家桶】二、分析React的虚拟DOM和Diff算法
一.React如何更新DOM内容: 1. 获取state 数据 2. 获取JSX模版 3. 通过数据 +模版结合,生成真实的DOM, 来显示,以下行代码为例(简称代码1) <div id= ...
- python 学习笔记(二):为元组的每个元素命名,提高程序的可读性
在程序中有些数据为固定格式时,即字段数量确定.字段位置顺序确定不变,我们就可以用元组来储存.使用元组的优势是储存空间很小,访问速度也很快.如下代码对每个学生信息用元组来表示: # ('Jim', 16 ...
- Redis 几个类型常用命令
Redis 字符串(String) 下表列出了常用的 redis 字符串命令: 序号 命令及描述1 SET key value 设置指定 key 的值2 GET key 获取指定 key 的值.3 G ...
- 虚拟环境mkvirtualenv
python虚拟环境mkvirtualenv使用 安装virtualenvwrapper pip install virtualenvwrapper 修改默认虚拟环境目录: 环境变量中新建: ...
- debian系统安装vsftpd服务端和ftp客户端
一.服务器安装和配置 1.安装vsftpd.(此处切换到su权限下了.其它用户请使用sudo权限,没有sudo权限的看前面的教程进行安装) apt-get install vsftpd 2.配置vsf ...
- golang(10)interface应用和复习
原文链接 http://www.limerence2017.com/2019/10/11/golang15/ interface 意义? golang 为什么要创造interface这种机制呢?我个人 ...
- 【.NET】Browser Link: Failed to deserialize JSON in Browser Link call
问题 VS2013中调试程序发现,在浏览器控制台输出如下截图代码:
- 对于MVVM的理解
MVVM 是Model-View-ViewModel的缩写. Model 代表数据模型,也可以在model中定义数据修改和操作的业务逻辑. View 代表UI组件,负责姜黄素局模型转化成UI展现出来. ...
- 利用Fiddler-ImageView识别图像信息及优化图像
一般情况下,我们用Fiddler来拦截修改数据包,分析数据包,但很少拿它来分析图片. Fiddler里的ImageView视图不仅仅能显示图片,还能解析图片里包含的信息,比如帧数,图片修改时间,版权信 ...
- PYTHON TDD学习(一)-->Python 3.4版本环境安装Django及其启动
1.安装Python3.4版本,原因:3.4及其以后版本默认自带pip工具,非常好用 2.django 安装命令(c:\Python34\Scripts):pip install django 3.s ...