Python + selenium + unittest装饰器 @classmethod

前言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++的静态函数,他的一个特色是参数能够为空,一样支持类名和对象两种调用方式;

相关文章
相关标签/搜索