• 软件测试肖sir__python之ui自动化测试框架unittest


    ui自动化测试框架unittest
    一、自动化框架
    1、自动化框架类型
    (1)unittest框架 (python中自带框架)
    (2)pytest框架 (第三方库)
    (3)po框架 (分层思维)
    2、自动化框架作用:管理和组织用例

    二、介绍下:unittest框架
    代码:

    import  unittest  #导入自动化测试框架
    class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase   cms类名
         @classmethod  #类方法
         def  setUpClass(cls) -> None: #类的开始
             print('类的开始')
         @classmethod
         def  tearDownClass(cls) -> None:  #类的结束
             print('类的结束')
         def setUp(self) -> None: #方法的开始
             print('方法开始')     #运行前准备工作,
         def  tearDown(self) -> None:
             print('方法结束')   #运行后的工作关闭窗口,时间等待
         def  test1(self):  #用例1
             print('1111')
         def  test2(self): ##用例2
             print('3333')
         def   testA(self): ##用例3
             print('AAAA')
         def   testa(self):
             print('aaaa')
         def   bbb(self):
             print('bbb')
    if __name__ == '__main__':  #main函数
        unittest.main()  #调用所有的用例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    类的开始
    方法开始
    1111
    方法结束
    方法开始
    3333
    方法结束
    方法开始
    AAAA
    方法结束
    方法开始
    aaaa
    方法结束
    类的结束

    总结:
    1、类的开始,类的结束只执行一次
    2、方法开始,方法结束 每一次都执行了
    3、运行时顺序按照ascii码排序:0-9,A-Z,a-z
    4、用例必须用test开头,如果没有test开头就不运行

    二、实际项目用例编写

    from selenium import webdriver
    import time
    
    import  unittest  #导入自动化测试框架
    class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase   cms类名
         @classmethod  #类方法
         def  setUpClass(cls) -> None: #类的开始
             print('类的开始')
         @classmethod
         def  tearDownClass(cls) -> None:  #类的结束
             print('类的结束')
         def setUp(self) -> None: #方法的开始
             self.dx = webdriver.Chrome()  # 创建一个 webdriver对象
             self.dx.get("https://www.baidu.com/")  # 通过对象打开网址
             time.sleep(3)   #运行前准备工作,
         def  tearDown(self) -> None:
             time.sleep(3)
             self.dx.close()
             # print('方法结束')   #运行后的工作关闭窗口,时间等待
         def  test1(self):  #用例1
             self.dx.find_element_by_id("kw").send_keys('python')
         def  test2(self): ##用例2
             self.dx.find_element_by_id("kw").send_keys('html')
         def   testA(self): ##用例3
             self.dx.find_element_by_id("kw").send_keys('mysql')
         def   testa(self):
              self.dx.find_element_by_id("kw").send_keys('linux')
         def   bbb(self):
             self.dx.find_element_by_id("kw").send_keys('我不是test')
    if __name__ == '__main__':  #main函数
        unittest.main()  #调用所有的用例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    三、unittest 调用方法
    (1)第一种调用所有用例unittest.main()

    from selenium import webdriver
    import time
    
    import  unittest  #导入自动化测试框架
    class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase   cms类名
         @classmethod  #类方法
         def  setUpClass(cls) -> None: #类的开始
             print('类的开始')
         @classmethod
         def  tearDownClass(cls) -> None:  #类的结束
             print('类的结束')
         def setUp(self) -> None: #方法的开始
             self.dx = webdriver.Chrome()  # 创建一个 webdriver对象
             self.dx.get("https://www.baidu.com/")  # 通过对象打开网址
             time.sleep(3)   #运行前准备工作,
         def  tearDown(self) -> None:
             time.sleep(3)
             self.dx.close()
             # print('方法结束')   #运行后的工作关闭窗口,时间等待
         def  test1(self):  #用例1
             self.dx.find_element_by_id("kw").send_keys('python')
         def  test2(self): ##用例2
             self.dx.find_element_by_id("kw").send_keys('html')
         def   testA(self): ##用例3
             self.dx.find_element_by_id("kw").send_keys('mysql')
         def   testa(self):
              self.dx.find_element_by_id("kw").send_keys('linux')
         def   bbb(self):
             self.dx.find_element_by_id("kw").send_keys('我不是test')
    if __name__ == '__main__':  #main函数
        unittest.main()  #调用所有的用例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    (2)第二种:调用部分用例
    TestSuite:(套件)
    对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
    TextTestRunner:
    是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在

    运行中出现全部修改路径:
    在这里插入图片描述
    案例:

    import  unittest  #导入自动化测试框架
    class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase
         @classmethod
         def  setUpClass(cls) -> None: #类的开始
             print('类的开始')
         @classmethod
         def  tearDownClass(cls) -> None:  #类的结束
             print('类的结束')
         def setUp(self) -> None: #方法的开始
             print('方法开始')
         def  tearDown(self) -> None:
             print('方法结束')
         def  test1(self):
             print('1111')
         def  test3(self):
             print('3333')
         def test2(self):
             print('2222')
         def   testA(self):
             print('aaaa')
         def   testa(self):
             print('AAAA')
         def   bbb(self):
             print('bbb')
    if __name__ == '__main__':
        # unittest.main()  #调用所有的用例
       tj=unittest.TestSuite() #创建套件对象
       # tj.addTest(Cms('test2'))
       tj.addTests([Cms("test2"),Cms("test3")])
       r=unittest.TextTestRunner()
       r.run(tj)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    (3)第三种:调用一个路径下的用例
    TestLoader:
    是用来搜索所有以test开头的测试用例,

    import  unittest  #导入自动化测试框架
    class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase
         @classmethod
         def  setUpClass(cls) -> None: #类的开始
             print('类的开始')
         @classmethod
         def  tearDownClass(cls) -> None:  #类的结束
             print('类的结束')
         def setUp(self) -> None: #方法的开始
             print('方法开始')
         def  tearDown(self) -> None:
             print('方法结束')
         def  test1(self):
             print('1111')
         def  test3(self):
             print('3333')
         def test2(self):
             print('2222')
         def   testA(self):
             print('aaaa')
         def   testa(self):
             print('AAAA')
         def   bbb(self):
             print('bbb')
    if __name__ == '__main__':
        # unittest.main()  #调用所有的用例  #第一种
       # tj=unittest.TestSuite() #创建套件对象 #第二种
       # # tj.addTest(Cms('test2'))
       # tj.addTests([Cms("test2"),Cms("test3")])
       # r=unittest.TextTestRunner()
       # r.run(tj)
       lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径
       d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
       r=unittest.TextTestRunner()
       r.run(d)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    (4)第四种:使用html报告模板生成自动化测试报告

    a、下载一个报告模板:
    在这里插入图片描述
    在这里插入图片描述
    b、跑出来报告
    在这里插入图片描述

    import  unittest  #导入自动化测试框架
    import time
    from  dcs.dsc2.HTMLTestRunner3_New import HTMLTestRunner
    class   Cms(unittest.TestCase):   #创建一个类,并且集成unittest.testcase
         @classmethod
         def  setUpClass(cls) -> None: #类的开始
             print('类的开始')
         @classmethod
         def  tearDownClass(cls) -> None:  #类的结束
             print('类的结束')
         def setUp(self) -> None: #方法的开始
             print('方法开始')
         def  tearDown(self) -> None:
             print('方法结束')
         def  test1(self):
             print('1111')
         def  test3(self):
             print('3333')
         def test2(self):
             print('2222')
         def   testA(self):
             print('aaaa')
         def   testa(self):
             print('AAAA')
         def   bbb(self):
             print('bbb')
    if __name__ == '__main__':
        # unittest.main()  #调用所有的用例  #第一种
       # tj=unittest.TestSuite() #创建套件对象 #第二种
       # # tj.addTest(Cms('test2'))
       # tj.addTests([Cms("test2"),Cms("test3")])
       # r=unittest.TextTestRunner()
       # r.run(tj)
      # lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径 #第三种
    # d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
    # r=unittest.TextTestRunner()
    # r.run(d)
    
      lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径 #第三种
      d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
      bglj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2"
      new=time.strftime("%y-%m-%d-%H-%M-%S")
      file=bglj+"/"+str(new)+"_ui.html"
      f=open(file,'wb')
      r=HTMLTestRunner(
          stream=f,title="ui自动化测试报告",description="用例执行情况" ,tester="dcs35"
      )
      r.run(d)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
  • 相关阅读:
    【Jmeter】安装配置:Jmeter 安装插件 JSON/YAML Plugins (deprecated)
    云计算和跨境电商:数字化未来的基石
    【网络教程】Iptables官方教程-学习笔记6-IPTABLES TARGETS
    配置多仓库根目录(阁瑞钛伦特软件-九耶实训)
    新型支持苹果 Find My 防丢神器-Chipolo CARD Spot
    使用C语言实现单链表(不带头节点)
    【树莓派不吃灰】命令篇⑥ 了解树莓派Boot分区,学习Linux启动流程
    Java设计模式之迭代器模式
    深入理解浏览器渲染原理
    Delphi7 提示can‘t load package *.bpl 错误问题的解决方法
  • 原文地址:https://blog.csdn.net/m0_47403059/article/details/133963269