Python基础day16-断言参数化测试数据

ops/2024/12/17 4:14:41/
  • 断言

使用代码自动的判断预期结果和实际结果是否相符
assertEqual(预期结果,实际结果)

  • 判断预期结果 和 实际结果是否相等,如果相等,用例通过,如果不想等,抛出异常,用例不通过

assertIn(预期结果,实际结果)

  • 判断预期结果是否包含在 实际结果中,如果存在,用例通过,如果不存在,抛出异常,用例不通过

在这里插入图片描述

  • hm_01_assert.py(断言用例)
import unittestclass TestAssert(unittest.TestCase):def test_equal_1(self):self.assertEquals(10, 10)   # 用例通过def test_assert_2(self):self.assertEquals(10, 11)    # 用例不通过def  test_in(self):# self.assertIn('admin', '欢迎 admin 登录')   # 包函 通过# self.assertIn('admin', '欢迎 adminnnnnnnnn 登录')  # 包函 通过# self.assertIn('admin', '欢迎 aaaaaaadminnnnnnnnn 登录')  # 包函 通过self.assertIn('admin', '欢迎 addddmin 登录')  # 不包函 不通过# self.assertIn('admin', 'admin')
  • hm_01_suite.py(执行用例)
import unittestfrom testDemo8.hm_01_assert import TestAssertsuite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestAssert))runner = unittest.TextTestRunner()
runner.run(suite)
  • 作业
  • tools.py
# 这是开发的代码,测试写测试用例测试
def add(a, b):return a + b
  • hm_02_test_add.py(测试用例)
import unittest
from testDemo8.tools import add
class TestAdd(unittest.TestCase):def test_1(self):self.assertEquals(2, add(1, 1))def test_2(self):self.assertEquals(3, add(1, 2))def test_3(self):self.assertEquals(7, add(3, 4))def test_4(self):self.assertEquals(9, add(4, 5))
  • 参数化
  • 通过参数的方式来传递数据,从而实现数据和脚本分离。并且可以实现用例的重复执行。(在书写用例方法的时候**,测试数据使用变量代替,在执行的时候进行参数传递**)
  • unittest 测试框架,本身不支持参数化,但是可以通过安装unittest扩展插 件 parameterized 来实现。
  • 环境准备

因为参数化的插件 不是 unittest 自带的,所以想要使用 需要进行安装
Python 中 包(插件,模块) 的安装,使用 pip 工具
pip3 install parameterized
pip install -i https://pypi.douban.com/simple/ parameterized

在终端(cmd)中执行

在这里插入图片描述

pip3 list # 查看安装的所有的插件
在这里插入图片描述
from pa… import pa…
from parameterized import parameterized

  • 使用
  1. 导包 from para... import para...
  2. 修改测试方法,将测试方法中的测试数据使用 变量表示
  3. 组织测试数据,格式 [(), (), ()], 一个元组就是一组测试数据
  4. 参数化,在测试方法上方使用装饰器 @parameterized.expand(测试数据)
  5. 运行(直接 TestCase 或者 使用 suite 运行)
import unittest
from testDemo8.tools import add
from parameterized import parameterizeddata = [(1, 1, 2), (1, 2, 3), (2, 3, 5), (4, 5, 9)]class TestAdd(unittest.TestCase):"""expect:预期结果"""@parameterized.expand(data)def test_add(self, a, b, expect):print(f'a:{a}, b:{b}, expect:{expect}')self.assertEquals(expect, add(a, b))if __name__ == '__main__':unittest.main()
  • 练习

将测试数据 定义为 json 文件*(列表数据格式)*, 读取 json 文件,完成参数化
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用round保留2为小数,

  • 练习进阶
    **json测试数据是列表字典格式 [{},{},{},……]
    1)测试数据.json
    在这里插入图片描述
    2)read_data_1.py(读取测试数据)
