pytest 教程

news2024/11/19 17:44:23

1. 安装pytest

目前我使用的python版本是3.10.8

pip install pytest命令会安装下面的包:

exceptiongroup-1.2.0-py3-none-any.whl
iniconfig-2.0.0-py3-none-any.whl
packaging-23.2-py3-none-any.whl
pluggy-1.4.0-py3-none-any.whl
pytest-8.0.2-py3-none-any.whl
tomli-2.0.1-py3-none-any.whl

2. 初步尝试

2.1 使用pytest,默认的测试用例的规则以及基础应用

  1. 模块名必须以test_开头或者_test结尾
  2. 测试类必须以Test开头,并且不能有init方法。
  3. 测试方法必须以test开头

在这里插入图片描述
init.py内容为空,
test_login.py内容如下:

import pytest
class TestLogin:
    def test_01_baili(self):
        print('测试百里')
if __name__ == '__main__':
    pytest.main(['-s'])

2.2 运行方式

用python运行这个test_login.py输出结果如下:
在这里插入图片描述

或者在pytest_rutorial目录下,命令行执行pytest也可以成功运行。

2.3 下面对项目结构修改

在这里插入图片描述
init.py为空文件。
test_login.py内容如下:

class TestLogin:
    def test_01_baili(self):
        print('测试百里')

test_product.py内容如下:

class TestProduct:
    def test_02_xingyao(self):
        print('测试星瑶')

all.py内容如下:

import pytest

if __name__ == '__main__':
    pytest.main(['-sv'])

运行all.py输出如下:
在这里插入图片描述
发现自动运行了test_product.pytest_login.py文件的内容。

2.4 参数详解

pytest.main()中可以有很多参数选项:

  • -s:表示输出测试方法里面的调试信息,包括print()
  • -v:表示输出了详细的模块名、类名、模块名
  • -x:如果有失败的,则停止运行

pytest.main(['-vs','test_product.py'])则会仅运行test_product.py文件的测试。

3 测试不同的项目

目录结构如下:
在这里插入图片描述
tutorial_1表示第一个项目,tutorial_2表示第二个项目,两个项目中的**init.py**文件内容都是空的。

test_login.py内容如下:

class TestLogin:
    def test_01_baili(self):
        print('测试百里')

test_product.py内容如下:

class TestProduct:
    def test_02_xingyao(self):
        print('测试星瑶')

test_web.py内容如下:

class TestWeb:
    def test_03_interface(self):
        print('测试接口')

all.py内容如下:

import pytest

if __name__ == '__main__':
    pytest.main(['-sv'])

运行all.py会输出如下:
在这里插入图片描述
也可以仅测试一个用例,修改all.py

import pytest

if __name__ == '__main__':
    pytest.main(['-sv', './tutorial_2'])

运行all.py,输出:
在这里插入图片描述

这样就仅仅执行tutorial_2下的测试用例了。

3.1 如何执行test_web.py下的某一个函数而不是类中的方法

test_web.py内容如下:

def test_04_interface():
    print('函数')
class TestWeb:
    def test_03_interface(self):
        print('测试接口')

如果我只想执行test_04_interface函数如何做?

解决办法:

修改all.py内容:

import pytest

if __name__ == '__main__':
    pytest.main(['-sv', './tutorial_2/test_web.py::test_04_interface'])

在这里插入图片描述
这就可以指定函数来进行测试了。

同理,也可以通过这个方式来指定某个类下的某个方法,例如:

import pytest

if __name__ == '__main__':
    pytest.main(['-sv', './tutorial_2/test_web.py::TestWeb::test_03_interface'])

就会执行TestWeb类下面的test_03_interface方法。

3.2 异步测试

如果某一个测试用例非常耗时,那么就会阻塞。解决办法就是异步进行。

新建文件夹tutorial_3,新建文件test_web3.py内容如下:

import time

class TestWeb3:
    def test_03_interface_1(self):
        time.sleep(3)
        print('第一个接口')
    def test_03_interface_2(self):
        time.sleep(3)
        print('第二个接口')

all.py内容如下:

import pytest

if __name__ == '__main__':
    pytest.main(['-sv', './tutorial_3'])

运行all.py输出如下:
在这里插入图片描述
可以看到用了6.03秒的时间。先执行了第一个接口,然后顺序执行第二个接口。

因此可以使用pytest中的多线程来执行。但是需要安装pytest-xdist

首先执行pip install pytest-xdist,这个插件需要如下两个包:

execnet-2.0.2-py3-none-any.whl 
pytest_xdist-3.5.0-py3-none-any.whl

然后修改all.py内容:


import pytest

