• 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()方法忽略不需要执行的案例
    来自子努力学习的新手,有错误的地方,请帮忙指点。有不理解的小伙伴,可以直接留言哦。一起学习,希望我的笔记对你也有帮助~
  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/woshidaliua/p/11379951.html
Copyright © 2020-2023  润新知