UnitTest框架
是Python自带的单元测试框架,也可以用来做自动化测试(管理和执行用例)
核心要素(组成):
1、TestCase(测试用例)
2、TestSuite(测试套件):打包TestCase
3、TestRunner(测试执行):执行Testsuite
4、TestLoader(测试加载):对TestSuite的补充,也是打包TestCase的
5、Fixture(测试夹具):一种代码结构,书写前置方法(执行用例之前的方法)和后置方法(执行用例之后的方法)
单个用例创建及执行
import unittest # 定义测试类(只要继承unittest.TestCase类,就是测试类) class TestDemo(unittest.TestCase): # 书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头 def test01(self): print('测试方法一') def test02(self): print('测试方法二') # 执行 if __name__ == '__main__': unittest.main()
多个用例及执行
test_01.py
import unittest # 定义测试类(只要继承unittest.TestCase类,就是测试类) class TestDemo01(unittest.TestCase): # 书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头 def test01(self): print('1-1') def test02(self): print('1-2')
test_02.py
import unittest # 定义测试类(只要继承unittest.TestCase类,就是测试类) class TestDemo02(unittest.TestCase): # 书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头 def test01(self): print('2-1') def test02(self): print('2-2')
testSuite_Runner.py
import unittest from test_01 import TestDemo01 from test_02 import TestDemo02 suite = unittest.TestSuite() # 实例化套件对象 # 方法一:往测试套件里添加测试类中的某一个测试方法 #suite.addTest(TestDemo01('test01')) # 套件对象.addTest(测试类名('测试方法名')) #suite.addTest(TestDemo01('test02')) # 套件对象.addTest(测试类名('测试方法名')) #suite.addTest(TestDemo02('test01')) # 套件对象.addTest(测试类名('测试方法名')) #suite.addTest(TestDemo02('test02')) # 套件对象.addTest(测试类名('测试方法名')) # 方法二:往测试套件里添加测试类下所有的测试方法 #suite.addTest(unittest.makeSuite(TestDemo01)) #suite.addTest(unittest.makeSuite(TestDemo02)) # 方法三:用TestLoader发现所有案例,得到的是套件对象 suite = unittest.TestLoader().discover('.', 'test_*.py') runner = unittest.TextTestRunner() # 实例化执行对象 runner.run(suite) # 执行对象.run(套件对象)
fixture的使用
testCases.py
import unittest class TestLogin(unittest.TestCase): # 前置类方法 @classmethod # 类方法,需要添加装饰器 def setUpClass(cls): print('1.open brower') # 后置类方法 @classmethod def tearDownClass(cls): print('9.close brower') # 前置方法 def setUp(self): print('2.input url') print('3.click login') # 后置方法 def tearDown(self): print('7.click logout') print('8.close url') def testLogin1(self): print('4.input user 1') print('5.input password 1') print('6.click login button') def testLogin2(self): print('4.input user 2') print('5.input password 2') print('6.click login button') if __name__ == '__main__': unittest.main()
testRunner.py
import unittest suite = unittest.TestLoader().discover('.', 'testCases.py') unittest.TextTestRunner().run(suite)
# 执行结果如下
1.open brower # 前置类方法
2.input url # 前置方法
3.click login
4.input user 1
5.input password 1
6.click login button
7.click logout # 后置方法
8.close url
.2.input url # 前置方法
3.click login
4.input user 2
5.input password 2
6.click login button
7.click logout # 后置方法
8.close url
.9.close brower # 后置类方法
断言
tools.py
def add(a, b): return a + b
assert_case.py
import unittest from tools import add class AssertCase(unittest.TestCase): def test01(self): ## 测试类.assertEqual(预期结果,实际结果) self.assertEqual(2, add(1, 1)) def test_assert_not_equal2(self): self.assertEqual(3, add(1, 2)) def test_assert_in3(self): ## 测试类.assertIn(预期结果,实际结果集) 预期结果在实际结果集里面 self.assertIn(add(2, 3), [5, 6, 7]) if __name__ == '__main__': unittest.main()
assert_runner.py
import unittest from assert_case import AssertCase suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(AssertCase)) unittest.TextTestRunner().run(suite)
断言+参数化(paramterized需要提前用pip安装)
assert_case.py
import unittest import json from tools import add from parameterized import parameterized # data = [(2, 1, 1), (3, 1, 2), (4, 2, 2), (5, 3, 2)] # 方法一 将数据源直接写在Python文件中 # 方法二 将数据源写在json文件中 with open('data.json', encoding='utf-8') as f: data = json.load(f) # [[2, 1, 1], [3, 1, 2], [4, 2, 2], [5, 3, 2]] class AssertCase(unittest.TestCase): @parameterized.expand(data) # 直接取数据源列表[(),()] def test01(self, excpect, a, b): ### 测试类.assertEqual(预期结果,实际结果) self.assertEqual(excpect, add(a, b)) if __name__ == '__main__': unittest.main()
assert_runner.py
#import unittest #from assert_case import AssertCase #suite = unittest.TestSuite() #suite.addTest(unittest.makeSuite(AssertCase)) # unittest.TextTestRunner().run(suite) # 生成测试报告(替换下runner对象) import unittest from htmltestreport import HTMLTestReport from assert_case import AssertCase suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(AssertCase)) HTMLTestReport('HTMLTestReport.html', 'TestRepoer', 'This is a test report.').run(suite)
跳过
import unittest v = 2 class SkipCase(unittest.TestCase): @unittest.skip('暂时不想执行') def testCase01(self): print('test01') @unittest.skipIf(v >= 2, '版本大于等于2就不执行') def testCase02(self): print('test02') def testCase03(self): print('test03') if __name__ == '__main__': unittest.main()
标签:__,UnitTest,self,suite,print,import,unittest From: https://www.cnblogs.com/SakuraYuanYuan/p/17938581