【pytest】

news2024/11/20 6:25:48

pytest

1、环境安装

1、pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple --target=C:\Dpan-app\ceshirenenv\Lib\site-packages
2、pycharm安装

2、assert

>>> assert True
>>>
>>> assert False
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>>
>>>
>>> assert False,"这里有错误"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: 这里有错误

3、pytest参数化实现

装饰器

@pytest.mark.parametrize

eg.

@pytest.mark.parametrize("username,password",[["right","right"],["wrong","wrong"]])
def test_param(username,password):
	login(username,password)

ids

ids : 给测试用例起别名

@pytest.mark.parametrize("username, password", [["rightusername","right username"],
                                                ["wrong username","wrong password"],
                                                [" ","password"],
                                                ["right username", ""]
                                                ],
                         ids=["right username and password", "wrong username and password", "username is Null","password is Null"])
def test_login(username, password):
    print(f"登录的用户名:{username}, 密码:{password}")

ids为中文

@pytest.mark.parametrize("username, password", [["rightusername","right username"],
                                                ["wrong username","wrong password"],
                                                [" ","password"],
                                                ["right username", ""]
                                                ],
                         ids=["正常的用户和正确的密码", "错误的用户名和错误的密码", "用户名为为","password is Null"])
def test_login1(username, password):
    print(f"登录的用户名:{username}, 密码:{password}")

需要在同一路径下配置一个conftest.py文件

def pytest_collection_modifyitems(items):
    """
    测试用例收集完成时,将收集到的用例名name和用例标识nodeid的中文信息显示在控制台上
    """
    for i in items:
        i.name=i.name.encode("utf-8").decode("unicode_escape")
        i._nodeid=i.nodeid.encode("utf-8").decode("unicode_escape")

笛卡尔积

@pytest.mark.parametrize("c",["appium","selenium","pytest"])
@pytest.mark.parametrize("b",["a","b","c"])
@pytest.mark.parametrize("a",[1,2,3])
def test_param1(a,b,c):
    print(f"笛卡积形式的参数化中 a={a} , b={b}  ,c={c}")

笛卡尔积 , 产生测试用例个数 3 x 3 x 3 = 27

4、pytest 标记测试用例

给测试用例命名

eg.

#此处skip为自己命名的用例名
@pytest.mark.skip
def test_aaa():
    print("代码未开发完")
    assert True

执行指令
eg.
匹配测试用例名skip
pytest .py文件名 -vs -m “skip”

去除警告方法

在这里插入图片描述

建文件pytest.ini,文件内容里markers = 所有自己命名的测试用例名

[pytest]
markers =   str
			bignum
			float
			int
			minus
			zero	 

5、pytest命令行常用参数

–help
-x : (常用与回归测试前的冒烟测试)按顺序执行用例,用例一旦fail,立即停止执行
–maxfail=num : 允许有num个测试用例执行fail
-m : 给用例加标签,运行代码时,只执行某一些自己标记的用例
-k : 执行(函数名)包含某个关键字的测试用例
eg.
pytest .py -v -k “str” 执行包含str的用例
pytest .py -v -k “not str” 反选,执行函数名(测试用例名)中不包含str的用例
-v : 打印详细日志
eg.
看不出来哪条测试用例成功,哪条用例失败了。(执行后,pass只显示绿色的点,fail只显示红色的F)
-s : 打印输出日志
eg.
打印出函数(测试用例)里print的内容
–collect-only : 收集测试用例展示到前端界面,但不执行
eg.
执行指令 pytest --collect-only

6、python代码执行pytest

7、异常处理

try … except

异常捕获

法一:
try … except

try:
    a = int(input("输入被除数:"))
    b = int(input("输入除数:"))
    c = a / b
    print("您输入的两个数相除的结果是:", c )
except (ValueError, ArithmeticError):
    print("程序发生了数字格式异常、算术异常之一")
except :
    print("未知异常")
print("程序继续运行")

法二:
pytest.raises

import pytest


