自动化单元测试框架unittest 一、介绍自动化测试框架 (1)单元测试框架: python当中的unittest单元测试框架(python自带的库),pytest单元测试框架(pyhton的地方库) (2)unittest单元测试框架作用: 管理和组织测试用例 (3)格式: import unittest # 导入unittest库 class gs(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例) @classmethod #类的方法 def setUpClass(cls) -> None: #类的开始 print(“类的开始”) @classmethod def tearDownClass(cls) -> None: #类的结束 print(“类的结束”) def setUp(self) -> None: #方法开始 print(‘方法开始’) def tearDown(self) -> None:#方法的结束 print(‘方法结束’) def test01(self): #测试用例 print(“用例111”) def test03(self): #测试用例 print(“用例333”) def test02(self): #测试用例 print(“用例222”) def testa(self): #测试用例 print(“用例aaa”) def testA(self): #测试用例 print(“用例AAA”) def testb(self): #测试用例 print(“用例bbb”) def dl(self): print(‘独立’) if name == ‘main’: unittest.main() #ynittest单元测试框架的入口, main调用所有用例 运行结果: 类的开始 .方法开始 用例111 方法结束 .方法开始 用例222 方法结束 .方法开始 用例333 方法结束 .方法开始 用例AAA 方法结束 .方法开始 用例aaa 方法结束 .方法开始 用例bbb 方法结束 类的结束
备注: (1)类的开始和类的结束,在框架中只运行一次 (2)方法的开始,方法的结束每一个用例都要执行一次 (3)运行顺序是按ascii码表排序:0-9A-Za-z (4)用例必须以test开头,如果没有test就不运行
================================================ 案例1:unittest 调用所有的用例
import unittest # 导入unittest库 class gs(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例) @classmethod #类的方法 def setUpClass(cls) -> None: #类的开始 print(“类的开始”) @classmethod def tearDownClass(cls) -> None: #类的结束 print(“类的结束”) def setUp(self) -> None: #方法开始 print(‘方法开始’) def tearDown(self) -> None:#方法的结束 print(‘方法结束’) def test01(self): #测试用例 print(“用例111”) def test03(self): #测试用例 print(“用例333”) def test02(self): #测试用例 print(“用例222”) def testa(self): #测试用例 print(“用例aaa”) def testA(self): #测试用例 print(“用例AAA”) def testb(self): #测试用例 print(“用例bbb”) def dl(self): print(‘独立’) if name == ‘main’: unittest.main()
====================================================== 案例2:unittest.suite suite是一个套件,也可可以看做一个容器, 场景(1):运行一个用例 import unittest # 导入unittest库 class gs(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例) @classmethod #类的方法 def setUpClass(cls) -> None: #类的开始 print(“类的开始”) @classmethod def tearDownClass(cls) -> None: #类的结束 print(“类的结束”) def setUp(self) -> None: #方法开始 print(‘方法开始’) def tearDown(self) -> None:#方法的结束 print(‘方法结束’) def test01(self): #测试用例 print(“用例111”) def test03(self): #测试用例 print(“用例333”) def test02(self): #测试用例 print(“用例222”) def testa(self): #测试用例 print(“用例aaa”) def testA(self): #测试用例 print(“用例AAA”) def testb(self): #测试用例 print(“用例bbb”) def dl(self): print(‘独立’) if name == ‘main’: tj=unittest.TestSuite() # 创建一个套件对象 tj.addTest(gs(‘test01’)) #添加单个用例 r=unittest.TextTestRunner() #创建一个执行对象 r.run(tj) #通过对象调用run方法来运行选择的用例
备注: 1、在运行的过程中,我们要去执行当前环境,如果是运行框架环境就是运行所有的用例,设置的方法: 如下: (1)选择文件copy, path:C:\Users\Administrator\PycharmProjects\gs1\python_ui001\ui_kj.py
(2)配置环境 (3)在配置路径
(4)选择选择,在执行 (2)运行多个用例 import unittest # 导入unittest库 class gs(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例) @classmethod #类的方法 def setUpClass(cls) -> None: #类的开始 print(“类的开始”) @classmethod def tearDownClass(cls) -> None: #类的结束 print(“类的结束”) def setUp(self) -> None: #方法开始 print(‘方法开始’) def tearDown(self) -> None:#方法的结束 print(‘方法结束’) def test01(self): #测试用例 print(“用例111”) def test03(self): #测试用例 print(“用例333”) def test02(self): #测试用例 print(“用例222”) def testa(self): #测试用例 print(“用例aaa”) def testA(self): #测试用例 print(“用例AAA”) def testb(self): #测试用例 print(“用例bbb”) def dl(self): print(‘独立’) if name == ‘main’: tj=unittest.TestSuite() # 创建一个套件对象 tj.addTests([gs(‘test01’),gs(‘testb’)]) #添加多个用例 r=unittest.TextTestRunner() #创建一个执行对象 r.run(tj) #通过对象调用run方法来运行选择的用例
=============================================== 案例3: 情况:执行路径下所有用例 import unittest # 导入unittest库 class gs(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例) @classmethod #类的方法 def setUpClass(cls) -> None: #类的开始 print(“类的开始”) @classmethod def tearDownClass(cls) -> None: #类的结束 print(“类的结束”) def setUp(self) -> None: #方法开始 print(‘方法开始’) def tearDown(self) -> None:#方法的结束 print(‘方法结束’) def test01(self): #测试用例 print(“用例111”) def test03(self): #测试用例 print(“用例333”) def test02(self): #测试用例 print(“用例222”) def testa(self): #测试用例 print(“用例aaa”) def testA(self): #测试用例 print(“用例AAA”) def testb(self): #测试用例 print(“用例bbb”) def dl(self): print(‘独立’) if name == ‘main’: path=r’C:\Users\Administrator\PycharmProjects\gs1\python_ui001’# d=unittest.TestLoader().discover(start_dir=path,pattern=“ui_kj*.py”) r=unittest.TextTestRunner() r.run(d)
================================================ 案例4:输出UI自动化测试报告 (1)场景一:没有添加报告时间 报告模板
import unittest # 导入unittest库 from ui.HTMLTestRunner3_New import HTMLTestRunner class gs(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例) @classmethod #类的方法 def setUpClass(cls) -> None: #类的开始 print(“类的开始”) @classmethod def tearDownClass(cls) -> None: #类的结束 print(“类的结束”) def setUp(self) -> None: #方法开始 print(‘方法开始’) def tearDown(self) -> None:#方法的结束 print(‘方法结束’) def test01(self): #测试用例 print(“用例111”) def test03(self): #测试用例 print(“用例333”) def test02(self): #测试用例 print(“用例222”) def testa(self): #测试用例 print(“用例aaa”) def testA(self): #测试用例 print(“用例AAA”) def testb(self): #测试用例 print(“用例bbb”) def dl(self): print(‘独立’) if name == ‘main’: path=r’C:\Users\Administrator\PycharmProjects\hz2\ui’# d=unittest.TestLoader().discover(start_dir=path,pattern=“ss*.py”) bglj=r’C:\Users\Administrator\PycharmProjects\hz2\ui’ bgwj=bglj+‘/’+‘_ui.html’ f=open(bgwj,‘wb’)# r=HTMLTestRunner(stream=f,title=“ui自动化测试报告”,description=“用例执行情况”, tester=‘gs1期’) r.run(d)
场景2:添加报告时间
import unittest # 导入unittest库 from ui.HTMLTestRunner3_New import HTMLTestRunner from time import * class gs(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例) @classmethod #类的方法 def setUpClass(cls) -> None: #类的开始 print(“类的开始”) @classmethod def tearDownClass(cls) -> None: #类的结束 print(“类的结束”) def setUp(self) -> None: #方法开始 print(‘方法开始’) def tearDown(self) -> None:#方法的结束 print(‘方法结束’) def test01(self): #测试用例 print(“用例111”) def test03(self): #测试用例 print(“用例333”) def test02(self): #测试用例 print(“用例222”) def testa(self): #测试用例 print(“用例aaa”) def testA(self): #测试用例 print(“用例AAA”) def testb(self): #测试用例 print(“用例bbb”) def dl(self): print(‘独立’) if name == ‘main’: path=r’C:\Users\Administrator\PycharmProjects\hz2\ui’# d=unittest.TestLoader().discover(start_dir=path,pattern="ss.py") bglj=r’C:\Users\Administrator\PycharmProjects\hz2\ui’ new=strftime(‘%y-%m-%d -%H-%M-%S’) bgwj=bglj+‘/’+str(new)+‘_ui.html’ f=open(bgwj,‘wb’)# r=HTMLTestRunner(stream=f,title=“ui自动化测试报告”,description=“用例执行情况”, tester=‘gs1期’) r.run(d)*
=================================
================================= 总结: 一、unittest的介绍 当我们写的用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护,而unittest正是这样一款工具 二、unittest是Python自带的标准库中的模块,其中包括: 1、TestCase类 2、TestSuite类 3、TestLoader类 4、TextTestRunner类 5、TextTestResult类 6、TestFixture类 解释下: TestCase: 一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown TestSuite: 对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中 TextTestRunner: 是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中 TestFixture: 测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。 TestLoader: 是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中 图形化解释:如下图
三、框架的组成 在写测试类以及测试用例时要规定一个命名习惯,一般测试类可以以Test开头,也可以以Test结尾。测试用例一般是以test开头。 eg:结构如下: import unittest #导入unittest包 #创建测试类:从unittest.TestCase继承 classRomanNumeralConverterTest(unittest.TestCase): def setUp(self): #初始化测试环境 def tearDown(self): #还原测试环境 def test_case(self):测试用例
|