1. 概述
pytest官方文档介绍:
pytest: helps you write better programs
pytest ?is a framework that makes building simple and scalable tests easy. Tests are expressive and readable—no boilerplate code required. Get started in minutes with a small unit test or complex functional test for your application or library.
翻译过来意思是:
pytest测试框架,它使得构建简单且可扩展的测试变得容易。测试是表达性和可读性的——不需要样板代码。在几分钟内开始对您的应用程序或库进行一个小的单元测试或复杂的功能测试。
总体来说:pytest是一个非常成熟的全功能的Python测试框架。 特点:
- 简单灵活,容易上手
- 能够支持简单的单元测试和复杂的功能测试,可以用来集成接口、UI、app自动化测试。
- 自动收集测试用例、支持参数化
- 有测试会话、测试模块、测试类、测试函数级别的fixture
- 在conftest.py文件中,支持文件共享
- 集成allure报告、jenkins
- 对于失败用例,可以进行重运行
- 进行mark标记,指定执行哪些用例或者不执行哪些用例
2. 使用说明
2.1 安装
①安装:cmd窗口输入pip命令进行安装??pip install -U pytest
②安装完成后,确认版本信息 pyets --version
2.2 收集用例
自动加载 - 自动的找符合规则的用例。 搜索范围 - 目录 - 在哪个目录下执行pytest命令,哪个就是根目录。 文件命名 - test_*.py / *_test.py 用例命名 - 测试类(Test开头,不能__init__)。用例名称要求:test_*
2.3 pytest运行机制设置
打开Pycharm, File → Settings → Tool1 →Python Integrated Tools → 选择工作空间 →Testing 选择Pytest → Apply → OK
?2.4?运行
import pytest
def test_a():
print("============= 执行test_a =============")
assert 1 == 1
def test_b():
print("============= 执行test_b =============")
assert 1 != 2
# 运行
if __name__ == '__main__':
pytest.main()
# 运行结果:
============================= test session starts =============================
platform win32 -- Python 3.7.3, pytest-6.1.2, py-1.9.0, pluggy-0.13.1
rootdir: G:\workspace\Pycharm_workspace\PytestDemo\testcases
plugins: allure-pytest-2.8.19, Faker-5.0.1, html-3.0.0, metadata-1.10.0collected 2 items
test_a.py .============= 执行test_a =============
.============= 执行test_b =============
[100%]
============================== 2 passed in 0.14s ==============================
2.5?运行参数
1、-k 表达式:执行某个关键字的用例,匹配的范围是文件名、类名、函数名为变量,用and来区分
? ? ?pytest.main(['-k not test_2'])? ?#?test_2用例被取消运行
2、-s:输入用例中的调式信息,比如print的打印信息
? ??pytest.main(["-s"])
3、-v:输出用例更加详细的执行信息,比如用例所在的文件及用例名称,显示详细报告
? ?pytest.main(["-v"])
4、--maxfail=num:当错误个数到达给定数时,退出测试
??pytest.main(["--maxfail=3"])
5、-m:只运行被标记的用例
# 1、创建pytest.ini,注册标签名
[pytest]
markers=zls
# 2、要运行的用例上打标记
@pytest.mark.zls
def test_1():
print("******************")
assert "tom" == "tom"
def test_2():
assert "tom" == "tom"
# 3、运行
pytest.main(['-m zls'])
# 结果:
collected 2 items / 1 deselected / 1 selected
2.6?运行方式
1、单独执行test_demo.py所有用例
? ??pytest.main(["testcases/test_demo.py"])
2、执行指定目录下所有用例
? ??pytest.main(["testcase/other"])
3、单独执行某个用例
? ?pytest.main(["testcases/test_demo.py::test_1"])
2.7 用例的执行顺序
1、文件 -》文件命名按ASCII码排序
2、用例 -》用例代码的先后顺序 2、横向搜索 -》先找到当前目录下的test_*的用例,再去从子目录下搜索。
|