断言
断言的定义
断言的定义
概念: 断言就是让程序代替人为判断测试程序执行结果是否符合预期结果的过程。
断言的意义
实现自动化测试
断言结果
True: 用例通过 False: 用例未通过
常见的断言方法
。。。。有很多
使用方法:
self.aseertEqual(预期结果,实际结果) 相等 ,则预期通过。不相等则是不通过。 self.assertIn(预期结果,实际结果) 判读预期结果是否包含在实际结果中 实际>预期 包含则为true
使用断言来比较之前的测试
def test_demo(self): # 比较实际结果 和 预期结果是否相等 self.assertEqual(3, add(1, 2)) # 用上面的代替下面的 def test_demo1(self): # 比较实际结果 和 预期结果是否相等 if add(10, 11) == 22: print("测试通过!") else: print("测试不通过!")
他不会生成结果,如果测试失败他就不会通过,如果成功, 那么就会显示ok, 然后通过下面的步骤就可以导出测试报告。
参数化
参数化 在测试方法中, 通过使用 变量来代替具体的测试数据, 然后使用传参的方法将 数据传递给方法变量。 好处 : 相似的代码不需要重复读写 日常场景: 测试数据一般放在json数据中 使用读取json文件, 提取我们需要的数据
安装相关的插件
通过终端 : 输入 pip install parameterized即可
步骤
步骤: 1. 导包 2. 定义测试类 3. 书写测试方法(用到的测试数据使用变量代替) 4. 组织测试数据并传参 (数据和顺序需要保证一致)
# 1. 导包 import unittest from parameterized import parameterized from Demo.tools import add # 2. 定义测试类 ,书写测试方法 。(用到的测试数据使用变量代替) class testAddOne(unittest.TestCase): """自定义测试类,实现测试方法的书写""" @parameterized.expand(data) # 使用装饰器的方法传参 def test_demo(self, paramA, paramB, expect): # 比较 预期结果 and 实际结果 是否相等 self.assertEqual(expect, add(paramA, paramB))
组织测试数据并传参 # 组织测试数据 组织数据的格式 # [(),(),()....] 或者 [[],[],[],[]....] data = [ (1, 2, 3), (11, 21, 32), ... ]
传参通过装饰器的方法(也就是Java中的注解形式)
@parameterized.expand(data) # 使用装饰器的方法传参
def test_demo(self, paramA, paramB, expect)
参数化二
通过导入测试化数据的方式来完成测试
1.导入测试化数据
2.完成对数据的读取和转换(通过定义方法完成)
def build_Data(): data = [] # 用于接收数据 with open('H:\pythonStudy\Case\data.json', encoding='UTF-8') as f: result = json.load(f) # f中是列表里面套元组的过程, 而我们需要的是列表里面套列表的形式 for i in result: # i 就是里面的每个数据 { XXX } # 将数据存储到data中, 然后作为组织测试数据返回 data.append((i.get('param1'), i.get('param2'), i.get('param3'))) return data
在自定义测试类中,通过装饰器传参导入数据
class testAddOne(unittest.TestCase): """自定义测试类,实现测试方法的书写""" @parameterized.expand(build_Data()) # 使用装饰器的方法传参 def test_demo(self, paramA, paramB, expect): # 比较 预期结果 and 实际结果 是否相等 self.assertEqual(expect, add(paramA, paramB))
跳过
对一些未完成的 ,或者不满足测试条件的测试函数和测试类,可以跳过执行
使用方法
直接将测试函数标记成为跳过 @unittest.skip('代码为完成') # 根据条件判断测试函数是否跳过 @unittest.skipIf(condition,reason)
实现
class testAddOne(unittest.TestCase): """自定义测试类,实现测试方法的书写""" version = 30 # @unittest.skipIf() @parameterized.expand(build_Data()) # 使用装饰器的方法传参 def test_demo(self, paramA, paramB, expect): # 比较 预期结果 and 实际结果 是否相等 self.assertEqual(expect, add(paramA, paramB)) @unittest.skipIf(version >= 30, '版本号大于等于30 ,不用测试') def test_demo1(self): # 比较实际结果 和 预期结果是否相等 if add(10, 11) == 22: print("测试通过!") else: print("测试不通过!") @unittest.skip("不想测试了") def test_demo2(self): # 比较实际结果 和 预期结果是否相等 if add(11, 2) == 13: print("测试通过!") else: print("测试不通过!")
测试报告的生成
只有testCase的才能生成 ,使用testSuite 和 testRunner包装的套件对象无法生成
使用第三方的类库生成报告
将第三方的测试运行类模块放在当前代码的目录中 步骤 : 1. 导包unittest 2. 使用套件对象 ,加载对象, 去添加测试用例 3. 实例化第三方的运行对象, 并运行套件对象