python中什么是数据驱动_Python数据驱动DDT的应用

原标题:Python数据驱动DDT的应用

在开始之前,我们先来明确一下什么是数据驱动,在百度百科中数据驱动的解释是:数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。数据驱动测试注重于测试软件的功能性需求,也即数据驱动测试使软件工程师派生出执行程序所有功能需求的输入条件。

37567672ea784fba8c16c73e4a49f146.png

这说的是什么?为什么我完全不懂!!!咱们来分析一下。

利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程 –重点在测试功能,不需要考虑内部处理过程

也即数据驱动测试使软件工程师派生出执行程序所有功能需求的输入条件 – 重点在测试时候的输入条件

在实际的自动化测试中,数据驱动是通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,简单的来说,就是将测试数据与实际的测试代码区分开。

Python中大部分人最先接触的测试框架就是unittest,可是unittest本身并不支持数据驱动,需要借助ddt来实现。接着我们就用unittest+ddt来给大家看一下数据驱动。

ddt是 “Data-Driven Tests”的缩写。官方资料是:http://ddt.readthedocs.io/en/latest/ 。

下面是每个组件的简单介绍:

ddt.ddt:

装饰类,用于unittest.TestCase子类的类装饰器。

ddt.data:

添加到unittest.TestCase测试用例上的方法装饰器。

ddt.file_data(value):

添加到unittest.TestCase测试用例上的方法装饰器。

value应该是文件目录的路径。文件应该包含JSON编码的数据,可以是列表,也可以是dict。

如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。

如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。

ddt.unpack:

传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上。

我们来用实例感受一下每个组件,先用data来传入比较简单的值,来做数据驱动。

简单数据注入:

import ddt

import unittest

@ddt.ddt

class TestCase(unittest.TestCase):

def setUp(self):

print("Before every test case!")

@ddt.data(1,2,3,4,5,6)

def test_case_01(self,value):

print("value is: "+ str(value))

if __name__ == "__main__":

unittest.main

运行中发现,有6组数据,一共执行了6次

20a93fe7287941e3ab3b3b65a24513c5.png

测试方法后会被ddt加一个后缀,ddt会尝试把测试数据转化为后缀附在测试方法后,组成一个新的名字。

复杂数据注入:

如果尝试着用一些比较复杂的数据,比如元组/列表/字典,我们就需要调用unpack来实现,下面是一些例子

import ddt

import unittest

@ddt.ddt

class TestCase(unittest.TestCase):

def setUp(self):

print("Before every test case!")

@ddt.unpack

@ddt.data({'value1': '孙俪', 'value2': '邓超'},

{'value1': '蔡少芬', 'value2': '张晋'},

{'value1': '袁咏仪', 'value2': '张智霖'})

def test_case_01(self,value1,value2):

print("value1 is: " + value1)

print("value2 is: " + value2)

@ddt.unpack

@ddt.data((1,2),(3,4),(5,6))

def test_case_02(self, value1, value2):

print("value1 is: " + str(value1))

print("value2 is: " + str(value2))

@ddt.unpack

@ddt.data([1,9],[2,8],[3,7])

def test_case_03(self, value1, value2):

sum = value1 + value2

self.assertEqual(sum, 10)

if __name__ == "__main__":

unittest.main

f13144c7161e456ab9ca56b6d71aaab6.jpeg

现在也有一种比较流行的处理方式,不借助unpack可以直接做字典数据的注入。

import ddt

import unittest

data = ({'value1': '孙俪', 'value2': '邓超'},

{'value1': '蔡少芬', 'value2': '张晋'},

{'value1': '袁咏仪', 'value2': '张智霖'})

@ddt.ddt

class TestCase(unittest.TestCase):

def setUp(self):

print("Before every test case!")

@ddt.data(*data)

def test_case_01(self,data):

print("value1 is: " + data['value1'])

print("value2 is: " + data['value2'])

if __name__ == "__main__":

unittest.main

3595653745f44f8fb4c510a7bc2c31ce.png