import json
def build_data_1():with open('add_data_1.json', 'r', encoding='utf-8') as f:data_list = json.load(f)  # [{},{},{},{}]new_list = []for data in data_list:  #  字典a = data.get('a')b = data.get('b')expect = data.get('expect')# c = (a, b, expect)  # 元组# new_list.append(c)  # 元组放入列表中 [(),(),()]new_list.append((a, b, expect))  # 也可以一步到位,元组放入列表中 [(),(),()]return new_listdef build_data_2():with open('add_data_1.json', 'r', encoding='utf-8') as f:data_list = json.load(f)  # [{},{},{},{}]new_list = []for data in data_list:  # 字典# 字典的值,是否都需要# 获取所有字典的值 data.values()# 将一组字典的值放入元组中 ,tuple(data.values())转换# 放到新列表中new_list.append(tuple(data.values()))return new_listif __name__ == '__main__':print(build_data_1())print(build_data_2())

3)hm_03_test_add_pa1_1.py(执行测试用例)

import unittest
from testDemo8.tools import add
from parameterized import parameterized
from read_data_1 import build_data_1,build_data_2# data = [(1, 1, 2), (1, 2, 3), (2, 3, 5), (4, 5, 9)]class TestAdd(unittest.TestCase):"""expect:预期结果"""# @parameterized.expand(build_data_1())@parameterized.expand(build_data_2())def test_add(self, a, b, expect):print(f'a:{a}, b:{b}, expect:{expect}')self.assertEquals(expect, add(a, b))if __name__ == '__main__':unittest.main()

在这里插入图片描述


http://www.ppmy.cn/ops/142537.html

相关文章

9. 高效利用Excel设置归档Tag

高效利用Excel设置归档Tag 1. Excle批量新建/修改归档Tag2. 趋势记录模型批量导入归档Tag(Method1)2. 趋势记录模型批量导入归档Tag(Method2)3. 趋势记录控件1. Excle批量新建/修改归档Tag Fcatory Talk常常需要归档模拟量,对于比较大的项目工程会有成千上万个重要数据需…

Scala中的字符串来读取文件

在Scala中,可以使用 Source 类(来自 scala.io 包)来读取文件内容到字符串。以下是一个简单示例: scala import scala.io.Source object FileToString { def readFileToString(filePath: String): String { try { val source So…

ios h5中在fixed元素中的input被focus时,键盘遮挡input (van-popup、van-feild)

问题描述: 前提:我使用的是vant组件库,其中一个页面中有一个van-popup组件,van-popup组件中又嵌套了一个van-field组件预期结果:当点击van-feild输入框时,键盘弹起,输入框显示在键盘上方实际结…

Java应用性能优化:Redis与Memcached缓存

文章目录 缓存简介基本原理优势与挑战 Java应用程序中集成Redis和Memcached添加依赖配置连接RedisMemcached 缓存操作RedisMemcached 高级特性RedisMemcached 综合建议 缓存简介 基本原理 命中率(Hit Rate):当应用程序尝试读取数据时&#x…

开源分布式系统追踪 02-pinpoint-01-入门介绍

分布式跟踪系列 CAT cat monitor 分布式监控 CAT-是什么? cat monitor-02-分布式监控 CAT埋点 cat monitor-03-深度剖析开源分布式监控CAT cat monitor-04-cat 服务端部署实战 cat monitor-05-cat 客户端集成实战 cat monitor-06-cat 消息存储 skywalking …

1_linux系统网络性能如何优化——几种开源网络协议栈比较

之前合集《计算机网络从入门到放弃》第一阶段算是已经完成了。都是理论,没有实操,让“程序猿”很难受,操作性不如 Modbus发送的报文何时等到应答和 tcp通信测试报告单1——connect和send。开始是想看linux内核网络协议栈的源码,然…

23种设计模式之状态模式

目录 1. 简介2. 代码2.1 State (定义抽象状态接口)2.2 StartState (实现具体状态类)2.3 EndState (实现具体状态类)2.4 Context (定义上下文类)2.5 Test (测试类&#xf…

Ape-DTS:开源 DTS 工具,助力自建 MySQL、PostgreSQL 迁移上云

Ape-DTS 是一款高效、轻量级且功能强大的开源工具,专注于解决数据迁移、同步、校验、订阅与加工的需求。无论是将自建的 MySQL/PostgreSQL 数据库迁移到云端,还是在不同数据库间进行数据迁移,Ape-DTS 都能为您提供便捷且可靠的解决方案。它特…