一、大致介绍:

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. MS14-068提权

    • Ms14- • 库 • https://github.com/bidord/pykek • ms14-.py -u user@lab.com -s userSID -d dc.lab.com • ...

  2. mongodb远程链接命令

    mongo 172.17.0.170:27017/spider_data -u admin -p 然后输入密码 切换数据库 use spider_data 查看所有表 show tables

  3. Spring Cloud Feign声明式服务调用(转载)+遇到的问题

    转载:原文 总结: 1.pom添加依赖 2.application中填写正确的eureka配置 3.启动项中增加注解 @EnableFeignClients 4.填写正确的调用接口 通过原文使用Fei ...

  4. light4j轻量级微服务应用

    最近对light-4j轻框架比较感兴趣,于是对现有应用做了一次重构,现将其间的一些点滴所得分享出来. 项目打包 pom.xml配置了两个profile:debug支持mvn exec:exec启动应用 ...

  5. win10无法连接windows服务器,无法连接SENS服务

    本文链接:https://blog.csdn.net/weixin_38374974/article/details/80475566 膜拜大佬 首先,进入windows界面的时候,前期加载速度变得极 ...

  6. LeetCode 134. 加油站(Gas Station)

    题目描述 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其 ...

  7. 3.MapReduce原理和Yarn

    1.MapReduce原理 2.MapReduce执行时间 3.MapReduce开发 4.Yarn

  8. Android Stuido中断点调试和高级调试

    写一个简单的调试程序 import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class M ...

  9. MySQL操作符与相关函数

    union(联合)union使用是关联两张表或者两个查询所查出来的数据,联合成一张表但不会出现重复数据,显示的字段必须匹配列数. select s3.id cid,s1.cityName provin ...

  10. 2019.11.06 【每天学点SAP小知识】Day1 - ABAP 7.40新语法

    最近看同事使用ABAP新语法贼溜,省了好多的功夫,还在使用老语法的我眼红了. 所以就自己补一补7.40之后语法,能够让自己写代码更顺畅吧. 今天学习内联申明 inline 意思是:当编译器发现某段代码 ...