58新一代自动化测试神器playwright+python系列课程_pytest-playwright_pytest

pytest-playwright_pytest.ini配置文件应用

pytest.ini文件是pytest框架的配置文件,在pytest.ini文件中可以配置自动化用例执行时的参数,用例将按照配置的参数执行。我们来看一下pytest.ini文件中常用配置

首先我们先来看一下跟收集用例相关的参数

pytest默认的测试用例收集规则为:

文件名匹配 test_*.py 或 *_test.py

以 test_ 开头的函数

以 Test_ 开头的类,不能包含_init_初始化方法

类中以 test_ 开头的方法

上面的默认规则我们是可以通过配置文件的设置来修改的

# file_name: pytest.ini

[pytest]

testpaths = playwright_study

python_files = test*.py

python_classes = Test*

python_functions = test_*

testpaths:配置在哪个目录下搜索测试用例,可自定义,可以配置多个,多个用空格隔开

python_files:用来配置搜索的测试用例的文件名称,可自定义,可以配置多个,多个用空格隔开

python_classes:配置搜索的测试用例的类名,可自定义,可以配置多个,多个用空格隔开

python_functions:配置搜索的测试用例的方法名,可自定义,可以配置多个,多个用空格隔开

上面的配置表示:在playwright_study目录下,搜索以test开头,以.py结尾的文件,以Test开头的类,以test_开头的方法。

接下来再看一下执行用例相关的参数

base-url

作用:配置整个环境的基线url,配置好后脚本中只需要使用相对地址就可以

[pytest]

base_url=http://www.xxx.com

addopts

作用:addopts参数可以更改默认的命令行选项;这个参数在我们需要在命令行中输入大一堆指令来执行测试用例时会用到,这个时候就可以配置文件中配置这个参数来代替,省掉很多重复的工作

例如:我想在测试结束之后,生成测试报告,失败的测试用例重跑两次,如果通过命令行输入指令来执行的话,指令会很长:

pytest -v -s --reruns 2 --html=report.html --self-contained-html

如果每次执行都要输入上面的指令会很繁琐,这个时候我们通过配置addopts参数来解决这个问题:

# file_name: pytest.ini

[pytest]

addopts = -v -s --reruns=2 --html=report.html --self-contained-html  # 多个命令行参数用空格分隔开,可以添加多个命令行参数

addopts后常用的命令行参数还有:

-v 参数

打印详细运行日志信息,一般在调试的时候加上这个参数,终端会打印出每条用例的详细日志信息,方便定位问题。

-s 参数

控制台输出结果,当你的代码里面有print输出语句,如果想在运行结果中打印print输出的代码(默认控制台是不输出打印结果的),在运行的时候可以添加 -s 参数,一般在调试的时候使用。

-k 参数

只执行含有某个关键字的测试用例。

应用场景:在测试场景中,如果只想执行某些测试用例,或者测试用例中包含某个关键字的测试用例时,可以使用这个参数。

使用方法如下:

pytest -k "类名"

pytest -k "方法名"

pytest -k "类名 and not 方法名"

注意:如果是Windows系统,-k 后面的字符串参数必须用双引号。Mac上仅第三个需要加双引号。

-x 参数

遇到用例失败立即停止运行。

应用场景:

在回归测试过程中,假如一共有10条基础用例,当开发人员打完包提交测试的时候,需要先运行这10条基础用例,全部通过才能提交给测试人员正式测试。如果有一条用例失败,就将这个版本打回给开发人员。这时就可以添加 -x 参数,一旦发现有失败的用例即终止运行。

--maxfail 参数

用例失败个数达到阈值停止运行。

应用场景:

在回归测试过程中,假如一共有10条基础用例,当开发人员打完包提交测试的时候,需要先运行这10条基础用例,全部通过才能提交给测试人员正式测试,如果运行过程中有 [num] 条用例失败,即中止运行,后面测试用例都放弃执行,直接退出。这时就可以使用 --maxfail 参数。

