Python单元测试框架之pytest -- 断言

news2024/10/7 20:25:27

对于测试来讲,不管是功能测试,自动化测试,还是单元测试。一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。测试的成功与否就是拿实际的结果与预期的结果进行比较。这个比的过程实际就是断言(assert)。

  在unittest单元测试框架中提供了丰富的断言方法,例如assertEqual()、assertIn()、assertTrue()、assertIs()等,而pytest单元测试框架中并没提供特殊的断言方法,而是直接使用python的assert进行断言。

  下面我们就来介绍assert 的使用。

比较大小与是否相等                      

test_assert.py

#coding=utf-8
import pytest

# 功能
def add(a,b):
    return a + b

# 测试相等
def test_add():
    assert add(3,4) == 7 

# 测试不相等
def test_add2():
    assert add(17,22) != 50

# 测试大于
def test_add3():
    assert add(17,22) <= 50

# 测试小于
def test_add4():
    assert add(17,22) >= 50


if __name__ == '__main__':
    pytest.main("test_assert.py")

    定义一个add()函数,用于计算两个入参相加,并将相加的结果返回。

  而assert可以使用直接使用“==”、“!=”、“<”、“>”、“>=”、"<=" 等符号来比较相等、不相等、小于、大于、大于等于和小于等于。

  运行结果:

============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile: 
plugins: html
collected 4 items

test_assert.py ...F

================================== FAILURES ===================================
__________________________________ test_add4 __________________________________

    def test_add4():
>       assert add(17,22) >= 50
E    assert 39 >= 50
E     +  where 39 = add(17, 22)

test_assert.py:22: AssertionError
===================== 1 failed, 3 passed in 0.02 seconds ======================

  显然,17加22的结果并不大于50,所有最后一条用例失败。

测试包含或不包含                                                    

test_assert2.py

#coding=utf-8
import pytest


# 测试相等
def test_in():
    a = "hello"
    b = "he"
    assert b in a 


# 测试不相等
def test_not_in():
    a = "hello"
    b = "hi"
    assert b not in a

if __name__ == '__main__':
    pytest.main("test_assert2.py")

   通过定义a和b 字符串变量来比较包含的关系。

  assert 可以直接使用 in 和not in 来比较包含与不包含。

  运行结果:

============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile: 
plugins: html
collected 2 items

test_assert2.py F.

================================== FAILURES ===================================
___________________________________ test_in ___________________________________

    def test_in():
        a = "hello"
        b = "hi"
>       assert b in a
E    assert 'hi' in 'hello'

test_assert2.py:9: AssertionError
===================== 1 failed, 1 passed in 0.01 seconds ======================

  显然“hello”并不包含“hi”,所以第一条测试用例运行失败。

测试true或false                         

test_assert3.py

#coding=utf-8
import pytest


#用于判断素数
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
        return True


# 判断是否为素数
def test_true():
    assert is_prime(13)


# 判断是否不为素数
def test_true():
    assert not is_prime(7)

if __name__ == '__main__':
    pytest.main("test_assert3.py")

   通过is_prime()函数来判断n 是否为素数(只能被1和它本身整除的数)。返回值为ture或false。

  通过assert不需要任何辅助符号,直接判断对象是否为ture,而assert not 用于判断是否为false。

  运行结果:

============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile: 
plugins: html
collected 1 items

test_assert3.py F

================================== FAILURES ===================================
__________________________________ test_true __________________________________

    def test_true():
>       assert not is_prime(7)
E    assert not True
E     +  where True = is_prime(7)

test_assert3.py:22: AssertionError
========================== 1 failed in 0.01 seconds ===========================

  显示,对于第二条测试用例来讲,7是素数,所以,is_prime()函数的返回结果是Ture,而assert not 需要的正确结果是False,因此,用例执行失败。

加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。未来的你肯定会感谢现在拼命的自己!

  

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

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

相关文章

PHP实战开发24-一定要知道PHP中反射的强大应用

文章目录 一、前言1.1 关于反射1.2 PHP中的反射 二、反射的应用2.1 自动注入2.2 动态调用方法2.3 注解解析 总结 一、前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP快速入门与实战 1.1 关于反射 反射是一种编程语言的特性&#xff0c;它允许程序在运行时获取和操作对象的…

kotlin从入门到精通之内置类型

基本类型 声明变量 val&#xff08;value的简写&#xff09;用来声明一个不可变的变量&#xff0c;这种变量在初始赋值之后就再也不能重新赋值&#xff0c;对应Java中的final变量。 var&#xff08;variable的简写&#xff09;用来声明一个可变的变量&#xff0c;这种变量在初始…

CUDA线程的线程层次结构,以及单个线程threadIdx如何使用stride来进行跳步操作,同时对多个数据进行计算

线程层次的概念&#xff1a; 简单说&#xff0c;就是一个grid有多个block,一个block有多个thread. grid有多大&#xff0c;用gridDim表示它有多少个block&#xff0c;具体分为gridDim.x, gridDim.y&#xff0c;gridDim.z。 block有多大&#xff0c;用blockDim表示它有多少个t…

SpringBoot项目结合@Slf4j将日志记录到磁盘和数据库

文章目录 1、背景介绍2、存本地2.1、配置文件2.2、使用 3、存数据库3.1、配置文件改造3.2、过滤器编写3.3、表准备3.4、添加依赖3.5、测试 4、优化4.1、日志定期删除4.2、分库处理4.3、环境 5、总结 1、背景介绍 现在我一个SpringBoot项目想记录日志&#xff0c;大概可以分为下…

