真实项目中如何使用pytest进行单元测试(结合PyCharm)

使用pytest进行单元测试(结合PyCharm)

目的

网上很多介绍pytest的文章,但是很少结合实际开发,多为简单demo。以下介绍结合实际项目如何使用。

主要内容

  • 创建普通项目
  • 添加pytest依赖
  • 创建测试目录
  • 执行测试
  • 结合PyCharm
  • 参考文献

创建普通项目

创建一个项目根目录"pytest-demo"

添加项目文件,目录结构如下


pytest-demo

  • demo

    • \_\_init\_\_.py

      • utils

        • \_\_init\_\_.py
        • math_helper.py

math_helper.py如下

class MathHelper(object):
    def addition(self, first, second):
        """
        加法
        :param first: 第一个参数
        :param second: 第二个参数
        :return: 相加后的结果
        """
        # 先判断传入类型
        if not isinstance(first, (int, float)):
            raise ValueError("first参数必须为数值")
        if not isinstance(second, (int, float)):
            raise ValueError("second参数必须为数值")
        # 返回结果
        return first + second

添加pytest依赖

$ pip install pytest

添加单元测试目录

在根目录下创建单元测试目录"tests"(注意要创建成package,方便全量测试)

对应添加测试类,测试类文件名必须为test_.py 或 _test.py,命名规则可查看pytest官方文档

最终目录结构如下


pytest-demo

  • demo

    • \_\_init\_\_.py

      • utils

        • \_\_init\_\_.py
        • math_helper.py
  • tests

    • demo

      • \_\_init\_\_.py

        • utils

          • \_\_init\_\_.py
          • test_math_helper.py

test_math_helper.py如下

import pytest
from demo.utils.math_helper import MathHelper


def test_addition():
    # 初始化
    helper = MathHelper()
    # 输入错误类型,预期接收ValueError的报错
    with pytest.raises(ValueError):
        helper.addition("1", 2)
    with pytest.raises(ValueError):
        helper.addition(1, "2")
    # 正确调用
    result = helper.addition(1, 2)
    # 使用assert判断结果
    assert result == 3

执行测试用例

$ pytest

即可执行所有测试,并给出结果

结合PyCharm

  • 设置PyCharm默认测试类型
  1. 打开 File > Settings > Tools > Python Integrated Tools > Testing > Default test runner
  2. 修改下拉框,改为"pytest"
  3. 右键单元测试文件,点击"run",即可执行测试,在下方的"Run"窗口也有相应的测试结果
  • 设置执行所有测试
  1. 右键"tests"文件夹,选择"Run"
  2. 接下来就直接跑目录下所有的测试用例了,在下方的"Run"窗口可以看到测试信息
  3. 如果报错找不到模块时,需要打开右上角的编辑启动项,先删除旧信息,否则会有缓存

参考文献

pytest官方文档

不秃顶、不猝死,顺顺利利活到100可以吗?

1 声望
2 粉丝
0 条评论
推荐阅读
Maven私有仓库-Nexus3
Maven私有仓库-Nexus3工作中,可能需要封装一些通用的工具类库但是公司代码较为敏感,一般不能开放到公共仓库中此时可以使用Nexus3搭建公司内部使用的私有仓库视频版:BiliBiliDemo步骤使用docker创建Nexus3服务...

言午日尧耳总阅读 741

封面图
又一款眼前一亮的Linux终端工具!
今天给大家介绍一款最近发现的功能十分强大,颜值非常高的一款终端工具。这个神器我是在其他公众号文章上看到的,但他们都没把它的强大之处介绍明白,所以我自己体验一波后,再向大家分享自己的体验。

良许6阅读 1.9k

FastAPI性能碾压Flask?
不止一次的听过,FastAPI性能碾压Flask,直追Golang,不过一直没有测试过,今天闲着没事测试一下看看结果。不知道是哪里出了问题,结果大跌眼镜。

二毛erma02阅读 10.3k评论 3

封面图
Linux终端居然也可以做文件浏览器?
大家好,我是良许。在抖音上做直播已经整整 5 个月了,我很自豪我一路坚持到了现在【笑脸】最近我在做直播的时候,也开始学习鱼皮大佬,直播写代码。当然我不懂 Java 后端,因此就写写自己擅长的 Shell 脚本。但...

良许1阅读 2.1k

Python之如何优雅的重试
为了避免偶尔的网络连接失败,需要加上重试机制,那么最简单的形式就是在对应的代码片段加一个循环,循环体里使用异常捕获,连接成功时退出循环,否则就重复执行相关逻辑,此时修改之后的函数f如下

Harpsichord12073阅读 7.4k

基于 EKS Fargate 搭建微服务性能分析系统
近期 Amazon Fargate 在中国区正式落地,因 Fargate 使用 Serverless 架构,更加适合对性能要求不敏感的服务使用,Pyroscope 是一款基于 Golang 开发的应用程序性能分析工具,Pyroscope 的服务端为无状态服务且性...

亚马逊云开发者阅读 7.9k

ChatGPT的开源平替,终于来了!
最近这段时间,一个号称全球最大ChatGPT开源平替项目Open Assistant引起了大家的注意。这不最近还登上了GitHub的Trending热榜。[链接]根据官方的介绍,Open Assistant也是一个对话式的大型语言模型项目,可以理解...

CodeSheep2阅读 1.1k

封面图

不秃顶、不猝死,顺顺利利活到100可以吗?

1 声望
2 粉丝
宣传栏