Python测试框架之Pytest基础入门

news/2024/5/19 17:04:50/文章来源:https://blog.csdn.net/wx17343624830/article/details/128044926

Pytest简介

Pytest is a mature full-featured Python testing tool that helps you write better programs.The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries.

通过官方网站介绍我们可以了解到,Pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

简单灵活易上手

支持参数化

支持简单的单元测试和复杂的功能测试,还可以用来做自动化测试

具有很多第三方插件,并且可以自定义扩展

测试用例的skip和xfail处理

可以很好的和Jenkins集成

支持运行由Nose、UnitTest编写的测试用例

Pytest安装

直接使用pip命令安装:

pip install -U pytest    # -U是如果已安装会自动升级最新版本

验证安装结果:

pytest --version    # 展示当前安装版本C:\Users\edison>pytest --version
pytest 6.2.5

在Pytest测试框架中,要遵循以下约束:

测试文件名要符合test_.py或_test.py格式(例如test_min.py);

测试类要以Test开头,且不能带有init方法;

在单个测试类中,可以包含一个或多个test_开头的函数。

Pytest测试执行

Pytest进行测试比较简单,我们来看一个实例:

import pytest    # 导入pytest包def test_001():    # 函数以test_开头print("test_01")def test_002():print("test_02")if __name__ == '__main__':pytest.main(["-v","test_1214.py"])    # 调用pytest的main函数执行测试

这里我们定义了两个测试函数,直接打印出结果,下面执行测试:

============================= test session starts =============================
platform win32 -- Python 3.8.0, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- D:\Code\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\Code
collecting ... collected 2 itemstest_1214.py::test_001 PASSED                                            [ 50%]
test_1214.py::test_002 PASSED                                            [100%]============================== 2 passed in 0.11s ==============================Process finished with exit code 0

输出结果中显示执行了多少条案例、对应的测试模块、通过条数以及执行耗时。

测试类主函数

pytest.main(["-v","test_1214.py"])

通过Python代码执行pytest.main():

1.直接执行pytest.main() 【自动查找当前目录下,以test_开头的文件或者以_test结尾的py文件】。

2.设置Pytest的执行参数 pytest.main([‘–html=./report.html’,‘test_login.py’])【执行test_login.py文件,并生成html格式的报告】。

main()括号内可传入执行参数和插件参数,通过[]进行分割,[]内的多个参数通过“逗号,”进行分割:

运行目录及子包下的所有用例 :pytest.main([‘目录名’]);

运行指定模块所有用例 :pytest.main([‘test_reg.py’]);

运行指定模块指定类指定用例 :pytest.main([‘test_reg.py::TestClass::test_method’]) 冒号分割。

-m=xxx: 运行打标签的用例

-reruns=xxx:失败重新运行

-q: 安静模式, 不输出环境信息

-v: 丰富信息模式, 输出更详细的用例执行信息

-s: 显示程序中的print/logging输出

–resultlog=./log.txt 生成log

–junitxml=./log.xml 生成xml报告

断言方法

Pytest断言主要使用Python原生断言方法,主要有以下几种:

== 内容和类型必须同时满足相等

in 实际结果包含预期结果

is 断言前后两个值相等

import pytest    # 导入pytest包def add(x,y):    # 定义以test_开头函数return x + ydef test_add():assert add(1,2) == 3    # 断言成功str1 = "Python,Java,Ruby"
def test_in():assert "PHP" in str1    # 断言失败if __name__ == '__main__':pytest.main(["-v","test_pytest.py"])    # 调用main函数执行测试
============================= test session starts =============================
platform win32 -- Python 3.8.0, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- D:\Code\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\Code
collecting ... collected 2 itemstest_pytest.py::test_add PASSED                                          [ 50%]
test_pytest.py::test_in FAILED                                           [100%]================================== FAILURES ===================================
___________________________________ test_in ___________________________________def test_in():
>       assert "PHP" in str1
E       AssertionError: assert 'PHP' in 'Python,Java,Ruby'test_pytest.py:11: AssertionError
=========================== short test summary info ===========================
FAILED test_pytest.py::test_in - AssertionError: assert 'PHP' in 'Python,Java...
========================= 1 failed, 1 passed in 0.18s =========================Process finished with exit code 0