def test_raise():
  with pytest.raises((ZeroDivisionError,ValueError)):       #直接执行1/0会报错出现异常,ZeroDivisionError,将此错误记为异常,并且只捕获,不报错
    raise ZeroDivisionError("除数为0")
def test_raise1():
  with pytest.raises(ValueError, match = 'must be 0 or None'):
    raise ValueError("value must be 0 or None")
def test_raise1():
  with pytest.raises(ValueError) as exc_info:  #给异常命名,从而获取到异常的一些信息
    raise ValueError("value must be 42")
  assert exc_info.type is ValueError
  assert exc_info.value.args[0] == "value must be 42"

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

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

相关文章

一篇文章让你彻底学会--节流(并且自己可以手写)

Hi,有的小伙伴们在面试的时候会被要求手写节流函数&#xff0c;很多都被难着了吧&#xff0c;宝贝&#xff0c;那你你没有理解节流函数。 今天&#xff0c;就让我带你攻克它&#xff01; 1.节流 单位时间内&#xff0c;事件触发&#xff0c;最多只执行一次事件回调。 人话:说…

【STL十三】适配器——迭代器适配器

【STL十二】适配器——迭代器适配器 一、迭代器1、迭代器分类2、迭代器定义3、迭代器和迭代器适配器 二、迭代器适配器、流迭代器1、简介2、迭代器适配器3、流迭代器 三、反向迭代器1、简介2、模板类3、demo 四、插入迭代器1、简介2、模板类3、demo 五、移动迭代器1、简介2、模…

Mysql列的类型定义(日期和时间类型)

文章目录 前言一、类型表二、类型简介总结 前言 日期与时间类型是为了方便在数据库中存储日期和时间而设计的&#xff0c;数据库有多种表示日期和时间的数据类型。其中&#xff0c;YEAR类型表示年&#xff0c;DATE类型表示日期&#xff0c;TIME类型表示时间&#xff0c;DATETIM…

大模型如何赋能?个人AI助理开始靠谱!

想象一下&#xff0c;生活在这样一个世界里&#xff0c;你有一个个人人工智能助手&#xff0c;它不仅能理解你的需求&#xff0c;还能与你一起学习和成长。一个人工智能无缝融入我们日常生活的世界&#xff0c;使我们能够比以往任何时候都更有效地实现我们的目标。那个世界不再…

Linux磁盘分区扩容

磁盘分区主要包含MBR&#xff08;Master Boot Record&#xff09;和GPT&#xff08;GUID Partition Table&#xff09;两种不同方式&#xff1a; MBR&#xff08;主引导记录&#xff09;&#xff0c;驱动器上的一个特殊的启动扇区&#xff0c;最大支持2TB&#xff0c;最多支持4…

【Redis7】Redis7 主从复制(重点:主从复制原理)

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Redis7 复制。 后续会继续分享Redis7和其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一篇文章&#xff1a;《【Redis7】Redis7 事务&管道&…

navicat 远程连接oracle数据库ORA-12170及ORA-28547问题

目录 1.ORA-12170问题 2.ORA-28547 问题 1.ORA-12170问题 这是防火墙端口连接问题&#xff0c;需要在防火墙中设置oracle数据库端口为例外 解决方案 控制面板—windows防火墙—高级设置—入站规则—新建规则 2.ORA-28547 问题 OCI版本不兼容问题&#xff0c;安装的oracle客…

Python每日一练(20230423)

目录 1. 删除链表的倒数第 N 个结点 &#x1f31f;&#x1f31f; 2. 最小覆盖子串 &#x1f31f;&#x1f31f;&#x1f31f; 3. 二叉树的层序遍历 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏…

OpenAI最新官方ChatGPT聊天插件接口《插件安全审查流程》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(六)(附源码)

Plugin review process 插件审查流程 前言Plugin review process 插件审查流程What we are looking for in a plugin 我们正在寻找一个插件Plugin states 插件状态Types of users 用户类型Submit a plugin for review 提交一个插件进行审核其它资料下载 前言 在 ChatGPT 中&am…

【原创】【理论+题型】二次型化标准型 +合同