文件数据注入:

有时候,将测试数据直接写到Python文件里不利于我们对数据的管理,这时候,我们就可以借助文件来做数据的注入。

创建一个yml文件:

-1

-2

-3

-4

创建一个json文件:

{

"positive_integer_range": {

"start":0,

"end":2,

"value":1

},

"negative_integer_range": {

"start":-2,

"end":0,

"value":-1

},

"positive_real_range": {

"start":0.0,

"end":1.0,

"value":0.5

},

"negative_real_range": {

"start":-1.0,

"end":0.0,

"value":-0.5

}

}

然后将yml与json文件注入测试用例中

import ddt

import unittest

@ddt.ddt

class TestCase(unittest.TestCase):

def setUp(self):

print("Before every test case!")

@ddt.file_data('testdata_dic.json')

def test_case_01(self,start,end,value):

print("start is: " + str(start))

print("end is: " + str(end))

print("value is: " + str(value))

@ddt.file_data('testdata_list.yml')

def test_case_02(self, value):

print("value is: " + str(value))

if __name__ == "__main__":

unittest.main

运行之后结果为:

f31e2caf56cf420aa5871591feaa0751.png

这样,就为我们数据驱动的用法提供了多样性。

最后,希望本文能帮助到大家。返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2008日志清理 server sql_SQL Server 2008 收缩日志 清空删除大日志文件

由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005)BackupLog DNName with no_loggodumptransaction DNName with no_loggoUSE DNNameDBCC SHRINKFILE (2)Go-----------------------------------…

邻结矩阵的建立和 BFS,DFS;;

邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!&#xff…

matlab cuda的.cu文件应该放在那里_无人机基于Matlab/Simulink的模型开发(连载一)

“一切可以被控制的对象,都需要被数学量化”这是笔者从事多年研发工作得出的道理,无论是车辆控制,机器人控制,飞机控制,还是无人机控制,所有和机械运动相关的控制,如果不能被很好的数学量化&…

java ask to_Java native和ASCII 互转工具Native2AsciiUtils.java下载

