pytest简介1 -初级篇

官网:https://docs.pytest.org/en/stable/deprecations.html#support-for-tests-written-for-nose

一.pytest的基本简介

pytest 安装: pip3 install pytest

pytest查看版本:pytest --version

1. pytest是python的一个成熟的单元框架,比unitest更加灵活,容易上手;

2. 它可以和selenum,requests,appium结合实现 web自动化,接口自动化,app自动化;

3. pytest可以 实现测试用例的跳过以及reruns失败用例重试

4. 它可以和allure生产美观的测试报告;

5. 它可以和jenkins持续集成;

6.pytest有很多非常强大的插件,他们能够是实现很多非常使用的操作。

pytest

pytest-html         生成html格式的自动化测试报告

pytest-xdist         测试用例分布式执行,多cpu分发

pytest-ordering    用于改变测试用例的执行顺序

pytest-rerunfailures   用例失败后重跑

allure-pytest     用于生成美观的测试报告

上面的安装包,可以放到requirements.txt中,用pip install -r requirements.txt 去自动安装

二. 使用pytest,默认的测试用例的规则以及基础应用

1.模块名(也就是py文件名)必须是以test_开头 或者 _test结尾

2.测试类必须以Test开头,并且不能有init方法

3.测试方法必须以test开头

三 pytest测试用例的运行方法

1.主函数模式

1)运行所有:  在主函数中写:  pytest.mian()

2)指定模块: pytest.main(['-vs','test_login.py模块名或者文件夹名或者用例名'])

3)指定目录:pytest.main(['-vs','./interface_test'])

4) 通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成。

pytest.main(['-vs','./pythonProject/TestDemo1_test.py::TestDemo1'])
pytest.main(['-vs','./pythonProject/TestDemo1_test.py::TestDemo1::test_03'])

2.命令模式

1) 运行所有:pytest

2) 指定模块:pytest -vs test_login.py

3) 指定目录:pytest -vs api_folder/

参数详解:

-s : 表示输出调试信息,包括print信息

-v: 显示详细的信息

-vs: 这两个参数一起用

 -n:支持多线程或者分布式运行测试用例

 如:pytest -vs ./pythonProject/TestDemo1_test.py -n 2

        或者pytest.main(['-vs','./pythonProject/TestDemo1_test.py',‘-n=2’])

--reruns NUm:失败用例重跑

-x : 只要有一个用例报错,测试停止

--maxfail=2 : 出现2个用例失败就停止

-k:根据测试用例的部分字符串指定测试用例

  • 如:pytest -vs ./
   TestDemo1_test.py -k "02"

--html ./report/report.html: 在当前路径的report文件夹中生成report.html测试报告

 

4)重新执行用例:

pytest.main(['-vs', './TestDemo1_test.py::TestDemo1','--reruns=2'])
pytest -vs ./TestDemo1_test.py::TestDemo1 --reruns 2
eg其他:
pytest -vs ./TestDemo1_test.py::TestDemo1 -x
pytest -vs ./TestDemo1_test.py::TestDemo1 --maxfail 2

3.通过读取pytest.ini配置文件运行

pytest.ini文件它是 pytest单元测试框架的核心配置文件。

  1.位置:一般是放在项目的根目录

  2.编码:必须是ANSI,可以使用notpad++更改编码格式。(pycham中直接创建的话是不行的,编码格式是utl8不对,必须改为ANSI编码)

  3.作用:改变pytest默认的行为。

  4.运行的规则:不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件。

在根目录新建一个pytest.ini文件,内容为:

  [pytest]

addopts =-vs       #命令行的参数,用空格分隔

testpaths =./testcase     #测试用例的路径

python_files=test_*.py   #模块名的规则,默认是test_开通,可以修改的
pytest_classes=Test*    #类名的规则,默认是Test开通,可以修改的
python_functions=test*   #方法名的规则:默认是test开通,可以修改的

 

四 pytest用例的执行顺序是怎样的呢?

unittest.ascII的大小来决定的执行的顺序

pytest:默认从上大小

改变默认的执行顺序:就使用mark标记---即使用装饰器:  @pytest.mark.run(order=2) 来指定执行的顺序

 

五. 如何分组执行(冒烟,分模块执行,分接口和web执行)

 

 

 

 

1)在用例的方法上面添加装饰器:  @pytest.mark.smoke

 

 

 

smoke: 自己定义的‘冒烟用例’的标记,分布在各个模块里面

执行命令:

  • pytest -m "smoke"

执行多个标记的用例:or

  • pytest -m "smoke or productmanage"

PS:  pytest -m 说明:用于标记测试用例,执行特定的测试用例。

设置pytest.ini文件:

[pytest]

addopts =-vs       #命令行的参数,用空格分隔

testpaths =./testcase     #测试用例的路径

python_files=test_*.py   #模块名的规则,默认是test_开通,可以修改的
pytest_classes=Test*    #类名的规则,默认是Test开通,可以修改的
python_functions=test*   #方法名的规则:默认是test开通,可以修改的
markers = 
    smoke:冒烟用例
    usermanage:用户管理用例
productmanage:产品管理用例

六.生成报告

设置pytest.ini文件:

[pytest]

addopts =-vs --html  ./report/report.html     #命令行的参数,用空格分隔. 配置在当前路径下的report目录下生成report.html报告

testpaths =./testcase     #测试用例的路径

python_files=test_*.py   #模块名的规则,默认是test_开通,可以修改的
pytest_classes=Test*    #类名的规则,默认是Test开通,可以修改的
python_functions=test*   #方法名的规则:默认是test开通,可以修改的
markers = 
    smoke:冒烟用例
    usermanage:用户管理用例
    productmanage:产品管理用例

 七.pytest跳过测试用例

(1)无条件跳过测试用例

@pytest.mark.skip(reason="notNeedTest")

(2)有条件跳过

@pytest.mark.skipif(age>18,reason="已成年")

 

posted @ 2023-03-13 16:41  苹果芒  阅读(92)  评论(0编辑  收藏  举报