前言python
前面讲到unittest里面setUp能够在每次执行用例前执行,这样有效的减小了代码量,可是有个弊端,好比打开浏览器操做,每次执行用例时候都会从新打开,这样就会浪费不少时间。c++
因而就想是否是能够只打开一次浏览器,执行完用例再关闭呢?这就须要用到装饰器(@classmethod)来解决了。浏览器
1、装饰器函数
1.用setUp与setUpClass区别测试
setup():每一个测试case运行前运行
teardown():每一个测试case运行完后执行
setUpClass():必须使用@classmethod 装饰器,全部case运行前只运行一次
tearDownClass():必须使用@classmethod装饰器,全部case运行完后只运行一次spa
2.@是修饰符,classmethod是python里的类方法.net
2、执行顺序code
1.用类方法写几个简单case,对象
# coding:utf-8 import unittest import time class Test(unittest.TestCase): @classmethod def setUpClass(cls): print "start!" @classmethod def tearDownClass(cls): time.sleep(1) print "end!" def test01(self): print "执行测试用例01" def test03(self): print "执行测试用例03" def test02(self): print "执行测试用例02" def addtest(self): print "add方法" if __name__ == "__main__": unittest.main()
2.从执行结果能够看出,前置和后置在执行用例前只执行了一次。blog
start!
执行测试用例01
执行测试用例02
执行测试用例03
...end!
----------------------------------------------------------------------
Ran 3 tests in 1.001s
3.名词解释
Python类里会出现这三个单词,self和cls均可以用别的单词代替,类的方法有三种,
一是经过def定义的 普通的通常的,须要至少传递一个参数,通常用self,这样的方法必须经过一个类的实例去访问,相似于c++中经过对象去访问;
二是在def前面加上@classmethod,这种类方法的一个特色就是能够经过类名去调用,可是也必须传递一个参数,通常用cls表示class,表示能够经过类直接调用;
三是在def前面加上@staticmethod,这种类方法是静态的类方法,相似于c++的静态函数,他的一个特色是参数能够为空,一样支持类名和对象两种调用方式;