python测试框架untest怎么循环执行_unittest如何在循环遍历一条用例时生成多个测试结果...

引用自:http://blog.csdn.net/kaku21/article/details/42124593

参考网址:http://programmaticallyspeaking.com/test-data-provider-using-python-metaclass.html

使用TestNG进行测试的时候,允许使用外部数据源来驱动测试方法的执行,举个例子:

我们有一个测试方法,而这个测试方法对应有10条测试数据,如果我们在测试方法中使用循环遍历这十条数据的话,很可能出现的问题是:

1.测试中的断言 assert 遇到一条数据执行结果错误时,退出测试方法

2.剩余的数据无法继续执行,产生的数据报告不完整

解决上述问题的方法,利用TestNG的dataprodvider在测试类中获取外部数据,然后传给测试方法,这样做到每一条数据驱动一次测试方法的执行,测试方法按数据量自动产生方法序号,报告测试结果。当某一条数据执行结果错误的时候,该方法对应的产生一次失败信息,但不影响下一条数据的执行。

在测试报告中,看到的是某一个方法,然后产生了多少条报告。

关于TestNG数据驱动的详情可以参考 http://testng.org/doc/documentation-main.html#parameters-dataproviders

我们要说的是,在python的unittest中没有类似的方法,当我们需要遍历测试数据的时候怎样更好的去查看结果生成报告呢?

目前我没有找到比较好的第三方组件,唯一的方式是自己来改写,参看下面的代码

import unittest

class DataProviderSupport(type):

def __new__(meta, classname, bases, classDict):

# method for creating our test methods

def create_test_method(testFunc, args):

return lambda self: testFunc(self, *args)

# look for data provider functions

for attrName, attr in classDict.items():

if attrName.startswith("dataprovider_"):

# find out the corresponding test method

testName = attrName[13:]

testFunc = classDict[testName]

# the test method is no longer needed

del classDict[testName]

# generate test method variants based on

# data from the data porovider function

i = 1

for args in attr():

classDict[testName + str(i)] = create_test_method(testFunc, args)

i += 1

# create the type

return type.__new__(meta, classname, bases, classDict)

这里其实用到了元类的概念,也就是,我们重写的type元类的__new__函数

验证一下:

class TestStringLength(unittest.TestCase):

__metaclass__ = DataProviderSupport

def dataprovider_test_len_function(): # no self!

yield ("abc", 3)

yield ("", 0)

yield ("a", 1)

def test_len_function(self, astring, expectedLength):

self.assertEqual(expectedLength, len(astring))

运行 python的unittest,结果如下:

3db7e998214cb0ca5f785157f0a8734572d.jpg

元类的概念,请参考:

http://www.ibm.com/developerworks/cn/linux/l-pymeta/

http://blog.csdn.net/b2b160/article/details/4161189

这个函数能够返回当前类的类名称,类字典,同时可以创建测试方法 即 create_test_method

当有多个测试数据对应一个测试方法时,我们把测试方法增加了序号,如果在后续引用测试方法时,需要在测试方法名称后面添加序号

例如 suite.addTest(Testdriver(methodname+sn))

http://www.cnblogs.com/fnng/p/8185172.html

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

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

相关文章

python杨辉三角_yiduobo的每日leetcode 118.杨辉三角 amp;amp; 119.杨辉三角II

祖传的手艺不想丢了,所以按顺序写一个leetcode的题解。计划每日两题,争取不卡题吧。118.杨辉三角https://leetcode-cn.com/problems/pascals-triangle/119.杨辉三角IIhttps://leetcode-cn.com/problems/pascals-triangle-ii/经典的数学题。118题需要求出…

为什么链接不上mysql数据库_java链接不上数据库,怎么解决!

居正w去年刚好做过这个,给你贴下我的链接代码try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //加载sqlserver JDBC驱动程序 //Class.forName("org.gjt.mm.mysql.Driver"); System.out.pr…

世界上最难的视觉图_世界上最长的蛇有多长?四川惊现55米洪荒巨蟒(图)

蛇,一直是站在食物链顶端的致命生物,蟒蛇更是能够吞食人类的恐怖巨兽。网传世界上最长的蛇有500米之长,名为“红海巨蛇”,已被证实为虚假传言,以地球现在的环境是不可能出现如此之大的蛇的。据说四川发现了罕见的55米长…

解析器 java_java 常用的解析工具

这里介绍两种 java 解析工具。第一种:java 解析 html 工具 jsoup第二种: java 解析 XML 工具 Dom4jjsoupjsoup是一个用于处理真实HTML的Java库。它提供了一个非常方便的API,用于提取和操作数据,使用最好的DOM,CSS和类似…

php 比java 快_php比java要快在哪里