使用方法如下:

pytest --maxfail==[num]s

--headed:在有头模式下运行测试(默认:无头)。

--browser:在不同的浏览器中运行测试chromium,firefox, 或webkit。可以多次指定(默认:所有浏览器)。pytest --browser chromium --browser webkit为多次指定

--browser-channel 要使用的浏览器频道。

--slowmo 用慢动作运行测试。

--device 要模拟的设备。

--output测试生成的工件的目录(默认值:)test-results。

--tracing是否记录每次测试的轨迹。on、off、 或retain-on-failure(默认:off)。

--video是否为每次测试录制视频。on、off、 或retain-on-failure(默认:off)。

--screenshot每次测试后是否自动截屏。on、off、 或only-on-failure(默认:off)。

这样加上addopts后,我们再次进入cmd命令行执行时,只要输入pytest就可以默认带上这些参数了。

markers

作用:测试用例中使用@pytest.mark.标签名 装饰器,来控制用例执行范围。标签名由自己定义,只需要添加到pytest.ini文件中。

格式:list列表类型

写法:

# file_name: pytest.ini

[pytest]

markers =

mark1: 执行添加了@pytest.mark.mark1的用例

mark2: 执行添加了@pytest.mark.mark2的用例

举例:

  1. 执行命令:

Pytest –m mark1 #执行添加了@pytest.mark.mark1的用例

Pytest –m “mark1 and mark2” #执行同时添加了@pytest.mark.mark1和@pytest.mark.mark2的用例

Pytest –m “mark1 or mark2” #执行添加了@pytest.mark.mark1或@pytest.mark.mark2的用例

  1. 当用例上添加 @pytest.mark. 标签名 装饰器时,如果标签名没有添加到pytest.ini文件的markers参数下,当在执行测试用例追加命令行参数 -m= 标签名时,虽然可以正常执行,但是在执行后会出现告警提示。

可以在 pytest.ini 配置文件中增加 markers 字段注册标记形象的名称。

例如:

[pytest]

# 注册标记名称

markers =

smoke: 冒烟测试用例

system: 系统测试用例

image

  1. 添加后字段注册标记名称后,使用 pytest --markers 命令行参数运行可以查看到添加的标记名称。

【注意】:在自定义标签的的同时应该尽量避免使用如下关键字:【pytest测试框架的内置标签,可以直接使用,不需要重新在pytest.ini文件中注册】
① usefixtures ② usefixtures ③ skip ④ skipif ⑤ xfail ⑥ parametrize

norecursedirs

①norecursedirs作用:pytest在收集测试用例的时候,会递归遍历当前目录下的所有子目录,当我们需要某些目录下的用例不要执行时,就可以通过设置norecursedirs参数来实现这个功能。

# file_name: pytest.ini

[pytest]

norecursedirs = venv report util log  # 多个目录需要空格分开,可以配置多个

上面的配置表示venv report util log这4个目录下的用例需要过滤掉不执行。

再来看一下日志输出的

log_cli

作用:控制台实时输出日志

格式: log_cli=True 或 log_cli=False(默认),或者 log_cli=1 或 log_cli=0

当我们设置 log_cli=True时,在控制台使用命令行参数运行测试用例时可以看到程序里写入的日志;可以非常清晰的看出具体的是哪个package下的哪个module下的哪个测试用例是passed还是failed;

所以我们平时在调试代码是否有问题时推荐加上 log_cli=True ,当测试用例调试通过之后批量执行时就可以去掉了。

log_level:

作用:控制日志输出级别,默认warning级别以上日志输出

需要注意:pytest.ini配置文件的参数值会被命令行覆盖

当ini配置文件的参数与执行测试用例文件的命令行参数重复时,命令行参数值会覆盖ini配置文件中定义的参数值。

posted @ 2024-03-21 11:08  测试_老姜  阅读(15)  评论(0)    收藏  举报