今天是unittest最后一讲,我们解决一下如何只运行一次setUp和tearDown方法以及简单的数据驱动的知识。

1、只运行一次setUp和tearDown方法

很简单,只需要把setUp和tearDown分别替换为setUpClass和tearDownClass即可,但是用这两个方法必须加上 @classmethod 修饰


# coding: utf-8 import unittest
import time class MyTest(unittest.TestCase): @classmethod
def setUpClass(cls):
print "SetUp"
time.sleep(2) @classmethod
def tearDownClass(cls):
print "teardown"
time.sleep(2) def test01(self):
print "test01" def test03(self):
print "test03" def test02(self):
print "test02" if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(MyTest)
unittest.TextTestRunner(verbosity=2).run(suite)
​

上面的代码运行以后,得到的输出便是:

至于@classmethod是什么意思,大家先不要管,后面在说装饰器的时候我会专门的和大家说。

2、数据驱动

unittest里的数据驱动也要用到装饰器的知识,还是直接先记住代码即可:

# coding: utf-8

import unittest
import time
import ddt info = [{"username": "captain", "password": 123},
{"username": "warrior", "password": 456}] @ddt.ddt
class MyTest(unittest.TestCase): @classmethod
def setUpClass(cls):
print "SetUp"
time.sleep(2) @classmethod
def tearDownClass(cls):
print "teardown"
time.sleep(2) @ddt.data(*info)
def test01(self, mes):
print mes @ddt.data(*info)
def test03(self, res):
print res["username"] def test02(self):
print "test02" if __name__ == '__main__':
unittest.main()
​

运行上面代码:

可以看到,我们的info是一个列表,里面套了两个字典,在打印res["username"]的时候回将两个username都打印出来;这也是数据驱动的好处,也就是将用到的数据放到一起(比如一个Excel中),然后通过数据驱动就可以读到Excel中的所有数据了。

以上内容就是我要讲的所有的unittest需要了解的知识了,其实东西并不多,unittest模块常用的基本上就这三篇的知识,将来无论你做接口测试还是UI自动化,都会用到以上知识,所以,现在就学会了记住了,将来会少走很多弯路~~

欢迎大家关注微信公众号“自动化测试实战”,我们一起进步!

接口测试基础——第6篇unittest模块(三)的更多相关文章

  1. 接口测试基础——第6篇unittest模块(二)

    通过上次的运行,大家应该已经发现了,就是我们写了三个用例,那么在测试报告中setUp和tearDown方法分别运行了三次.没错,这也就是说,每次运行用例之前都会运行setUp和tearDown方法.今 ...

  2. 接口测试基础——第6篇unittest模块(一)

    我们先来简单介绍一下unittest框架,先上代码,跟住了哦~~ 1.建立如下结构的文件夹: 注意,上面的文件夹都是package,也就是说你在new新建文件夹的时候不要选directory,而是要选 ...

  3. 接口测试基础——第5篇xlrd模块

    读取Excel表格中的内容,不多说,直接上代码: # coding: utf-8 import xlrd # excel路径 excel_path = r'C:\Users\weiming\Deskt ...

  4. 接口测试基础——第4篇logging模块

    Logging:日志记录是为了跟踪记录软件运行时,发生的事件,包括出错,提示信息等等. log日志级别:日志级别大小关系为:CRITICAL > ERROR > WARNING > ...

  5. Java基础之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  6. 接口测试基础——第7篇 Python中_、__、__func__之间的区别

    今天的东西很少,主要是给自己做个笔记,顺便帮大家普及一下Python中的边角知识: 1.if __name__ == "__main__"是什么意思 答:一个.py文件,如果是自身 ...

  7. 接口测试基础——第3篇smtplib发送带图片的邮件

    smtplib发送邮件最后一篇,发送带图片的邮件: 大家可以去廖雪峰的网站看一下,下面的代码就是我跟着博客写的,哈哈,大家即使不明白为什么,也要多写两遍,记在心里,如果有不明白的地方可以留言,船长会第 ...

  8. 接口测试基础——第7篇 简单的Python知识普及(二)之装饰器

    今天我们来学习python里面的“装饰器” 1.我在函数test运行前想先打印一些内容怎么办? def func(param):    print u"打印的内容"    para ...

  9. 接口测试基础——第2篇smtplib发送带附件的邮件

    我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...

随机推荐

  1. 使用ssm整合是项目启动tomcat报错java.lang.IndexOutOfBoundsException

    解决办法:删除.m2文件夹下的全部仓库,然后重启myeclipse,对项目进行maven project.问题解决. 在没有这样做时,除了tomcat启动会失败,项目还有会报如下错误: ①cvc-co ...

  2. TileMode(平铺模式) 枚举的成员:

    TileMode(平铺模式) 枚举的成员:   成员名称 说明   FlipX 与 Tile 相同,只不过图块的交替列被水平翻转. 基本图块本身不翻转.   FlipXY FlipX 和 FlipY ...

  3. SEA 教程

    Sina App Engine(SAE)教程(11)- Yaf使用 Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用 Sina App Engine(SAE)入门教 ...

  4. react 子组件改变父组件状态

    class Father extends Component {     construtor(props){         super(props);         this.state={   ...

  5. day5-re模块

    一.概述 但凡有过语言开发经验的童鞋都清楚,很多时候需要进行字符串的匹配搜索.查找替换等处理,此时正则表达式就是解决问题的不二法门.正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强 ...

  6. label技巧

    问题描述: 一般都用label的for属性指定label的点击范围: <label for="male"><input type="radio" ...

  7. HDU 3923 Invoker(polya定理+乘法逆元(扩展欧几里德+费马小定理))

    Invoker Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 122768/62768K (Java/Other) Total Subm ...

  8. iOS开发探索-高斯模糊&毛玻璃效果

    iOS开发中有的时候需要将图片设置模糊,来实现特定的效果获取更好的用户体验, iOS7之后半透明模糊效果得到大范围使用的比较大,现在也可以看到很多应用局部用到了图片模糊效果,可以通过高斯模糊和毛玻璃效 ...

  9. defer async 区别

    链接 <script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是 ...

  10. 使用DaoCloud持续构建docker镜像,自动化部署

    我们学会了在主机上安装部署docker,也学会了构建自己的docker镜像和容器,启停也都会用了,下一步就需要持续构建发布docker的技能了. 我们希望能在代码提交后,有个远程服务能自动开始构建项目 ...