测试框架分层:单元测试——接口测试——ui测试
1.单元测试
常见的单元测试框架:unittest pytest junit(java)
unittest框架优点:
-
实现批量执行用例
-
提供丰富的断言方法
-
可以生成html形式的测试报告
核心要素
-
testcase(测试用例)
-
test fixure(测试夹具,用于环境的搭建和销毁,搭建setup前置条件,teardown后置条件)
-
test suite(测试套件,把用例都放进去)
-
test runner(用来执行用例)夹具testfixture
就像是夹心饼干外面的两片饼干,中间的奶油是测试用例
setup/teardown (用例开始前和结束时执行)
#math3文件
#定义一个类
class Math:
#定义初始化方法
def __init__(self,a,b):
self.a = a
self.b = b
#定义求和方法
def add(self):
return self.a + self.b
# 定义求差方法
def minus(self):
return self.a - self.b
写两条用例
#test_math文件
import unittest
from math3 import Math
#定义测试类
class TestMath(unittest.TestCase):
#实例化Math的对象
mm = Math(5, 1)
#定义测试用例级别的前置条件
def setUp(self):
print("用例开始执行")
#定义测试用例,验证求和功能
def test_add(self):
# math = Math(5,1)
num1 = self.mm.add()
#断言结果是否一致
self.assertEqual(num1,6)
print("求两数之和")
# 定义测试用例,验证差功能
def test_minus(self):
num2 = self.mm.minus()
# 断言结果是否一致
self.assertEqual(num2,4)
print("求两数之差")
def tearDown(self):
print("用例执行结束")
if __name__ == '__main__':
# 生成测试套件
suite = unittest.TestSuite()
#把加法用例放到测试套件里
suite.addTest(TestMath('test_add'))
#把减法用例放到测试套件
suite.addTest(TestMath('test_minus'))
# 运行用例
runner = unittest.TextTestRunner()
runner.run(suite)
setupclass/teardownclass(用例类开始前和结束时执行)
#test_math文件
import unittest
from math3 import Math
#定义测试类
class TestMath(unittest.TestCase):
#测试类级别夹具
@classmethod
def setUpClass(cls):
print("我是类级别测试夹具前置条件")
@classmethod
def tearDownClass(cls):
print("我是类级别测试夹具后置条件")
#实例化Math的对象
mm = Math(5, 1)
#定义测试用例级别的前置条件
def setUp(self):
print("用例开始执行")
#定义测试用例,验证求和功能
def test_add(self):
# math = Math(5,1)
num1 = self.mm.add()
#断言结果是否一致
self.assertEqual(num1,6)
print("求两数之和")
# 定义测试用例,验证差功能
def test_minus(self):
num2 = self.mm.minus()
# 断言结果是否一致
self.assertEqual(num2,4)
print("求两数之差")
def tearDown(self):
print("用例执行结束")
#定义一个测试类2
class TestDome(unittest.TestCase):
@classmethod
#定义类级别的前置条件
def setUpClass(self):
print("测试类2的类级别前置条件")
@classmethod
#定义类级别的前置条件
def tearDownClass(self):
print("测试类2的类级别后置条件")
#用例级别的夹具
def setUp(self):
print("测试类2用例的前置条件")
def tearDown(self):
print("测试类2用例的后置条件")
#定义测试用例
def test_demo01(self):
self.assertEqual(1+2,3)
if __name__ == '__main__':
# 生成测试套件
suite = unittest.TestSuite()
#把加法用例放到测试套件里
suite.addTest(TestMath('test_add'))
#把减法用例放到测试套件
suite.addTest(TestMath('test_minus'))
suite.addTest(TestDome('test_demo01'))
# 运行用例
runner = unittest.TextTestRunner()
runner.run(suite)
setupmodle/teardownmodle(整个模块开始前和结束时执行)
#test_math文件
import unittest
from math3 import Math
#定义模块级别的测试夹具
def setUpModule():
print("我是模块级别的前置条件")
def tearDownModule():
print("我是模块级别的后置条件")
#定义测试类
class TestMath(unittest.TestCase):
#测试类级别夹具
@classmethod
def setUpClass(cls):
print("我是类级别测试夹具前置条件")
@classmethod
def tearDownClass(cls):
print("我是类级别测试夹具后置条件")
#实例化Math的对象
mm = Math(5, 1)
#定义测试用例级别的前置条件
def setUp(self):
print("用例开始执行")
#定义测试用例,验证求和功能
def test_add(self):
# math = Math(5,1)
num1 = self.mm.add()
#断言结果是否一致
self.assertEqual(num1,6)
print("求两数之和")
# 定义测试用例,验证差功能
def test_minus(self):
num2 = self.mm.minus()
# 断言结果是否一致
self.assertEqual(num2,4)
print("求两数之差")
def tearDown(self):
print("用例执行结束")
#定义一个测试类2
class TestDome(unittest.TestCase):
@classmethod
#定义类级别的前置条件
def setUpClass(self):
print("测试类2的类级别前置条件")
@classmethod
#定义类级别的前置条件
def tearDownClass(self):
print("测试类2的类级别后置条件")
#用例级别的夹具
def setUp(self):
print("测试类2用例的前置条件")
def tearDown(self):
print("测试类2用例的后置条件")
#定义测试用例
def test_demo01(self):
self.assertEqual(1+2,3)
if __name__ == '__main__':
# 生成测试套件
suite = unittest.TestSuite()
#把加法用例放到测试套件里
suite.addTest(TestMath('test_add'))
#把减法用例放到测试套件
suite.addTest(TestMath('test_minus'))
suite.addTest(TestDome('test_demo01'))
# 运行用例
runner = unittest.TextTestRunner()
runner.run(suite)
2.常用断言
import unittest
class TestAssert(unittest.TestCase):
#定义前置条件
def setUp(self):
print("用例前置条件")
# self.name = input("请输入姓名:")
# #定义一个变量存名字
# self.age = int(input("请输入年龄:"))
# 定义后置条件
def tearDown(self):
print("这是用例的后置条件")
# #定义两个参数是否相等
# def test_demo01(self):
# self.assertEqual(self.name,"老王","55")
# #不相同则成功,相同则失败提示用例失败
# def test_demo02(self):
# self.assertNotEqual(self.name,"救救","用例失败")
# #输入年龄判断是否大于18岁,大于或等于则成功,否则失败
# 结果true成功,false失败
# def test_demo03(self):
# self.assertTrue((self.age+10)>=18,"未达18岁,用例失败")
#结果false成功,true失败
def test_demo04(self):
self.assertFalse(1+1==2,"用例失败")
#主方法
if __name__ =='__main__':
unittest.main()