首页 > 其他分享 >自动化测试中自定义断言的实现方法

自动化测试中自定义断言的实现方法

时间:2023-09-27 11:33:15浏览次数:51  
标签:logging 断言 自定义 my equal 自动化 日志 True


断言定义

熟悉单元测试的同学都知道在测试用例中,执行完测试用例后,通过断言(assert)判断测试结果是pass还是fail。不同的单元测试框架都提供了断言机制,我们这里以python为例进行说明。Python中的断言类型丰富,最常用的是基础断言和集合断言。基础断言包括的核心方法如下所示,主要功能是对两个值进行比较。

 

自动化测试中自定义断言的实现方法_unittest

集合断言包括的核心方法如下所示,主要功能是对多个值进行比较。

 

自动化测试中自定义断言的实现方法_测试用例_02

自定义断言基础编码

我们可以使用 ‘==’来判断两个对象的值是否相等,进而打造我们自己的断言函数。核心代码如下:

def my_equal(p_a,p_b):
      if p_a==p_b:
          return True
      else:
          return False

我们可以输入不同的参数进行测试

print(my_equal('a',123)) 显示False
print(my_equal('a', b')) 显示False
print(my_equal('a', a')) 显示True
print(my_equal(True,True)) 显示True
l1=[1,2,3]
l2=[1,2,3]
print(my_equal(l1,l2)) 显示True

可以看到这个简单的方法就解决了单值和多值的比较操作!

自定义断言扩展

因为my_equal方法是我们自己定义的方法,我们就可以对其进行扩展,比如可以把比较结果写入一个日志中!我们可以使用python的logging模块解决该问题,核心代码如下:

import logging  # 引入logging模块
logging.basicConfig(level=logging.DEBUG, #设置日志级别
filename='report.log', #设置日志输出到当前py文件的report.log中
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  # logging.basicConfig函数对日志的输出
修改my_equal源码,增加日志写入功能,代码如下:
def my_equal(p_a,p_b):
      if p_a==p_b:
          logging.info(str(p_a)+'等于'+str(p_b)+'\n')#写入日志
          return True
      else:
           logging.error(str(p_a) + '不等于' + str(p_b)+'\n') #写入日志
           return False

在此调用my_equal方法,会在report.log中输出如下内容:

2020-05-19 15:11:10,017 - case_demo.py[line:13] - ERROR: a不等于123

2020-05-19 15:11:10,028 - case_demo.py[line:13] - ERROR: a不等于<__main__.A object at 0x0000024D174D97C8>

2020-05-19 15:11:10,028 - case_demo.py[line:10] - INFO: True等于True

2020-05-19 15:11:10,028 - case_demo.py[line:10] - INFO: [1, 2, 3]等于[1, 2, 3]

以上就是把测试校验结果写入日志的核心方法,大家也可以对其进行扩展,把日志写入到html文件中,然后在加上漂亮的样式来打造自己的测试报告,这里只是抛砖引玉,有兴趣的同学可以自己进行实践!

总结

现在会编码已经成了测试人员的必备技能,但是测试人员平时又很少有编码的机会,所以我们要在实际工作中自己发现可以通过编码来提升效率的点,然后不断的实践和完善,慢慢的大家的代码能力就会得到显著提升。还是那句话,代码是写出来的,所以大家一定要多动手!原创不易,如果文章帮到了你,欢迎转发,让更多的朋友受益!跟着Kevin老师一起,每天进步一点点,终会质变!让你面试拿高薪!

标签:logging,断言,自定义,my,equal,自动化,日志,True
From: https://blog.51cto.com/liwen629/7622144

相关文章

  • OpenHarmony装饰指定自定义组件:@BuilderParam装饰器
     当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题,ArkUI引入了@BuilderParam装饰器,@BuilderParam用来装饰指向@Builder方法的变量,开......
  • 接口自动化--postman(2)高级用法
    Postman管理测试用例Postman可以使用自带的用例集管理测试用例(Collection)Collection:类似于一个文件系统,可以添加文件、子文件、请求等等,它是Postman内部的模拟的文件系统,不是真的文件系统第一步:添加用例集第二步:用例集下添加子文件夹第三步:添加请求如果有多个接口或者接口......
  • 五分钟理解什么是自动化测试架构设计
    自动化测试常见的问题如下:1)产品UI经常变化,导致测试脚本不能复用。(2)测试脚本不够健壮,导致脚本回放时,测试脚本本身经常出错。(3)网络延迟,数据加载延迟造成测试脚本失败。(4)识别对象的ID可读性差,导致测试脚本的可读性差。(5)录制的测试代码过于庞大而且应变性差,导致测试脚本的复用......
  • 自定义Zabbix监控
    自定义Zabbix监控项1.为什么要自定义监控项模板里面提供了大量的监控项,为何还要自定义?那肯定是有些你想监控的内容,模板里没有当然,zabbix支持你自定义的监控项,所以才那么流行!2.自定义监控项流程1.自定义监控项的表现形式是(命令、脚本),只要能获取到值,就可以通过zabbix展示完......
  • qt自定义实体类
    在Qt中,可以创建自己的实体类(EntityClass)来表示应用程序中的数据对象或模型。这些实体类通常用于表示数据、管理数据和进行数据操作。以下是创建Qt自定义实体类的一般步骤:创建一个新的C++类:使用QtCreator或您喜欢的C++集成开发环境,创建一个新的C++类来表示实体。可以选择从QObject......
  • 利用SPI实现全自动化——LCD屏与RGB灯
     如果你开启了广告屏蔽,请将博客园加入白名单,帮助博客园渡过难关,谢谢! 前言在21年做物理实验和23年客串电赛之后,我带着STM32重回电子DIY界。这次的项目是一个电池供电的补光灯,由于用途更偏向艺术创作而非严肃照明,选用了WS2812RGB灯带;控制灯带的参数需要呈现给用户,通过LCD屏的......
  • selenium自动化测试+OCR-获取图片页面小说
    随着爬虫技术的发展,反爬虫技术也越来越高。目前有些网站通过自定义字体库的方式实现反爬,主要表现在页面数据显示正常,但是页面获取到的实际数据是别的字符或者是一个编码。这种反爬需要解析网站自己的字体库,对加密字符使用字体库对应字符替换。需要制作字体和基本字体间映射关系。......
  • 使用vite插件进行低代码平台自定义开发(手机版自定义范例)
    前言Youtube上的前端网红「Theo」在React文档仓库发起了一个Pullrequest,号召React文档不要再默认推荐CRA(createreactapp),而是应该将Vite作为构建应用的首选。vite的影响力已经从vue蔓延到了react,可见在前端工程化开发中,它已经越来越流行,是时候该从webpack切换到vite了。为什么......
  • 使用vite插件进行低代码平台自定义开发(手机版自定义范例)
    前言Youtube上的前端网红「Theo」在React文档仓库发起了一个Pullrequest,号召React文档不要再默认推荐CRA(createreactapp),而是应该将Vite作为构建应用的首选。vite的影响力已经从vue蔓延到了react,可见在前端工程化开发中,它已经越来越流行,是时候该从webpack切换到vite了。为......
  • 自动化模式下,企业全面预算管理的提升
    近年来,经济世界不确定事件的频频发生,让企业开始关注自身的关键财务弱点。企业在财务能力敏捷性提升的方面仍存在一定的差距,而在数字化转型过程中进行的投资不够,将难以推动企业冲出重围,提高前瞻性和自身预测能力。这预示着数字化转型的紧迫性,而部分企业在转型和改革过程中,在不确定的......