/** Copyright 2012-2013 The Haohui Network Corporation*/package com.haohui.common.utils;/*** Java Native和Ascii转换代码** project common-utils* author cevencheng * create 2012-11-7 下午4:16:57*/public class Native2AsciiUtils {/*** prefix of ascii string of…

go java性能_服务端I/O性能大比拼:Node、PHP、Java和Go

理解应用程序的输入/输出(I/O)模型,意味着其在计划处理负载与残酷的实际使用场景之间的差异。若应用程序比较小,也没有服务于很高的负载,也许它影响甚微。但随着应用程序的负载逐渐上涨,采用错误的I/O模型有可能会让你到处踩坑&am…

python爬取数据步骤_Python爬虫爬取数据的步骤

爬虫: 网络爬虫是捜索引擎抓取系统(Baidu、Google等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 步骤: 第一步:获取网页链接 1.观察需要爬取的多网页的变化规律…

Android开发日记(六)

textViewUserName.setCursorVisible(false);//隐藏光标 textViewUserName.setFocusable(false);//失去焦点 textViewUserName.setFocusableInTouchMode(false);//虚拟键盘隐藏 if(!userLocalName.equalsIgnoreCase("null")&&!userLocalEmail.equalsIgnoreCa…

python数据库安装_python数据库-MySQL安装问题总结(48)

一、ERROR 1698(28000):Access denied for user rootlocalhost错误 我的操作系统是ubuntu:我的MySQL版本是:安装完成后,登录mysql的时候就出现了如下错误:因为安装的过程中没让设置密码,可能密码为空,但无论…

java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...

如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径我有一个包含2个包的项目:ListStopWords.txtListStopWords.txt在包(2)中我有一个文本文件ListStopWords.txt,在包(1)中我有一个类FileLoadder.这是代码FileLoader&#xff…

[转]什么是RSS

http://www.blogbus.com/bangzhuzhongxin-logs/5452786.html 如果您够仔细的话,一定会发现BlogBus的每一个Blog站上都会有一个 图标。这个图标表示Blogbus支持RSS功能(目前是RSS 2.0),即所谓的新闻聚合功能。 点击 图标&#xf…

京东的商品搜索功能是如何实现的_如何精准查询京东商品销量?分享一个京东运营小妙招...

京东平台和其他平台商品信息展示不一样,在京东平台商品的销售额无论是累计的还是当月的数据都没有展示,即便是通过商家后台的京东商智也是只能看到销售额的指数,这就给京东商家做竞品分析时设置了障碍,无法获取到竞品的真实销售额…

java zip解压进度条_java读取文件显示进度条的实现方法

实现这个功能比较简单,用到的类有两个:progressmonitorinputstream(主要是整个类) 和 progressmonitor ,它们在javax.swing中大体思路,你要首先知道整个文件的大小,和当前已经读取文件的大小,获得整个文件大…

ubuntu下软件中心闪退问题解决

前段时间不知道做了什么导致,ubuntu下的软件中心进不去。没事点开后就立马闪退出去。 然后重新安装软件中心解决了 重装命令: sudo apt-get install --reinstall software-center software-center-aptdaemon-plugins 当然也可以选择用其他包管理器&#…

python 可视化监控平台_python可视化篇之流式数据监控的实现

preface 流式数据的监控,以下主要是从算法的呈现出发,提供一种python的实现思路 其中: 1.python是2.X版本 2.提供两种实现思路,一是基于matplotlib的animation,一是基于matplotlib的ion 话不多说,先了解大概…

java 不执行构造函数_函数作为构造函数执行,但不作为函数执行

我在displayandmove.as文件中有以下代码:package {import flash.display.MovieClip;public class FigureConstruct extends MovieClip {public function displayandmove() {this.height stage.stageHeight/5;this.width stage.stageWidth/5;}}}我在displayandmove…

codeforce 606A - Magic Spheres

题意&#xff1a;a,b,c三种球&#xff0c;能把俩个一样的球变成另一颜色不一样的球。给你目标x,y,z&#xff0c;问能否经过变化至少达打目标。 1 #include<iostream>2 #include<stdio.h>3 #include<stdlib.h>4 #include<memory.h>5 #include<string…

cmd cd 无法切换目录_一分钟掌握cmd基础操作,告别鼠标

cmd基础操作cmdcmd是command的缩写&#xff0c;一直伴随着windows操作系统。有时称为&#xff1a;控制台窗口&#xff0c;cmd窗口&#xff0c;黑窗口&#xff0c;命令行窗口等。其实&#xff0c;在unix系统&#xff0c;Linux&#xff0c;MacOS等几乎所有的操作系统中&#xff0…

jsp java代码_jsp内的java代码不执行,急啊!!大家来看看!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我的jsp页面上的java代码和html代码是穿插的&#xff0c;用System.out.println去跟踪的时候&#xff0c;内的代码都不执行&#xff0c;html都是执行的&#xff01;怎么回事啊&#xff1f;没有报错&#xff0c;没有任何”错误“的迹…

css 背景图怎么设置自动填充满_CSS属性设置 -- 背景样式

Ⅰ background-color: -- 设置标签的背景颜色rgba(0,0,0,0.65); -- (红,緑,蓝三原色,透明度)只能给背景设置透明度opacity: 0.65; -- 改变整个标签的透明度<style>Ⅱ background-image: --设置标签的背景图片url("图片网址"); -- 如果图片的大小没有标签大&…

EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean...

该jboss集成到eclipse 关掉Jboss控制台新闻Ctrlc&#xff0c;在MyEclipse→Servers→Jboss可配置JBoss。通过ANT提高EJB应用的开发效率 在HelloWorld 增加ANT&#xff0c;右击项目新建xml&#xff1a;build.xml&#xff0c;右击打开方式选择Ant .. 相应用进行编译、打包、公布、…