Hamcrest断言:自动化测试的利器

news2024/12/24 2:13:22

Hamcrest断言:自动化测试中的可读性与表达力利器
背景:在软件开发中,自动化测试是确保软件质量和稳定性的重要环节。为了编写可靠且易于维护的自动化测试脚本,我们需要使用可读性强且表达力强的断言工具。Hamcrest是一个优秀的断言库,它为自动化测试提供了丰富的断言方法和灵活的组合方式。本文将介绍Hamcrest断言库在自动化测试中的价值以及实现细节。

Hamcrest断言库的价值
可读性:Hamcrest断言库以自然语言的方式描述断言条件,使得测试代码更易读、易懂。这样,整个团队都能够更轻松地理解测试的目的和预期结果。

表达力:Hamcrest提供了丰富的断言方法和组合方法,使得我们能够准确地描述预期结果。通过灵活组合这些方法,我们能够编写出更具表达力的自动化测试脚本。

Hamcrest断言库的使用示例 以下是Hamcrest断言库在自动化测试中的使用示例:

import pytest
from hamcrest import assert_that, equal_to, contains_string

def test_login_success():# 模拟登录操作    
    login()# 断言是否成功登录    
    assert_that(is_logged_in(), equal_to(True))

def test_search_results():# 模拟搜索操作    
    search("Hamcrest")# 断言搜索结果是否包含关键词    
    assert_that(get_search_results(), contains_string("Hamcrest"))

在上述代码中,我们使用Hamcrest断言库对两个自动化测试用例进行断言。在第一个测试用例中,我们断言登录操作是否成功,使用equal_to()方法判断返回结果是否等于True。在第二个测试用例中,我们断言搜索结果中是否包含关键词"Hamcrest",使用contains_string()方法进行断言。

自定义断言方法 在自动化测试中,我们常常需要自定义断言方法来适应特定的测试需求。Hamcrest库提供了自定义断言方法的能力,通过编写Matcher对象来实现。以下是一个自定义断言方法的示例:

from hamcrest import Matcher, has_length
class StartsWith(Matcher):
    def __init__(self, prefix):
        self.prefix = prefix
       
    def _matches(self, item):
        return item.startswith(self.prefix)
        
    def describe_to(self, description):
        description.append_text("starts with ").append_text(self.prefix)
     
     def test_custom_assertion():# 使用自定义断言方法    
         assert_that("Hello, World!", StartsWith("Hello"))

在上述代码中,我们定义了一个自定义的Matcher对象StartsWith,用于断言字符串是否以指定的前缀开头。在测试用例test_custom_assertion()中,我们使用自定义的断言方法进行断言。

通过自定义断言方法,我们能够更好地适应不同的测试场景,提升自动化测试的灵活性和可扩展性。

总结:Hamcrest断言库是自动化测试中可读性和表达力的利器。它以自然语言的方式描述断言条件,帮助我们编写更易读、易懂的自动化测试脚本。通过丰富的断言方法和灵活的组合方式,我们能够编写出更具表达力的测试断言。自定义断言方法进一步提高了自动化测试的灵活性和可扩展性。希望本文能帮助你在自动化测试中更好地应用Hamcrest断言库。

HamCrest用法补充
对象

equal_to - 匹配相等对象
has_length - 长度匹配 len()
has_property - 匹配给定名称的属性值
has_properties - 匹配具有所给定属性的对象
has_string - 匹配字符串 str()
instance_of - 匹配对象类型
none, not_none - 匹配none或not none
same_instance - 匹配相同的对象
calling, raises - 封装一个方法调用并断言它引发异常

数字

close_to - 匹配接近给定的数字值
greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to - 匹配数字顺序

文本

contains_string - 匹配部分字符串
ends_with - 匹配字符串的结尾
equal_to_ignoring_case - 匹配完整的字符串但忽略大小写
equal_to_ignoring_whitespace - 匹配完整的字符串,但忽略多余的空格
matches_regexp - 使用正则表达式匹配字符串
starts_with - 匹配字符串的开头
string_contains_in_order - 按相对顺序匹配字符串的各个部分

