一、大致介绍:

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. Inter IPP 处理图像数据的方法

    Inter IPP没有读取图片和保存图片的函数,需要结合opencv完成这个功能. opencv读到图片以后逐个像素点赋值给IPP显然是不可取的,方法如下: int main(int argc, ch ...

  2. TCP 之 FIN_WAIT_2状态处理流程

    概述 在主动关闭方发送了FIN之后,进入FIN_WAIT_1状态,在此状态收到了ACK,则进入FIN_WAIT_2状态,而FIN_WAIT_2后续要做的工作是等待接收对端发过来的FIN包,并且发送AC ...

  3. LeetCode 6. Z字形变换(ZigZag Conversion)

    题目描述 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"P ...

  4. 用python绘制趋势图

    import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.image as mping #mping用于读取图片 import date ...

  5. 基本CSS布局二

    基本CSS布局二------基本页面布局二 /*主面板样式*/ #container { width:100%; margin:0px auto;/*主面板DIV居中*/ } /*顶部面板样式*/ # ...

  6. react 的定义组件(了解)

    react 中定义组件的方法 1. 定义组件 React.createClass() (被淘汰了) 定义组件中的函数 methods 的中的 this 统统指向 组件 2. 函数定义组件 定义的组件时 ...

  7. koa 基础(十五)cookie 设置中文

    1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...

  8. UEP的单步测试

    想起了单步测试,在这里就随便说说,本人在海颐软件工作,主要开发工具uep,这里简单说一下uep的单步测试step into;step over:step return.海颐封装的uep开发工具还是很容 ...

  9. Linux特点

    开放性 多用户 多任务 丰富的网络功能 可靠的系统安全 良好的可移植性 具有标准兼容性 良好的用户界面(命令界面,图形界面等) 出色的速度性能.

  10. spring Ioc/DI的理解

    学习spring的童鞋都知道,spring中有两个非常重要的点,Ioc(控制反转)与DI(依赖注入),对于初级玩家来说,这两个概念可能有点模棱两可的感觉,今天就谈下自己的一点理解,不足请多多指教!!! ...