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-----------------------------------…

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

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

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

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

[转]什么是RSS

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

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

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

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

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

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…

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

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

php开发客服系统(持久连接+轮询+反向ajax)

欢迎在php严程序 - php教程学习AJAX教程, 本节课讲解&#xff1a;php开发客服系统(持久连接轮询反向ajax) php开发客服系统(下载源码) 用户端(可直接给客户发送消息)客服端(点击用户名.即可给该用户回复消息) 讲两种实现方式&#xff1a;一&#xff1a;iframe 服务器推技术com…

c语言判断整数_C语言技能|(草稿,不断完善中...)

2020年春考C语言有2个题型&#xff1a;填空&#xff0b;程序程序填空涉及&#xff1a;一、头文件的引用1.必有#include (注意&#xff1a;在devC 5.10中#include "stdio.h"也是正确的)2.若程序中使用数学函数&#xff0c;应加上头文件#include 3.头文件结尾无分号二、…

python生成器迭代_python中的生成器和迭代器

前言&#xff1a; 我们来了解一下什么是python中生成器。了解一下python生成器是什么&#xff0c;以及生成器在python编程之中能起到什么样的作用。 定义&#xff1a; 生成器和迭代器 通过列表生成式&#xff0c;我们可以直接创建一个列表。但是&#xff0c;受到内存限制&#…

python 生成pdf_如何使用Python生成PDF?

在日常办公中&#xff0c;我们会经常使用PDF文件。生成PDF的方法有很多&#xff0c;其中Python就可以。你知道怎么使用Python也可以生成PDF吗&#xff1f;下面来和小编一起学习下吧。首先我们访问网址&#xff1a;https://wkhtmltopdf.org/downloads.html &#xff0c;根据自己…

java 代码重用需要注意的事项_程序员笔记|编写高性能的Java代码需要注意的4个问题...

一、并发无法创建新的本机线程......问题1&#xff1a;Java的中创建一个线程消耗多少内存&#xff1f;每个线程有独自的栈内存&#xff0c;共享堆内存问题2&#xff1a;一台机器可以创建多少线程&#xff1f;CPU&#xff0c;内存&#xff0c;操作系统&#xff0c;JVM&#xff0…

java vbs_VBS基础篇 - vbscript Dictionary对象

Dictionary是存储数据键和项目对的对象&#xff0c;其主要属性有Count、Item、Key&#xff0c;主要方法有Add、Exists、Items、Keys、Remove、RemoveAll。创建Dictionary对象定义并创建Dictionary对象&#xff0c;使用CreateObject创建并返回自动化对象的引用Dim DicSet Dic C…

java integer最大值_五分钟学会java中的基础类型封装类

在刚刚学习java的时候&#xff0c;老师不止一次的说过java是一种面向对象的语言&#xff0c;万物皆对象。对于java中的基础数据类型&#xff0c;由于为了符合java中面向对象的特点&#xff0c;同样也有其封装类。这篇文章对其有一个认识。一、基本认识其实在jdk1.5之前&#xf…

web.xml文件位于web项目的目录结构中的_看完这篇,别人的开源项目结构应该能看懂了...

我为什么要写这篇近来&#xff0c;和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题。很多小伙伴表示网上下载下来的开源项目看不懂&#xff0c;项目结构和代码分层看得很蒙&#xff0c;不知道应该以一个什么样的思路去学习和吸收别人的项…

mysql workbench中文设置_使用Workbench完成流体压力渗透分析

“之前的案例&#xff0c;APDL Showcase3里使用到了流体压力渗透载荷。有朋友读到以后&#xff0c;希望能在Workbench里实现这一功能。有需求就有动力&#xff0c;我们来试一试。 ”01—结果展示先看计算结果&#xff1a;(为了截图方便将模型旋转了90度)该案例为轴对称模型&…

ddns客户端_DDNS哪家最方便?试试看Mikrotik的ROS!

没有固定IP的情况下&#xff0c;想要提供外网访问&#xff0c;那么DDNS是必不可少的一个设置。DDNS&#xff08;Dynamic Domain Name Server&#xff0c;动态域名服务&#xff09;是将用户的动态IP地址映射到一个固定的域名解析服务。需要注意的是&#xff0c;不是域名是动态的…

python中级程序员是什么水准_程序员进阶:一篇搞懂Python中级应用

异常处理&#xff1a;try-except 异常即是一个事件&#xff0c;该事件会在程序执行过程中发生&#xff0c;影响了程序的正常执行。一般情况下&#xff0c;在Python无法正常处理程序时就会发生一个异常。 异常是Python对象&#xff0c;表示一个错误。当Python脚本发生异常时我们…