超详细的 pytest 教程(一)使用入门篇
前言
- pytest到目前为止还没有翻译的比较好全面的使用文档,很多英文不太好的小伙伴,在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的,由于时间关系一直搁置,直到今天才开始写。本文是第一篇,主要介绍pytest的入门使用,后续会分篇针对pytest中的各个功能出详细的使用教程。
一、环境安装
pytest是python中的第三方库,使用之前需要先安装,在命令行中运行以下安装命令 :pip insatll pytest
检查安装是否成功以及安装的版本,命令行命令如下:pytest --version
执行上述命令,能够输出版本信息,那就说明安装成功啦
二、用例编写
- 当我们通过pytest执行用例时,pytest会自动递归遍历执行路径下所有的目录,根据pytest中默认用例的识别的规则,自动收集测试用例。所有在使用pytest编写测试用例之前,我们首先需要了解一下pytest收集用例时默认的用例识别规则。
1、默认的用例识别的规则
- 用例文件:所有文件名为
test_
开头 或者_test
开头的文件会被识别为用例文件。 - 用例类,测试文件中每个Test开头的类就是一个测试用例类。
- 测试用例:测试类中每个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方法执行测试参数传递方式:
import pytest args = ['-v','-s'] pytest.main(args)
- 所有的参数放在列表中,每个参数就是列表中的一个元素
- 详细的参数可以使用命令pytest -h查看
3、指定执行的测试目录
- 命令:pytest 测试目录路径
import pytest args = ['-v','-s','testcase/'] pytest.main(args)
- pytest会执行指定目录路径下所有的测试用例
4、指定执行的测试文件
- 命令:pytest 测试文件路径
import pytest args = ['-v','-s','testcase/test_demo1.py'] pytest.main(args)
- pytest会执行指定测试文件中下所有的测试用例
5、指定执行的测试类
- 命令:pytest 测试文件::测试类
import pytest args = ['-v','-s','testcase/test_demo1.py::TestClass'] pytest.main(args)
- pytest会执行指定测试类里面所有的测试用例
6、指定执行的测试用例
- 命令:pytest 测试文件::测试类::测试方法
import pytest args = ['-v','-s','testcase/test_demo1.py::TestClass::test_method'] pytest.main(args)
- pytest会执行指定的测试方法