1. pytest 中的 DDT,使用格式:@pytest.mark.parametrize()
import pytest
test_data = [{"name":"jike1"},{"name":"jike2"}]
#第一个参数接受数据,并传给后面的函数
@pytest.mark.parametrize("datas", test_data)
def test_get_names(datas):
name = datas["name"]
print(f"姓名有:{name}")
2. pytest 中的重跑机制,当用例执行失败以后,设置重跑
- 安装插件, pip install pytest-rerunfailures
- 执行命令中加 “pytest -s --reruns 2 --reruns-delay 3 ”,表示用例运行失败后,失败用例重运行2次,每次间隔3s钟
- 注意:重运行2次,一共需要运行3次
3. fixture 测试夹具
- 相当于 unittest 中 setUp 和 tearDown 操作
- 在项目目录下建立一个 conftest.py 文件,文件名称不可以修改
- 将 setUp 和 tearDown 操作写到一个函数中,setUp 和 tearDown 之间的用 yield xxx 生成器,表示 setUp 操作完后返回调用函数执行函数体,执行完以后,再返回来执行 yield 后面的操作
- 方法上加装饰器,@pytest.fixture()
#conftest.py文件内容
# pytest.fixture()中
# 1. 参数为空,即默认是 scope='function',相当于 unittest 中的setUp,tearDown
# 2. 参数是 scope = 'class',相当于 unittest 中的 setUpClass,tearDownClass
# 3. 参数是 scope = 'module', 表示整个模块只调用一次
# 4. 参数是 scope = 'package', 表示整个包只调用一次
@pytest.fixture()
def setup_and_teardown():
driver = webdriver.Chrome()
driver.implicitly_wait(5)
#yiled 相当于return,只是不退出程序,先返回并执行调用该方法的程序,然后再折回继续执行 yiled 后面的程序
yield driver
driver.quit()
import pytest
test_data = [{"name":"jike1"},{"name":"jike2"}]
#第一个参数接受数据,并传给后面的函数
@pytest.mark.test
@pytest.mark.parametrize("datas", test_data)
# 测试夹具中的函数名“setup_and_teardown”作为 参数 传给调用函数
def test_get_names(datas, setup_and_teardown):
name = datas["name"]
assert name == "jike1"
4. 生成 allure 报告
- 安装 allure,下载https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.13.2/,下载完解压到想要的路径,再将bin路径添加到系统路径
- 安装 pytest-allure, pip install pytest-allure
- 执行命令 pytest --alluredir = allure_report, 在项目目录下生成一个 allure_report 文件夹,里面存的是 json 格式文档
- 执行 allure serve allure_report,自动生成 allure 报告