逻辑

all_of - 如果所有匹配器都匹配才匹配,像Java里的&&
any_of - - 如果任何匹配器匹配就匹配,像Java里的||
anything - 匹配任何东西,如果不关心特定值则在复合匹配器中很有用
is_not, not_ -如果包装的匹配器不匹配器时匹配,反之亦然

序列

contains - 完全匹配整个序列
contains_inanyorder - 以任何顺序匹配整个序列
has_item - 只要给定项目在序列中出现则匹配
has_items - 如果所有给定项以任意顺序出现在序列中则匹配
is_in - 在给定顺序中如果给定项出现则匹配
only_contains - 在给定顺序中如果序列的项目出现则匹配
empty - 如果序列为空则匹配

字典

has_entries - 匹配具有键值对列表的字典
has_entry - 匹配包含键值对的字典
has_key - 使用键匹配字典
has_value - 使用值匹配字典
总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助

  视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1395034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试之Hydra如何B破远程主机RDP登录M码

环境: Hydra9.3 KALI2022 问题描述: 渗透测试之hydra如何B破远程主机RDP登录M码 解决方案: Hydra是一款非常强大的网络登录P解工具。它专门用于测试和评估网络安全,通过暴力P解方式尝试多种用户名和密码组合,以获得对受测试系统的非法访问。Hydra支持各种协议的登录破…

21. 合并两个有序链表(Java)