可以看到运行结果中明确指出了错误原因是“AssertionError”,因为PHP不在str1中。

常用命令详解

运行指定案例:

if __name__ == '__main__':pytest.main(["-v","-s","test_1214.py"])

运行当前文件夹包括子文件夹所有用例:

if __name__ == '__main__':pytest.main(["-v","-s","./"])

运行指定文件夹(code目录下所有用例):

if __name__ == '__main__':pytest.main(["-v","-s","code/"])

运行模块中指定用例(运行模块中test_add用例):

if __name__ == '__main__':pytest.main(["-v","-s","test_pytest.py::test_add"])

执行失败的最大次数。使用表达式"–maxfail=num"来实现(注意:表达式中间不能存在空格),表示用例失败总数等于num 时停止运行。

图片

图片

错误信息在一行展示。在实际项目中如果有很多用例执行失败,查看报错信息将会很麻烦。

使用"–tb=line"命令,可以很好解决这个问题。

图片

接口调用

本地写一个查询用户信息的接口,通过Pytest来调用,并进行接口断言。

# -*- coding: utf-8 -*-
import pytest
import requestsdef test_agent():r = requests.post(url="http://127.0.0.1:9000/get_user",data={"name": "吴磊","sex": 1},headers={"Content-Type": "application/json"})print(r.text)assert r.json()['data']['retCode'] == "00" and r.json()['data']['retMsg'] == "调用成功"if __name__ == "__main__":pytest.main(["-v","test_api.py"])

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以加入我们的QQ群:746506216,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink部署之Yarn

Flink部署之Yarn 一、环境准备 1、Flink 是一个分布式的流处理框架,所以实际应用一般都需要搭建集群环境。 需要准备 3 台 Linux 机器。具体要求如下: 系统环境为 CentOS 7.5 版本。安装 Java 8。安装 Hadoop 集群,Hadoop 建议选择 Hadoop…

【代码随想录】二刷-二叉树

# 二叉树《代码随想录》 二叉树的遍历方式 深度优先遍历: 前序遍历(递归法、迭代法): 中左右中序遍历(递归法、迭代法): 左中右后序遍历(递归法、迭代法): 左右中 广度优先遍历: 层序遍历(迭代法) 二叉树的定义 struct TreeNode{int val;TreeNode* left;TreeNode* right;Tree…

React - Ant Design3.x版本安装使用,并按需引入和自定义主题

React - Ant Design3.x版本安装使用,并按需引入和自定义主题一. 安装使用 antd二.antd 高级配置安装 react-app-rewired,对 create-react-app 的默认配置进行自定义安装 babel-plugin-import ,按需加载组件代码和样式自定义主题An…

[毕业设计]机器学习水域检测标注算法

前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投…

IO模型Netty

一、IO模型 对于一次IO操作,数据会先拷贝到内核空间中,然后再从内核空间拷贝到用户空间中,所以一次read操作,会经历以下两个阶段,基于这两个阶段就产生了五种不同的IO模式。 为了避免用户进程直接操作内核,…

Android8.1 MTK 浏览器下载的apk点击无反应不能安装

最近测试人员发现用原生浏览器下载的apk点击安装时无反应,不能安装。 在/vendor/mediatek/proprietary/packages/apps/Browser/src/com/android/browser/DownloadHandler.java 中,发现下载的apk文件缺少了mime类型,如下图 mimetype null造…

RS编码译码误码率性能matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 纠错编码技术在卫星通信、移动通信及数字存储等领域已获得了广泛的应用。RS码作为其中最重要的码类之一,具有优良的纠随机错误和突发错误的能力,被空间数据系统咨询委员会(CCSDS)作为一种…

计算机毕业设计——基于SpringBoot框架的网上购书系统的设计与实现

文章目录前言一、背景及意义选题背景选题目的二、系统设计主要功能运行环境三、系统实现部分页面截图展示部分代码展示四、源码获取前言 提示:这里可以添加本文要记录的大概内容: 二十一世纪是网络化,信息化的时代,为了满足广大…