if __name__ == '__main__':
    pytest.main(['-sv', './tutorial_3', '-n=2'])

这里的-n=2表示利用两个线程来执行。输出结果如下:
在这里插入图片描述
发现执行时间减少了。

4. 默认执行顺序

pytest默认的执行顺序是从上到下执行的。

例如下面的test_web3.py文件内容如下:

import time

class TestWeb3:
    def test_03_interface_1(self):
        time.sleep(3)
        print('第一个接口')
    def test_03_interface_3(self):
        time.sleep(3)
        print('第三个接口')
    def test_03_interface_2(self):
        time.sleep(3)
        print('第二个接口')

all.py内容如下:


import pytest

if __name__ == '__main__':
    pytest.main(['-sv', './tutorial_3'])

执行all.py输出结果如下:
在这里插入图片描述

4.1 修改执行顺序

要想修改执行顺序,需要安装pytest-ordering库,执行pip install pytest-ordering,需要的包:pytest_ordering-0.6-py3-none-any.whl

修改test_web3.py内容:

import time
import pytest

class TestWeb3:
    @pytest.mark.run(order=2)
    def test_03_interface_1(self):
        time.sleep(3)
        print('第一个接口')
    @pytest.mark.run(order=1)
    def test_03_interface_3(self):
        time.sleep(3)
        print('第三个接口')
    @pytest.mark.run(order=3)
    def test_03_interface_2(self):
        time.sleep(3)
        print('第二个接口')

all.py内容如下:


import pytest

if __name__ == '__main__':
    pytest.main(['-sv', './tutorial_3'])

执行all.py输出如下:
在这里插入图片描述

5. 通过读取pytest.ini全局配置文件运行

pytest.ini这个文件它是pytest单元测试框架的核心配置文件。

  1. pytest.ini文件位置:一般放在项目的根目录
  2. 作用:改变pytest默认的行为。
  3. 运行的规则;不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件。

pytest.ini文件格式样例

[pytest]
addopts=-vs #命令行的参数,用空格分隔
testpaths=./pytest_tutorial #测试用例的路径
python_files=test_*.py #模块名的规则
python_classes=Test* #类名的规则
python_functions= test #方法名的规则

6. 分组执行

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

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

相关文章

总线要点笔记

1. AXI/AHB/APB差异 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) …

无名管道数据交换

#include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include<errno.h> #include <unistd.h> #include<fcntl.h> #include<string.h>int main(int argc, const char *argv[]) {//开辟写入管道1if(mkfifo("./AAA&…

【C语言】指针超级无敌金刚霹雳进阶(但不难,还是基础)

点击这里访问我的博客主页~~ 对指针概念还不太清楚的点击这里访问上一篇指针初阶2.0 上上篇指针初阶1.0 谢谢各位大佬的支持咯 今天我们一起来学习指针进阶内容 指针进阶 一、指针变量1、字符指针变量2、数组指针变量①数组指针变量的定义②数组指针变量的初始化 3、函数指…

数字化转型导师坚鹏:成为数字化转型顾问 引领数字化美好未来

成为数字化转型顾问 引领数字化美好未来 ——数字化人才与企业的共赢之路 数字经济新时代&#xff0c;中国企业向数字化转型要效益&#xff1b; 转型顾问创未来&#xff0c;职场精英借数字化转型成良师。 我们中国政府特别重视数字经济发展及数字化人才培养。早在2020年8月2…

c++ primer学习笔记(二)

目录 第三章 一、命名空间的using声明 二、标准库的string类型 1、string对象的定义和初始化 2、string对象的读写 3、string对象的操作 4、string对象中字符的处理 三、标准库的vector类型 1、vector对象的定义和初始化 2、vector对象的操作 四、迭代器简介 1、简…

android开发框架mvp,Android面试心得必备技能储备详解

面试复习路线图 我之前复习&#xff0c;大多都在20点以后&#xff0c;因为晚上比较能集中注意力&#xff0c;制定一个学习计划&#xff0c;切勿零散的复习&#xff0c;最好是系统的复习&#xff0c;才能胜却在握 主要内容如下&#xff1a; BAT的面试题目相关性能优化相关相关…

App自动化测试笔记(一):搭建环境

一、三个环境 1、android模拟器&#xff1a;模拟安卓手机 2、androidSDK:android SDK给你提供开发测试所必须android API类库 3、java&#xff1a;android底层是c、c语言&#xff0c;应用层是java语言 二、java环境搭建 java安装 安装jdk-8u151-windows-x64.exe 配置环境变量…

小程序常用样式和组件