&#xff08;A&#xff09;二次型化标准型2方法对比 1任何二次型都能化为标准&#xff0c;有正交变换法和配方法 2任何二次型都能通过配方法变为标准型&#xff0c;但不一定能通过正交变化法变 3二次型的规范型唯一&#xff0c;标准型不唯一 4实对称阵的(合同)对角化问题&#…

产品预览 | 系统仿真与三维专业场仿真融合——MWORKS模型降阶工具箱

1 引言 近二十年来&#xff0c;数字化技术迅猛发展&#xff0c;以美国和中国提出装备数字工程为标志&#xff0c;人类迈入全新的数字化时代。装备数字化需要对装备的运行状态和行为进行准确的模拟和预测&#xff0c;这就需要利用系统仿真技术。系统仿真技术能够综合考虑装备的…

Golang每日一练(leetDay0044)

目录 130. 被围绕的区域 Surrounded Regions &#x1f31f;&#x1f31f; 131. 分割回文串 Palindrome Partitioning &#x1f31f;&#x1f31f; 132. 分割回文串 II Palindrome Partitioning II &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专…

启扬方案:瑞芯微3568智慧安防NVR设备解决方案

物联网技术和人工智能技术的发展和应用&#xff0c;让安防行业的视频监控从简单的看见画面到自动识别智能研判&#xff0c;大大地提高视频监控的智能化&#xff0c;提升监控效率。随着智慧城市、智慧交通、智慧社区等项目的实施&#xff0c;面对道路交通、银行、家庭、商场、楼…

App复杂动画实现——Rive保姆级教程 | 京东云技术团队

作者&#xff1a;京东物流 沈明亮 在App开发过程中&#xff0c;如果想实现动画效果&#xff0c;可以粗略分为两种方式。一种是直接用代码编写&#xff0c;像平移、旋转等简单的动画效果&#xff0c;都可以这么干&#xff0c;如果稍微复杂点&#xff0c;就会对开发工程师的数学功…

如何提升电脑使用体验?试试这5款免费软件吧

今天推荐5款实用的开源软件,它们可以极大地提高你的工作和生活效率,让你办公学习的体验更加舒适。 屏幕截图工具——ShareX ShareX是一款免费的开源软件&#xff0c;可以让你快速地捕捉屏幕上的任何区域&#xff0c;并将其保存为图片或视频文件。你还可以使用ShareX来上传你的…

chatgpt智能提效职场办公-ppt怎么做流程图

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 制作PPT流程图的步骤如下&#xff1a; 打开 PowerPoint&#xff0c;选择自己要制作流程图的PPT页面。 在页面中点击“插入”选项卡&am…

gcc编译的过程

文章目录 前言一、gcc 编译四步骤二、gcc编译常用参数三、文件后缀名对应表四、预处理五、编译六、汇编七、链接1、静态链接2、动态链接 前言 GCC 仅仅是一个编译器&#xff0c;没有界面&#xff0c;必须在命令行模式下使用。通过 gcc 命令就可以将源文件编译成可执行文件。 一…

人机识别技术再升级,AIGC为验证码带来万亿种新变化

网上输入关键词“破解验证码”&#xff0c;会出现1740万个搜索结果。“验证码识别、轻松破解、暴力破解、逻辑漏洞破解、简单破解”等等各类关键词的内容&#xff0c;不一而足&#xff0c;关于“如何用破解某某验证码”的帖子更是多如牛毛。 搜索引擎的相关结果 2017年&#xf…

线程池的构造方式

线程池的构造方式 两类构造方式7种实现方法7种线程池的具体使用FixedThreadPoolCachedThreadPoolSingleThreadExecutorScheduledThreadPoolSingleThreadScheduledExecutornewWorkStealingPoolThreadPoolExecutor 说明总结 两类构造方式 在Java语言中&#xff0c;并发编程都是通…

【重新定义matlab强大系列三】MATLAB清洗离群数据(查找、填充或删除离群值)

&#x1f517; 运行环境&#xff1a;matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…