Day1 - Pytest(一)

Pytest

常见插件

pytest-html生成html格式的自动化测试报告
pytest-xdist测试用例多线程执行
pytest-ordering改变测试用例执行顺序
pytest-rerunfailures用例失败后重跑
pytest-timeout设置用例超时时间
allure-pytest用于生成美观的测试报告
pytest-repeat用于重复执行某个函数

运行指令

pytest test_mod.py #运行模块中的测试
pytest testing/ #运行目录中所有的测试
pytest -k 'MyClass and not method' #按关键字表达式运行测试

按集合参数运行测试

传入相对于工作目录的模块文件名,后跟由 `::` 字符分隔的类名和函数名等说明符,以及用 `[]` 括起来的参数化参数。

pytest tests/test_mod.py::test_func #在模块内运行特定测试
pytest tests/test_mod.py::TestClass #运行类中的所有测试
pytest tests/test_mod.py::test_func[x1,y2] #指定测试的特定参数化

按标记表达式运行测试

pytest -m slow 
# 运行所有使用 @pytest.mark.slow 装饰器装饰的测试

pytest -m "slow(phase=1)"
#运行所有使用带注释的 @pytest.mark.slow(phase=1) 装饰器装饰的测试,其中 phase 关键字参数设置为 1

pytest --pyargs pkg.testing
# 这将导入 pkg.testing 并使用其文件系统位置查找并运行测试。
参数解释用法
-x用例一旦失败,就立刻停止执行
--maxfail失败用例达到多少停止执行--maxfail 10
-k执行包含某个关键字的测试用例,可以在关键字之间添加 and、or、not 关键字-k 'tcp or udp'
-v显示更多详细信息
-s打印输出调试信息,包括print打印,和-v连用-vs
-n多线程或者分布式运行测试用例-n 2
--reruns失败用例重跑,后面跟重跑次数--reruns 3
-m运行对应标签的测试例,可以在标签之间添加 and、or、not 关键字-m 'smoke or tcpip'
--html生成html格式的测试报告
--alluredir生成allure测试报告--alluredir=./allure-results

测试文件、类、函数的格式

测试文件默认格式为test.py或test.py

测试类默认格式为 Test*

测试函数默认格式为 test*

import pytest

class TestClass:
    def test_case_1(self):
        print("test case 1")
        assert 1 == 1

    def test_case_2(self):
        print("test case 2")
        assert 1 == 2

    def test_case_3(self):
        print("test case 3")
        assert 1 == 3

    def test_case_4(self):
        print("test case 4")
        assert 4 == 4

测试例的前后置

函数级别的 setup/teardown,运行于测试方法的始末,即:运行一次测试函数会运行一次setup和teardown

类级别的 setupclass/teardownclass,运行于测试类的始末,在一个测试内只运行一次setupclass和teardownclass,不关心测试类内有多少个测试函数。

class TestClass:
    def setup_class(self):
        print("\n测试类前置")

    def teardown_class(self):
        print("\n测试类后置")

    def setup(self):
        print("\n测试函数前置")

    def teardown(self):
        print("\n测试函数后置")

    def test_case_1(self):
        print("test case 1")
        assert 1 == 1

    def test_case_2(self):
        print("test case 2")
        assert 2 == 2
使用 pytest 运行测试用例有多种方法: - **使用终端运行**:打开终端或命令提示符,导航到项目根目录(即包含 tests 文件夹的目录),输入 `pytest` 命令可运行所有测试 [^2]。 - **按模块、类或函数选择运行**:可以按照某个测试用例的模块、类或函数来选择要运行的测试用例。例如,`pytest -v test_pytest_markers.py::TestClass::test_method` 可运行指定模块中指定类的指定方法;`pytest -v test_pytest_markers.py::TestClass` 可运行指定模块中指定类的所有测试用例;还可以进行多种组合,如 `pytest -v test_pytest_markers.py::TestClass test_pytest_markers.py::test_send_http` [^1]。 - **使用关键字匹配运行**:使用 `-k` 进行关键字匹配来运行测试用例名字子串,如 `pytest -v -k http test_pytest_markers.py` [^1]。 - **通过 `pytest.main()` 函数运行**: - `pytest.main()`:无任何参数,会收集当前目录下所有的测试用例,相当于命令行模式下输入命令 `pytest`。 - `pytest.main(['test_sample.py'])`:个参数,执行指定文件 `test_sample.py` 的所有测试用例。 - `pytest.main(['-q','test_sample.py'])`:二个参数,参数 `-q` 表示安静模式,不输出环境信息 [^3]。 - **使用参数控制运行方式**: - `-s`:表示输出调试信息,包括 `print` 打印的信息。 - `-v`:显示更详细的信息,可与 `-s` 起使用,如 `pytest -vs ./testcase/test_day1.py`。 - `-n`:支持多线程或者分布式运行测试用例,如 `pytest -vs ./testcase/test_day1.py -n 2`。 - `--reruns==number`:表示失败用例重跑,如 `pytest -vs ./testcase/test_day2.py --reruns 2`。 - `-x`:表示只要个用例报错,那么测试停止运行。 - `--maxfail=2`:出现两个失败用例停止。 - `-k`:根据测试用例的部分字符串指定测试用例,如 `pytest -vs test_day2 -k "yang"` [^4]。 - **通过读取 `pytest.ini` 配置文件运行**:这是最主要运用的方式 [^4]。 ### 代码示例 ```python # 使用 pytest.main() 运行指定文件的测试用例 import pytest pytest.main(['test_sample.py']) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值