常用样式和组件 1. 组件和样式介绍 在开 Web 网站的时候&#xff1a; 页面的结构由 HTML 进行编写&#xff0c;例如&#xff1a;经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写&#xff0c;例如&#xff1a;经常会采用 .class 、#id 、element 等选择器…

Stable Diffusion 模型分享:CG texture light and shadow(CG纹理光影)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 一个拥有cg质感和光影的融合模型&#xff0c;偏2.5D 条目内容类型大模型基础模型SD 1.5来…

【JavaEE】_Spring MVC项目使用数组与集合传参

目录 1. 使用数组传参 1.2 传递单个参数 1.3 传递多个名称相同的参数 1.3.1 关于urlencode 2. 使用集合传参 1. 使用数组传参 创建一个Spring MVC项目&#xff0c;其中 .java文件内容如下&#xff1a; package com.example.demo.controller;import com.example.demo.Per…

二叉树——700. 二叉搜索树中的搜索、98. 验证二叉搜索树

二叉搜索树中的搜索 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&#xff1a;root [4,2,7,1,3], val 2 …

Lichee Pi 4A:RISC-V架构的开源硬件之旅

一、简介 Lichee Pi 4A是一款基于RISC-V指令集的强大Linux开发板&#xff0c;它凭借出色的性能和丰富的接口&#xff0c;吸引了众多开发者和爱好者的关注。这款开发板不仅适用于学习和研究RISC-V架构&#xff0c;还可以作为软路由、小型服务器或物联网设备的核心组件。 目录 一…

FreeRTOS操作系统学习——FreeRTOS工程介绍

FreeRTOS工程介绍 核心文件 FreeRTOS的最核心文件只有2个&#xff1a; FreeRTOS/Source/tasks.cFreeRTOS/Source/list.c 文件功能如下图&#xff1a; 头文件相关 内存管理文件 文件在 Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang 下&#xff0c;它也是放…

猫狗分类图像识别

根据深度学习的基本框架&#xff0c;我们要做以下工作&#xff1a; 1&#xff0c;构建神经网络。 2&#xff0c;预处理数据。 3&#xff0c;用训练集训练权重。 4&#xff0c;用测试集进行测试。 首先我们从创建神经网络开始&#xff1a; 先上代码&#xff1a; import torc…

第五十回 插翅虎枷打白秀英 美髯公误失小衙内-mayfly-go:web 版 linux、数据库等管理平台

晁盖宋江和吴用到山下迎接雷横上山&#xff0c;宋江邀请雷横入伙&#xff0c;雷横以母亲年事已高为由拒绝了。 雷横回到郓城&#xff0c;听李小二说从东京新来了个表演的叫白秀英&#xff0c;吹拉弹唱跳&#xff0c;样样精通&#xff0c;于是雷横和李小二一起到戏院去看演出。…

【鸿蒙 HarmonyOS 4.0】多设备响应式布局

一、背景 在渲染页面时&#xff0c;需要根据不同屏幕大小渲染出不同的效果&#xff0c;动态的判断设备屏幕大小&#xff0c;便需要采用多设备响应式布局。这种设计方法能够动态适配各种屏幕大小&#xff0c;确保网站在不同设备上都能呈现出最佳的效果。 二、媒体查询&#xf…

js形参传递特殊字符

在前端我们给其他页面传值或者传数据到后台的时候&#xff0c;字符串经常将一些特殊符号识别成字符集。这种情况下会将数据打断或者打乱&#xff0c;比如字符串里面包含*/&这些符号的时候就会错误。 我们可以通过将字符中的特殊字符替换成十六进制的字符&#xff0c;一些特…

单例服务拆分为分布式架构

将独立业务服务拆分为分布式 为啥会有这个想法&#xff1f;因为我要造锤子&#xff0c;拿着造好的锤子&#xff0c;去找锤子&#xff0c;没有造锤子的经验无法找一个造锤子的坑。 现有情况说明 单机软件&#xff1a;就是将软件安装在自己的电脑上&#xff0c;自己用的那种&…

一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读!

一本书讲透ChatGPT&#xff0c;实现从理论到实践的跨越&#xff01;大模型技术工程师必读 个人简介前言内容简介作者简介专家推荐读者对象购买链接直播预告参与方式 个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作礼。 &#x1f396;️&#x1f396;️:…

Cisco Secure ACS 5.8.0.32 安装 + Crack 教程

Cisco Secure ACS 5.8.0.32 安装 Crack 教程 前言系统环境开始安装 开始破解导入授权文件 前言 在ESXi 6.7 上经历过无数次的安装尝试 测试了各种兼容版本都没有安装成功,记最后一次安装成功的过程. 系统环境 服务器 : Dell R720xd CPU : E5-2620 v2 系统 : ESXi 6.7…