软件测试肖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()  #调用所有的用例

类的开始
方法开始
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()  #调用所有的用例

三、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()  #调用所有的用例

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

运行中出现全部修改路径:
软件测试肖sir__python之ui自动化测试框架unittest_第1张图片
案例:

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)

(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)

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

a、下载一个报告模板:
在这里插入图片描述
软件测试肖sir__python之ui自动化测试框架unittest_第2张图片
b、跑出来报告
软件测试肖sir__python之ui自动化测试框架unittest_第3张图片

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)

你可能感兴趣的:(python,ui,开发语言)