植入“人工心脏”助患者重获“心”生

【同期】人工心脏移植患者 刘女士这要是在过去的时候也就放弃了,我再活20年,我还能看着我大孙子成家,这就是我最大的希望。【解说】11月22日,人工心脏移植患者和心脏移植患者在即将康复出院前,互相握手庆贺。据了解&am…

18.3 内存池概念、代码实现和详细分析

一:内存池的概念和实现原理概述 malloc:内存浪费,频繁分配小块内存,浪费更加明显。 “内存池”要解决什么问题? 1、减少malloc()的次数,减少malloc()调用次数就意味着减少对内存的浪费 2、减少malloc()的…

Wireshark Ethernet and ARP 实验—Wireshark Lab: Ethernet and ARP v7.0

Wireshark Lab: Ethernet and ARP v7.0 1. Capturing and analyzing Ethernet frames 清除浏览器缓存 使用wireshark抓包并请求网页 修改“捕获数据包列表”窗口,仅显示有关 IP 以下协议的信息。 抓包干扰较多,故分析作者的数据包回答下列问题 包含…

关于WEB端实现电子海图之Openlayers加载切片

记笔记,免忘记! 关于WEB端实现电子海图研究之思路 关于WEB端实现电子海图研究二GeoServer GeoServer完成shp文件切矢量图后,我们需要加载GeoServer切片在web上展示。 vector-tiles-tutorial官方示例 以下示例使用openLayers来加载 D:\s…

Django Cookie 与 Session 对比

文章目录原理比较语法比较Cookie 示例创建 Cookie更新 Cookie删除 CookieSession 示例创建 session查询 session删除一组键值对删除 session参考文档本文通过示例演示 Django 中如何创建、查询、删除 Cookie 与 Session。 原理比较 在Web开发中,使用 session 来完成…

Docker-CentOS开启防火墙firewalled映射Docker端口

开启docker的Tomcat容器后,启动 docker run -d -p 8080:8080 tomcat 访问不了Tomcat 查看防火墙所有开放的端口 firewall-cmd --zonepublic --list-ports 一、需要防火墙开启8080 端口 1、通过systemctl status firewalld查看firewalld状态,发现当前…

流媒体传输 - RTSP 协议

概述 协议简介 RTSP RTSP (Real-Time Stream Protocol) 实时流传输协议是一种基于文本的应用层协议,常被用于 建立的控制媒体流的传输,该协议用于 C/S 模型 , 是一个 基于文本 的协议,用于在客户端和服务器端建立和协商实时流会话。 RTP …

qt 实现PDF阅读器

1、前言 查阅资料可发现,网上的几种pdf阅读器的实现,几乎大多依赖的第三方库,这里就不做介绍了。 qt 自带的关于pdf的显示:pdfwriter、printpreviewwidget,分别为创建pdf 和 打印预览pdf。由此,后者似乎满足…

你一定要知道的四个程序员接外包的网站,悄悄把技术变现!

说起程序员接外包的网站,你在网上一搜发现数不胜数,但真正有用的却很少。然后你想快速的找到几个靠谱的网站,去看了看接外包的攻略,你会发现排雷的又数不胜数。一时间你还真不知道要选哪一个。 接下来就为大家推荐几个我认为比较…

基于springboot的汽车租赁管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【RuoYi-Vue-Plus】学习笔记 44 - XSS 过滤器以及 @Xss 注解简单分析

文章目录前言参考目录关于 XSS 攻击框架集成配置说明测试方法一:通过过滤器测试方法二:通过 Xss 注解功能调用流程分析XSS 过滤器启动初始化Form 表单请求过滤JSON 对象请求过滤Xss 注解校验前言 之前在对接口进行传参时发现富文本包含的标签全部被过滤…

linux NPS 服务端安装 +linux 客户端安装

本文参考博客: https://blog.csdn.net/m0_57776598/article/details/123674866 一、下载安装包 1、官方下载 官方下载地址:https://github.com/ehang-io/nps/releases 注意不要下错了,当前我下的版本为 v0.26.10 2、网盘下载 网盘下载&…