超详细的 pytest 教程(一)使用入门篇

190 篇文章 0 订阅
188 篇文章 3 订阅

前言

pytest到目前为止还没有翻译的比较好全面的使用文档,很多英文不太好的小伙伴,在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的,由于时间关系一直搁置,直到今天才开始写。本文是第一篇,主要介绍pytest的入门使用,后续会分篇针对pytest中的各个功能出详细的使用教程。

一、环境安装

pytest是python中的第三方库,使用之前需要先安装,在命令行中运行以下安装命令 :

pip insatll pytest

检查安装是否成功以及安装的版本,命令行命令如下:

pytest --version

执行上述命令,能够输出版本信息,那就说明安装成功啦。

二、用例编写

当我们通过pytest执行用例时,pytest会自动递归遍历执行路径下所有的目录,根据pytest中默认用例的识别的规则,自动收集测试用例。所有在使用pytest编写测试用例之前,我们首先需要了解一下pytest收集用例时默认的用例识别规则。

1、默认的用例识别的规则

  • 1、用例文件:所有文件名为 test_ 开头 或者 _test 开头的文件会被识别为用例文件。
  • 2:用例类,测试文件中每个Test开头的类就是一个测试用例类。
  • 3、测试用例:测试类中每个test开头的方法就是一条测试用例,测试文件中每个test开头的函数也是一条测试用例,

备注:上述默认的用例查找规则,可在pytest的配置文件进行修改(后续章节会详细介绍配置文件的使用)

另外pytest兼容unittest,以unittest的用例编写规范写的用例,pytest都能够识别出来

通过了解上述pytest中用例识别的规则,可以知道pytest中用例编写,能使用函数的形式,也能使用类的形式,那么接下来就分别给大家介绍一下这两种方式编写用例。

2、函数形式编写用例

规则:用例方法名以test开头即可

# \testcases\test_demo1.py

def test_demo():
    assert 100 == 100

使用命令 pytest 就可以执行测试函数,输出结果如下:

C:\testcases>pytest 
======================test session starts ======================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\testcases
plugins:  testreport-1.1.2
collected 1 item                                                           
test_demo1.py .    [100%]
====================== 1 passed in 0.26s ======================

3、以类的形式编写用例

规则: 测试类命名以Test开头,用例方法以test开头

# test_demo2.py
class TestDome:

    def test_demo1(self):
        assert 11 == 11

    def test_demo(self):
        assert 22 == 21

命令pytest运行上述用例,结果如下:

====================== test session starts ======================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\testcases
plugins:  testreport-1.1.2
collected 2 items                                                                   
test_demo1.py .F                  [100%]
====================== FAILURES ======================
___________ TestDome.test_demo ____________
self = <test_demo1.TestDome object at 0x0445F450>
    def test_demo(self):
>       assert 22 == 21
E       assert 22 == 21
test_demo1.py:25: AssertionError
====================== short test summary info =======================
FAILED test_demo1.py::TestDome::test_demo - assert 22 == 21
====================== 1 failed, 1 passed in 0.53s ======================

上面的运行结果可以看出来,一条用例执行通过,一条执行失败

三、执行测试

在上面我们使用的是 pytest这个命令去执行测试用例。关于pytest执行测试,有两种方式,一种是命令行通过pytest这个命令执行,另外在代码中可以通过pytest.main()这个方法来执行测试。接下来就和大家分别详细的介绍一下pytest执行测试的方式和常用的参数

1、执行参数

测试用例

# 测试用例
class TestDome:

    def test_demo1(self):
        print('----测试用例执行-----------')
        assert 11 == 11

参数 -v : 显示测试的详细参数信息

C:\testcases>pytest -v
========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0 
cachedir: .pytest_cache
rootdir: C:\git_project\pytest-report-me-main\testcases
plugins: testreport-1.1.2
collected 1 item                                                                         test_demo1.py::TestDome::test_demo1 PASSED          [100%]
========================== 1 passed in 0.27s ==========================

参数 -s: 显示测试执行的输出信息

C:\testcases>pytest -s
=========================== test session starts ===========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\testcases
plugins: testreport-1.1.2
collected 1 item     
test_demo1.py::TestDome::test_demo1 ----测试用例执行---输出1--------
----测试用例执行---输出2--------
PASSED
=========================== 1 passed in 0.28s ===========================

2、pytest.main执行的参数传递

pytest.main方法执行测试参数传递方式:

所以的参数放在列表中,每个参数就是列表中的一个元素

pytest.main(['-v','-s'])

详细的参数可以使用命令 pytest -h 查看

3、指定执行的测试目录

命令 pytest 测试目录路径

pytest testcase/

pytest会执行指定目录路径下所有的测试用例

4、指定执行的测试文件

命令 pytest 测试文件路径

pytest testcase/test_demo1.py

pytest会执行指定测试文件中下所有的测试用例

5、指定执行的测试类

命令 pytest 测试文件::测试类

pytest testcase/test_demo1.py::TestClass

pytest会执行指定测试类里面所有的测试用例

6、指定执行的测试用例

命令 pytest 测试文件::测试类::测试方法

pytest testcase/test_demo1.py::TestClass::test_method

pytest会执行指定的测试方法

基本的入门就给大家介绍到这里,下一篇开始给大家详细介绍pytest的相关特性

本文长期更新,追更请点赞或者插眼哈

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
pytest是一个功能强大的Python测试框架,它支持参数化、fixture、mock、覆盖率等多种测试方式。以下是pytest详细教程: 1.安装pytest ``` pip install pytest ``` 2.编写测试用例 pytest测试用例文件以test_开头或以_test结尾,并且测试函数以test_开头。例如: ```python # test_demo.py def test_add(): assert 1 + 1 == 2 def test_sub(): assert 2 - 1 == 1 ``` 3.运行测试用例 在终端中进入测试用例所在的目录,运行pytest命令即可运行所有测试用例。 ``` pytest ``` 4.运行指定的测试用例 可以使用nodeid来运行指定的测试用例,nodeid由模块文件名、分隔符、类名、方法名、参数构成。例如: ``` pytest ./testcase/test_demo.py::test_add ``` 5.使用fixture fixture是pytest中的一个重要概念,它可以用来为测试用例提供前置条件和后置条件。例如: ```python # conftest.py import pytest @pytest.fixture() def login(): print("登录操作") yield print("退出登录") # test_demo.py def test_cart(login): print("购物车测试") ``` 6.参数化测试 pytest支持参数化测试,可以使用@pytest.mark.parametrize装饰器来实现。例如: ```python # test_demo.py import pytest @pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)]) def test_eval(test_input, expected): assert eval(test_input) == expected ``` 7.使用mock pytest可以与mock一起使用,实现对被测代码的模拟。例如: ```python # test_demo.py from unittest import mock def test_demo(): with mock.patch("os.getcwd", return_value="/test"): assert os.getcwd() == "/test" ``` 8.覆盖率测试 pytest可以使用pytest-cov插件来进行覆盖率测试。例如: ``` pytest --cov=./ ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢软测的小北葵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值