Python pytest+yaml 文件,怎么在 yaml 文件中引用变量?
时间: 2023-05-23 07:05:03 浏览: 797
A:您可以使用 YAML 的变量引用语法 `${}` 来引用变量。
例如,假设您有以下的 YAML 文件:
```yaml
default_timeout: 10
tests:
- name: Test case A
timeout: ${default_timeout}
- name: Test case B
timeout: 5
```
在上面的 YAML 文件中,我们使用了 `${default_timeout}` 引用了一个名为 `default_timeout` 的变量。
如果您想动态设置变量的值,您可以在运行 pytest 命令时使用 `--yamlvariables` 参数来传递变量值。例如,
```bash
pytest --yamlvariables default_timeout=5 mytests.yaml
```
这将设置 `default_timeout` 的值为 5。注意,您可以传递多个变量名和值,变量名与值之间使用等号 `=` 连接。
相关问题
Python pytest+yaml 文件,如何使用yaml文件中的变量
A:在pytest中使用yaml文件中的变量,可以使用PyYAML库读取yaml文件,然后将其转换为字典,再通过pytest.fixture传递给测试用例。
以下是一些示例代码:
1.创建一个名为config.yaml的yaml文件,包含变量test_url和test_data:
test_url: "http://example.com"
test_data:
username: "testuser"
password: "testpassword"
2.在conftest.py文件中,使用PyYAML库读取yaml文件,并将其转换为字典:
import yaml
def pytest_addoption(parser):
parser.addoption("--config", action="store", default="config.yaml", help="path to config file")
@pytest.fixture(scope="session")
def config(request):
with open(request.config.getoption("--config"), 'r') as file:
config = yaml.safe_load(file)
return config
3.在测试用例中,使用@pytest.mark.parametrize装饰器传递从config字典中读取的变量:
import requests
import pytest
@pytest.mark.parametrize('username,password', [(config['test_data']['username'], config['test_data']['password'])])
def test_login(config, username, password):
response = requests.post(config['test_url'], data={'username': username, 'password': password})
assert response.status_code == 200
在这个示例中,我们从config字典中读取了test_data中的用户名和密码变量,并将其传递给测试用例test_login。
python+requests+pytest+allure+yaml+DDT+logs 接口自动化框架终极版怎么将环境配置成自己的
要在Python中使用requests、pytest、allure、yaml、DDT和logs构建接口自动化框架,并将环境配置成自己的,可以按照以下步骤进行:
### 1. 安装必要的库
首先,确保安装了必要的Python库。你可以使用pip来安装这些库:
```bash
pip install requests pytest allure-pytest PyYAML
```
### 2. 项目结构
创建一个项目目录,并按照以下结构组织文件:
```
project/
│
├── tests/
│ ├── test_cases/
│ │ ├── test_example.py
│ ├── conftest.py
│
├── data/
│ ├── test_data.yaml
│
├── utils/
│ ├── logger.py
│ ├── request_utils.py
│
├── reports/
│
├── config/
│ ├── config.yaml
│
└── requirements.txt
```
### 3. 配置环境
在`config/config.yaml`文件中配置环境变量:
```yaml
base_url: "https://api.example.com"
timeout: 10
```
### 4. 日志配置
在`utils/logger.py`中配置日志:
```python
import logging
import os
def get_logger():
logger = logging.getLogger("api_logger")
logger.setLevel(logging.DEBUG)
if not logger.handlers:
fh = logging.FileHandler("logs/api.log")
fh.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)
return logger
```
### 5. 请求工具
在`utils/request_utils.py`中编写请求工具:
```python
import requests
from utils.logger import get_logger
import yaml
logger = get_logger()
def send_request(method, url, **kwargs):
response = requests.request(method, url, **kwargs)
logger.info(f"Request: {method} {url} {kwargs}")
logger.info(f"Response: {response.status_code} {response.text}")
return response
```
### 6. 测试用例
在`tests/test_cases/test_example.py`中编写测试用例:
```python
import pytest
import yaml
from utils.request_utils import send_request
@pytest.fixture(scope="module")
def config():
with open("config/config.yaml", "r") as file:
config = yaml.safe_load(file)
return config
def test_example(config):
url = config["base_url"] + "/endpoint"
response = send_request("GET", url)
assert response.status_code == 200
```
### 7. 运行测试
使用pytest运行测试,并生成Allure报告:
```bash
pytest --alluredir=reports
allure serve reports
```
### 8. 数据驱动
使用DDT进行数据驱动测试。在`tests/test_cases/test_ddt_example.py`中:
```python
import pytest
import yaml
from utils.request_utils import send_request
@pytest.fixture(scope="module")
def config():
with open("config/config.yaml", "r") as file:
config = yaml.safe_load(file)
return config
@pytest.mark.parametrize("data", yaml.safe_load(open("data/test_data.yaml", "r")))
def test_ddt_example(config, data):
url = config["base_url"] + "/endpoint"
response = send_request("POST", url, json=data)
assert response.status_code == 200
```
### 9. 报告生成
Allure会生成详细的测试报告,可以通过浏览器查看。
阅读全文