一、大致介绍:

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的更多相关文章

  1. Python 数据驱动 unittest + ddt

    一数据驱动测试的含义: 在百度百科上的解释是: 数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把测试对象看作一个黑盒子.利用黑盒测试法进行动态测试时,需要测试软件产 ...

  2. python-使用unittest和ddt实现数据驱动

    一.数据驱动的概念 相同测测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式成为数据驱动.测试框架使用unittest 和ddt模块相结合的方式 二.unittest ...

  3. 黑盒测试在App自动化测试中的应用

    黑盒测试在App自动化测试中的应用 不废话,直接来. 先说说什么是黑盒测试 黑盒测试,这里就说的是app功能测试,之前看到一个介绍说,就是在测试中,把测试对象看作一个黑盒子.利用黑盒测试法进行动态测试 ...

  4. 初步探究Android App API接口测试--实战

    一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...

  5. 通过实例介绍Android App自动化测试框架--Unittest

    1.为什么需要使用框架实现自动化测试 作为测试工程师,可能在代码能力上相比开发工程师要弱一点,所以我们在写脚本的时候就会相对容易的碰到更多的问题,如果有一个成熟的框架供给我们使用的话,可以帮助我们避免 ...

  6. python的数据驱动

    什么叫数据驱动? 登录用例 ->不用的用户名登录,但是自动化化脚本一样,虽然脚本相同,步骤相同,但是不同的用户名登录得出的数据是不一样的,于是就有了数据驱动,就是数据的改变驱动自动化测试的执行导 ...

  7. 3.抓包神器Fiddler简介(转载)

    转自:https://www.cnblogs.com/ailiailan/p/hanxiaobei.html 使用Fiddler的两个场景,1:客户端对服务端返回数据的容错:2:服务端对异常请求数据的 ...

  8. python - 接口自动化测试实战 - case1 - 再次优化版

    本次优化: 1.  各级分Package 2.  封装[ReadExcel]类 3.  封装[ReadConfig]类 4.  封装[GetLog]类 5.  引入ddt数据驱动测试,优化测试用例代码 ...

  9. 实战Rest API接口测试

    一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...

随机推荐

  1. Vue_(组件通讯)使用solt分发内容

    Vue特殊特性slot 传送门 有时候我们需要在自定义组件内书写一些内容,例如: <com-a> <h1>title</h1> </com-a> 如果想 ...

  2. Teamviewer解决许可证授权的问题

    提交商业用途表 https://www.teamviewer.com/zhCN/pricing/commercial-use/

  3. docker基础知识普及(一)

    背景 这篇内容是之前给部门同事培训时写的文档,旨在传达一些docker相关概念,有个基本印象,当然,以下内容都来自网络,我只是个搬运工.具体操作在下篇文章中 一.什么是docker? 1. Docke ...

  4. iOS真机调试之免费预配(Free provisioning)

    免费预配允许开发者在不加入Applec Developer Program的情况下,可以发布和测试App 注意:免费预配(Free Provisioning)与自动预配(Auto Provisioni ...

  5. js evenloop

    一.宏任务 vs 微任务 1.macrotask setTimeOut . setInterval . setImmediate . I/O . 各种callback.UI渲染等 优先级: 主代码块 ...

  6. Javascript和JQuery获取浏览器窗口各种尺寸

    原生JS 窗口尺寸: console.log('window.innerWidth = ' + window.innerWidth + '---window.innerHeight = ' + win ...

  7. Java之HSF搭建demo

    1.去阿里云官网下载Demo edas-app-demo.zip 2.下载Ali-Tomcat和Pandora,注意红色下面字体 a)下载 Ali-Tomcat,保存后解压至相应的目录(如:d:\wo ...

  8. Java学习之==>Java8 新特性详解

    一.简介 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.Java 8是 Java 自 Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库. ...

  9. 科学论文写作 Tips

    感觉还是课程中给的英文描述会比较好,所以笔记大多数还是以老师的原英文 PPT 为主 1 Steps in the Writing Process 如何开展论文写作以及各个步骤的时间分配 1-1 Pre ...

  10. iOS实现渐变颜色

    下面是我的两种实现: 1.直接图片展示,注意图片的变形问题; 2.用CAGradientLayer渐变颜色实现; 代码如下: // // ViewController.m // ImageStrenc ...