这是测试框架的学习,开始和python结合起来了,边学习边补充语法吧
我先来总结一下标记 标记分为用户自定义标记和框架内置标记
1.用户自定义标记
下面是标记注册,先创建一个ini的本文,注意要在根目录下
下面是引用标记
比如我想只测试web标记的用例,用pytest -m web 来筛选
2.内置标记
不用注册可直接使用,可筛选可增加特殊效果,不同标记可增加不同效果
读懂测试用例结果
fixtrue
因为 fixture 不是普通函数!
加了 @pytest.fixture 后:它变成了 pytest 专属工具调用方式变成:调用方式变成:写函数名当参数 → 自动运行
还可以自动执行,比如下面有几百个用例,这样就不区别对待了
yield作用
-
pytest 执行
test_1(f)时,发现参数f对应上面的 fixturef() -
执行 fixture 里
yield之前的代码:打印 “用例开始执行” -
执行到
yield 123时,pytest 会把123这个值 “返回” 给用例里的f参数 -
用例
test_1里的print("接收到yield传来的值", f)执行,所以输出接收到yield传来的值 123 -
用例执行完,再回到 fixture 里,执行
yield后面的代码:打印 “用例结束执行”
接下来说一下不同参数对应的输出信息
module 不用每次都执行,只在最前最后面执行,比如你要打开浏览器页面,不可能每个用例都打开一次,这也叫范围共享,省了很多时间
配置全局fixtrue之conftest.py文件
所以在正常的情况下。我们一般都是把fixtrue的功能放在conftest.py文件内,然后外面调用的时候用@pytest.fixture时候去使用。这里要记住一点,那就是conftest.py文件的名称是固定的,也就是内置的。只有设置成这个文件的名称才回去直接执行里面的内容。 就比如我在conftest里写一个 '
@pytest.fixture()
def f():
print("1")
yield
print("2")
import pytest
@pytest.mark.usefixtures("f") # 注意:双引号包起来
def test_a():
print("我是测试用例")
就可以用了
1)conftest.py
- 它是 pytest 的公共配置文件
- 专门用来放所有测试文件都能用的 fixture
- 不用导入,整个项目自动识别
2) @pytest.fixture()
- 用来定义一个夹具(前置 + 后置 + 返回值)
- 相当于造一个可复用的工具
- 可以写在 conftest 里,也可以写在测试文件里
3) @pytest.mark.usefixtures("xxx")
- 给用例 / 类绑定 fixture
- 让 fixture 自动执行前后置
- 不拿返回值
当然,@pytest.fixture也可以写在测试项目里
插件
html插件
pytest --html=report.html
可以生成html报告
xdist插件
让你的 pytest 用多进程并行跑测试用例,大幅缩短执行时间
-n后面加数字,代表分为几个进程
pytest -n 4
rerunfailures插件
-
--reruns N:失败的用例,自动重试N次 -
--reruns-delay S:每次重试之间,延迟S秒再跑
pytest --reruns 2 --reruns-delay 1
生成企业级报告
pytest --alluredir=./allure-results
allure generate ./allure-results -o ./allure-report --clean
pytest→ 运行测试--alluredir=→ 指定 Allure 结果存放目录./allure-results→ 文件夹名字(你自己随便起)
-o = output = 输出到哪里
--clean = 清空旧报告