题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入: l1 [1,2,4], l2 [1,3,4] 输出: [1,1,2,3,4,4] 代码实现: 结点类: public class ListNode {in…

「优选算法刷题」:盛最多水的容器

一、题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器…

基于JavaSocket重写Dubbo网络传输层

前言 我们知道,位于 Serialize 层上面的是负责网络传输的 Transport 层,它负责调用编解码器 Codec2 把要传输的对象编码后传输、再对接收到的字节序列解码。 站在客户端的角度,一次 RPC 调用的流程大概是这样的: Invoker 发起 …

CSS实现的 Loading 效果

方式一、纯CSS实现 代码&#xff1a;根据需要复制 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS Animation Library for Developers and Ninjas</title><style>/* ---------------…

操作系统课程设计-Windows 线程的互斥和同步

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 步骤 3.2 关键代码 3.2.1 创建生产者和消费者进程 3.2.2 生产者和消费者进程 4 实验结果与分析 5 代码 前言 本实验为课设内容&#xff0c;博客内容为部分报告内容&#xff0c;仅为大家提供参考&#xff0c;请勿直接抄…

SqlAlchemy使用教程(五) ORM API 编程入门

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用SqlAlchemy使用教程(五) ORM API 编程入门 前一章用SQL表达式(SQL Expr…

机器学习之卷积神经网络

卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类,因此又称为SIANN。卷积神经网络仿照生物的视知觉机制构建,可以进行监督学习和非监督学习,其隐含层内的…

【Internet Protocol】ip介绍,如何组局域网实现远程桌面和文件共享

文章目录 1.何为“上网”1.1 定义1.2 为什么连了WiFi就能上网了&#xff1f; 2.ip2.1 什么是ip2.2 为什么区分广域网和局域网&#xff0c;ip的唯一性2.3 如何查看设备的ip2.4 什么叫"ping"2.5 区分是否两个ip是否在同一局域网2.5.1 最稳妥的方式&#xff1a;ip&m…

Linux第31步_了解STM32MP157的TF-A

了解STM32MP157的TF-A&#xff0c;为后期移植服务。 一、指令集 ARMV8提供了两种指令集:AAarch64和AArch32&#xff0c;根据字面意思就是64位和32位。 ARMV7提供的指令集是AArch32。 二、TF-A 指令集是AArch64的芯片&#xff0c;TF-A有&#xff1a;bl1、bl2、bl31、bl32 和…

【Linux】进入一个目录需要什么权限-目录的权限

Linux目录权限 在Linux中&#xff0c;目录也是文件&#xff0c;是文件就有属性&#xff0c;就有权限 在Linux中&#xff0c;我们可以通过cd命令进入目录 那么我们要进入一个目录&#xff0c;需要有什么权限呢&#xff1f; 目录和普通文件一样&#xff0c;也是有权限的 测试证…

分布式Erlang/OTP(学习笔记)(一)

Erlang分布式基础 假设你在机器A和机器B上各跑着一个Simple Cache应用的实例。要是在机器A的缓存上插人一个键/值对之后&#xff0c;从机器B上也可以访问&#xff0c;那可就好了。显然&#xff0c;要达到这个目的&#xff0c;机器A必须以某种方式将相关信息告知给机器B。传递该…

Cinder组件作用

1、Cinder下发的流程 &#xff08;1&#xff09;Cinder-api接受上层发送的创建请求&#xff0c;然后把请求下发给Cinder-scheduler调度服务 &#xff08;2&#xff09;Cinder-scheduler调度服务&#xff0c;计算出哪个主机更适合创建&#xff0c;计算出来之后再把请求下发到Ci…

查询数据库表字段具有某些特征的表

目录 引言举例总结 引言 当我们把一个项目做完以后&#xff0c;客户要求我们把系统中所有的电话&#xff0c;证件号等进行加密处理时&#xff0c;我们难道要一个表一表去查看那些字段是电话和证件号码吗&#xff1f; 这种办法有点费劲&#xff0c;下面我们来探索如何找到想要的…

【大数据】Flink 测试利器:DataGen

Flink 测试利器&#xff1a;DataGen 1.什么是 FlinkSQL &#xff1f;2.什么是 Connector &#xff1f;3.DataGen Connector3.1 Demo3.2 支持的类型3.3 连接器属性 4.DataGen 使用案例4.1 场景一&#xff1a;生成一亿条数据到 Hive 表4.2 场景二&#xff1a;持续每秒生产 10 万条…

进程间通信之匿名管道通信

每一次的努力都是自我成长的一步&#xff0c;坚持不懈的付出会铺就通向成功的道路。文章目录 进程间通信的介绍进程间通信的发展进程间通信的分类进程间通讯的本质资源&#xff1f;这个资源谁提供的&#xff1f; 管道什么是管道匿名管道管道小总结现在我给大家看一下管道通信的…

SCDN高防如何保护你的服务器

随着互联网的发展&#xff0c;如今的网络世界&#xff0c;虽说给我们的衣食住行带来了非常大的便利&#xff0c;但同时它存在着各种各样的威胁。比如我们的网站&#xff0c;如果不做任何保护措施的话&#xff0c;就很容易被DDoS、CC等攻击堵塞网络、窃取目标系统的信息&#xf…

这种网页要小心!注意你的账号密码泄露!

目录 H5是泄露账号和数据的重要渠道 代码混淆是最佳的安全保护手段 基于AI的自适应代码混淆 我们经常见到各类H5海报&#xff0c;产品展示、活动促销、招聘启事等。H5不仅能够无缝地嵌入App、小程序&#xff0c;还可以作为一个拥有独立链接地址的页面&#xff0c;直接在PC端打开…

AIOps案例 | 携手擎创,中邮信科成功打造新一代IT智能运维平台,收益明显!

为推动邮政信息科技体制改革、提升信息科技自主供给能力&#xff0c;在原信息技术局、数据中心和软开中心基础上&#xff0c;中邮信息科技&#xff08;北京&#xff09;有限公司(简称“中邮信科公司”)经中国邮政集团有限公司于2019年5月被批准成立。 公司主要负责邮政各类信息…

[论文阅读]DeepFusion

DeepFusion Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection 用于多模态 3D 物体检测的激光雷达相机深度融合 论文网址&#xff1a;DeepFusion 论文代码&#xff1a;DeepFusion 摘要 激光雷达和摄像头是关键传感器&#xff0c;可为自动驾驶中的 3D 检测提供补…