php比java要快在哪里一些Java可以做的事情php做不了或者说要借助另外的工具才可以做,要但就开发网站这个事情来说,php确实是要比Java效率高,尤其是相对简单的项目。首先,Java的架构要比Php复杂,先不说各种开发框架&…

斯皮尔曼相关系数_惊艳!JASP相关系数矩阵及热力图

今天起我们新增一个案例数据,犯罪数据。这是mei国50个州关于犯罪率的一组数据,包括人口、面积、收入、文盲率、高中毕业率、霜冻天数、犯罪率共7个指标,现在我们想考察一下州犯罪率和其他因素间的关系。数据视图如下:数据取自《R语…

邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路

题目链接743. 网络延迟时间 题目描述有 N 个网络节点,标记为 1 到 N。给定一个列表 times,表示信号经过有向边的传递时间。 times[i] (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的…

opencv java ubuntu_Ubuntu 16.04配置OpenCV 3.1.0 for Java

我们都知道,OpenCV是基于C的开源计算机视觉库,但是从2.4.4版本开始提供了Java绑定,也就是说,我们也可以使用Java来开发基于OpenCV的计算机视觉应用。目前,最新的版本是3.1.0,在本文中将会介绍如何中Ubuntu …

service 层 拼接的html 代码如何直接返回_字符串拼接,会走StringBuilder 吗?

前言最近在突然想到了String字符串拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器会对代码进行优化?话不多说&#xff0c…

迁移学习训练集准确率一直上不去_可以提高你的图像识别模型准确率的7个技巧...

假定,你已经收集了一个数据集,建立了一个神经网络,并训练了您的模型。但是,尽管你投入了数小时(有时是数天)的工作来创建这个模型,它还是能得到50-70%的准确率。这肯定不是你所期望的。下面是一些提高模型性能指标的策…

华为云客户端_华为公布云手机计费清单,要不要光刻机也给出了答案

华为云手机一出来,大家的好奇心就上来了。这就是解决华为无芯片的代替方案。纷纷说道,可以绕开光刻机,光刻机瞬间变废铁。当时我还发布过文章分析:现在的云手机只是一个云端应用,并不是真正的云手机。需要在手机或电脑…

java 柱状图 宽度_Java实现 LeetCode 84 柱状图中最大得矩形

84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为…

java中为什么要用注解_java中的注解,真的很重要,你理解了嘛?

这篇文章开始讲解java中的注解,在平时的开发当中我相信你或多或少的接触过注解。比如你可能都见过override,它代表的就是一个注解。但是,为了更加清晰的去介绍注解,我还是先给出一个例子,让你能够方便的理解。一、认识…

qtdesigner右击按钮没有 to slot_或添加“力感按钮”再升级,Apple Pencil会更“能打”?...

[钉科技编译]“I have a pen/I have an apple/Ah apple pen”,钉科技编辑写到的这些“歌词”,看上去是不是很熟悉?对了,这是搞笑艺人Piko Taro那支颇“洗脑”的《PPAP》里的内容。其实,如果说到…

java三级报名_java web 学习 --第四天(Java三级考试)

jsp内置对象 outout属性类型:JspWriter 作用域:page 作用:一个输出缓存流,向客户端浏览器输出信息JspWriter类中常用的方法和功能flush() 输出缓存区的数据close() 关闭输出流clearBuffer() 清除缓存区的数据,并把数据…

tlab java_浅析java中的TLAB

好久,好久....没有更博客了。这一次利用闲暇时间,来扯一下关于JVM中的TLAB。什么是TLAB?它是干什么的?咋们先抛开这个问题,一切的开始得从new对象到指针碰撞开始讲起。new对象与指针碰撞new对象怎么就出问题了呢&#…

选择排序算法流程图_常用排序算法之选择排序

前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序。选择排序选择排序和插入排序很相似,也区分已排序区间和未排序区间,选择排序是每次从未排序区间…

pygame小游戏代码_Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏...

Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏目录输出结果实现代码输出结果​实现代码# -*- coding: utf-8 -*-#Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏import pygame as pg from pygame.locals import …

大白菜pe解锁bitlocker_微PE工具箱 v2.1 官方版,最好用的 Win10PE 系统

微PE工具箱 v2.1 – 最好用的WinPE装机维护工具!WinPE工具箱,装机维护最得力的助手,最后救命稻草。化繁为简,小材大用,一键安装,极速启动。微PE工具箱,最好用的PE工具箱,没有之一。无…

java8用什么tomcat_Tomcat8+JDK8安装与配置

一,系统配置1.操作系统:win10 64位2.tomcat版本:Tomcat8 64位3.Java版本:JDK8 64位二,软件下载下载到本地后直接打开安装,修改存储目录,如图:2.2 Tomcat8下载,官网地址&…