zoukankan      html  css  js  c++  java
  • python+unittest框架第三天unittest之分离测试固件和公共代码,跳过案例的执行

      我们在时间工作中,会将整个项目的代码分别放置多个模块中去编写。方便后期项目维护,比如,我们的web项目可能有多个IP地址,每个IP地址代表不同的测试环境。测试环境与Bat环境或者验收环境等。这就需要我们频繁更换测试地址 ;或者我们需要验证web 项目在不同的浏览器上面的兼容性,需要我们更换浏览器测试,这样我们必须切换代码中的浏览器驱动。

      我们可以将公共代码放在另一个.py文件中,就像这样:

    我们将测试固件分离出去,这样方便我们在公共模块下维护测试需要的初始化环境,方便切换浏览器或者更改地址

     1 import unittest   #导入unittest库
     2 from selenium import webdriver    #导入selenium中的webdriver浏览器驱动
     3 import time as t
     4 
     5 
     6 class public_baidu(unittest.TestCase):    #我们写的测试固件类,里面有初始化方法setup()和tearDown()
     7     @classmethod  # 使用 @classmethod  装饰器函数,把方法变成类方法,可以直接调用方法,类本身就不在需要实例化类对象就可以调用此方法
     8     def setUp(cls):
     9         cls.driver = webdriver.Chrome()               #比如切换其他浏览器,我们都可以在这里更改
    10         cls.driver.maximize_window()
    11         cls.driver.implicitly_wait(15)
    12         cls.driver.get(r'http://www.baidu.com')       #比如我们的测试地址有好几套,我们可以直接在这里跟换地址
    13         t.sleep(2)
    14 
    15     @classmethod
    16     def tearDown(cls):
    17         cls.driver.quit()

    name我们在另一个.py模块中肯定是主要存放测试案例,我们看下代码:

     1 import unittest                     #导入unittest
     2 from bokeyuan.bokeyuan_public import *    #注意这是我们自己创建的模块 .py文件,该模有公共代码
     3 
     4 class page_baidu_sousuo(public_baidu):       #定义一个类,并继承我们写的公共模块文件里面的public_baidu类
     5 
     6     '''以下案例是测试百度首页链接'''
     7     def test_baidu_001(self):     #案例001  测试进入百度新闻界面
     8         '''测试百度首新闻链接'''
     9         self.driver.find_element_by_link_text('新闻').click()    #点击百度页面,超链接【新闻】两个字
    10         t.sleep(2)     #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的
    11         self.driver.back()
    12 
    13
    14 def test_baidu_002(self): #案例002 测试进入百度地图界面 15 '''测试百度首地图链接''' 16 self.driver.find_element_by_link_text('地图').click() ##点击百度页面,超链接【地图】两个字 17 t.sleep(2) 18 self.driver.back() 19 20 '''以下案例是测试百度首页搜索功能''' 21 def test_baidu_003(self): 22 '''测试百度首页搜索功能''' 23 self.driver.find_element_by_id('kw').send_keys('你好朋友') 24 t.sleep(2) 25 26 @staticmethod #静态方法分离测试套件,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。类.方法().看最后的代码调用:page_baidu_lianjie.suite() 27 def suite(): 28 suite = unittest.TestSuite(unittest.makeSuite(page_baidu_sousuo)) #将测试套件单独分离出,封装成方法,直接调用,以后就不用再每次都写 29 return suite #将测试套件返回,如果不写return返回,那么将不会将内容返回给调用方下面的run() 30 31 if __name__ =='__main__': 32 unittest.TextTestRunner(verbosity=2).run(page_baidu_sousuo.suite()) #run()接收封装的测试套件suite()方法的返回参数,进行测试套件的执行载入,然后生成报告

    这样我们就可以试试两个文件维护后进行执行了:

    比如今天发现有一条案例最近需求被推翻了,我们在需求没有拍板的时候,我们可以跳过该条案例的执行,注释代码是一种方法,但是并不是很友好,我们看下unittest提供的skip()方法  :

    注意,如果你单独复制代码是不行的,需要把案例一里面的公共模块也赋值走哦!!!

     1 import unittest                     #导入unittest
     2 from bokeyuan.bokeyuan_public import *    #注意这是我们自己创建的模块 .py文件,该模有公共代码
     3 
     4 class page_baidu_sousuo(public_baidu):       #定义一个类,并继承我们写的公共模块文件里面的public_baidu类
     5 
     6     '''以下案例是测试百度首页链接'''
     7     def test_baidu_001(self):     #案例001  测试进入百度新闻界面
     8         '''测试百度首新闻链接'''
     9         self.driver.find_element_by_link_text('新闻').click()    #点击百度页面,超链接【新闻】两个字
    10         t.sleep(2)     #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的
    11         self.driver.back()
    12 
    13     @unittest.skip('地图链接,正在更改昨天的bug,今天先不执行')       #用unittest提供的skip()方法,跳过测试案例,执行下一条案例
    14     def test_baidu_002(self):      #案例002  测试进入百度地图界面
    15         '''测试百度首地图链接'''
    16         self.driver.find_element_by_link_text('地图').click()   ##点击百度页面,超链接【地图】两个字
    17         t.sleep(2)
    18         self.driver.back()
    19 
    20     '''以下案例是测试百度首页搜索功能'''
    21     def test_baidu_003(self):
    22         '''测试百度首页搜索功能'''
    23         self.driver.find_element_by_id('kw').send_keys('你好朋友')
    24         t.sleep(2)
    25 
    26     @staticmethod   #静态方法分离测试套件,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。类.方法().看最后的代码调用:page_baidu_lianjie.suite()
    27     def suite():
    28         suite = unittest.TestSuite(unittest.makeSuite(page_baidu_sousuo))   #将测试套件单独分离出,封装成方法,直接调用,以后就不用再每次都写
    29         return suite  #将测试套件返回,如果不写return返回,那么将不会将内容返回给调用方下面的run()
    30 
    31 if __name__ =='__main__':
    32     unittest.TextTestRunner(verbosity=2).run(page_baidu_sousuo.suite())   #run()接收封装的测试套件suite()方法的返回参数,进行测试套件的执行载入,然后生成报告

     今天的东西不太多,明天开始笔记断言的部分。

    总结今天的知识:

         1、 分离测试固件,将公共部分放在另一.py文件模块中,方便后期维护
    2、 利用unittest中的skip()方法忽略不需要执行的案例
    来自子努力学习的新手,有错误的地方,请帮忙指点。有不理解的小伙伴,可以直接留言哦。一起学习,希望我的笔记对你也有帮助~
  • 相关阅读:
    洛谷P1306 斐波那契公约数
    Codevs 1688 求逆序对(权值线段树)
    poj1006 Biorhythms
    2017-9-2 NOIP模拟赛
    洛谷P1633 二进制
    洛谷P2513 [HAOI2009]逆序对数列
    洛谷P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower
    洛谷P2285 [HNOI2004]打鼹鼠
    2017-8-31 NOIP模拟赛
    洛谷P2134 百日旅行
  • 原文地址:https://www.cnblogs.com/woshidaliua/p/11379951.html
Copyright © 2011-2022 走看看