深度学习助力版面分析技术,图像“还原”有方

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

【Python 随练】分数序列

题目&#xff1a; 有一分数序列&#xff1a;2/1&#xff0c;3/2&#xff0c;5/3&#xff0c;8/5&#xff0c;13/8&#xff0c;21/13… 求出这个数列的前 20 项之和。 简介&#xff1a; 在本篇博客中&#xff0c;我们将研究一个有趣的数学问题&#xff1a;求解一个特殊数列的…

MySQL出现Specified key was too long; max key length is 3072 bytes解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

算法篇——动态规划 01背包问题 (js版)

416. 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 链接&#xff1a;力扣 解题思路&#xff1a; 这道题看似是比较简单的背包问题&#xff1a; 首先可以通过判断数组和是否是…

MVC框架的model,view,controllr如何运作

第一步&#xff1a; MVC 是&#xff1a;model&#xff0c;view&#xff0c;controller 的缩写。 第二步&#xff1a; view负责界面显示&#xff0c;也就是jsp&#xff0c;html页面 controller是控制业务流程&#xff0c;也就是servlet&#xff0c;service等java文件 model是…

AI绘图网站 AI绘图生成器推荐

一、怎样设置关键词才能制作出美观高端的图片&#xff1f; 要在使用AI绘画软件时生成高端的优质图片&#xff0c;关键词的设置是不可或缺的重要因素。以下是一些关键词设置的建议。 确立你想要呈现的主题或题材 在设定关键字之前&#xff0c;你必须确定你所要表现的主题或题材…

基于pix实现无人机编队表演

文章目录 前言一、飞控LED灯光控制二、飞控路径控制三、飞控和地面站通信接口四、舞步设计五、gazebo仿真 前言 编队灯光表演没有什么高深的技术&#xff0c;主要是一些应用层的开发&#xff0c;事实上即使没有任何编程基础&#xff0c;按本教程操作也可以实现。 硬件准备&am…

spring security oauth2整合SSO(单点登录)

1.流程 用户在访问应用程序时&#xff0c;将被重定向到身份认证服务器进行身份验证。用户输入他们的凭据&#xff08;通常是用户名和密码&#xff09;&#xff0c;身份认证服务器对其进行验证。身份认证服务器向用户颁发一个令牌&#xff0c;该令牌表示用户已经通过身份验证。…

正则表达式(1)

文章目录 正则表达式一.基础命令1.grep命令1.1grep格式1.2grep命令选项 2.特殊的符号2.1空行——^$2.2以什么为开头—^,以什么为结尾—$2.2.1以什么为开头的格式&#xff1a;2.2.2以什么为结尾的格式&#xff1a; 3.只匹配单行——^匹配的字符$ 二.文本处理命令1.sort命令1.1命…

使用大型语言模(LLM)构建系统(七):评估1

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。之前我们已经学习了下面这些知识&#xff1a; 使用大型语言模(LLM)构建系统(一)&#xff1a;分类使用大型语言模(LLM)构建系统(二):内容审核、…

Java 10 新特性解读

前言  2018年3月21日&#xff0c;Oracle官方宣布Java10正式发布。  需要注意的是 Java 9 和 Java 10 都不是 LTS (Long-Term-Support) 版本。和过去的 Java 大版本升级不同&#xff0c;这两个只有半年左右的开发和维护期。而未 来的 Java 11&#xff0c;也就是 18.9 LTS&am…

SpringBoot基于Aop实现自定义日志注解(提供Gitee源码)

前言&#xff1a;日志在我们的日常开发当中是必定会用到的&#xff0c;在每个方法的上都会习惯性打上Log注解&#xff0c;这样系统就会自动帮我们记录日志&#xff0c;整体的代码结构就会非常优雅&#xff0c;这边我自己搭建了一个demo去实现了一些这个项目当中必定会用的功能。…

根据jar名称动态打包带版本的镜像, 并创建对应容器的脚本实现

根据jar名称动态打包带版本的镜像以及容器 利用shell脚本, 实现根据jar名称中的项目名和版本号来动态制作带版本的Docker镜像以及带版本的容器 背景 人人都逃不过的墨菲定律 事情的原因来自最近发生的一次生产环境事故: 我们在甲方那里环境中有两个服务器, 一个用于灰度测试另…

WPF开发txt阅读器16:自动编码检测

文章目录 更改编码重新载入自动编码检测更改编码并保存 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录&#x1f48e;快捷键翻页字体控件绑定&#x1f48e;前景/背景颜色书籍管理系统&#x1f48e;用树形图管理书籍语音播放&#x1f48e…

Cortext-M3系统:储存器系统(2)

1、存储系统功能概览 Cortext-M3储存器有如下特点&#xff1a; 存储器映射是预定义的&#xff0c;并且还规定好了哪个位置使用哪条总线。 存储器系统支持所谓的“位带”&#xff08;bit-band&#xff09;操作。通过它&#xff0c;实现了对单一比特的原子操作&#xff0c;位带操…

STM32G0+EMW3080+阿里云实现单片机WiFi智能联网功能(一)EMW3080实现和PC之间的串口通讯

项目描述&#xff1a;该系列记录了STM32G0EMW3080实现单片机智能联网功能项目的从零开始一步步的实现过程&#xff1b; 硬件环境&#xff1a;单片机为STM32G030C8T6&#xff1b;物联网模块为EMW3080V2-P&#xff1b;网联网模块的开发板为MXKit开发套件&#xff0c;具体型号为XC…