import os
import pytest
def test_sample():
assert 1 + 1 == 2
@pytest.fixture(scope='session')
def report_path(tmp_path_factory):
return tmp_path_factory.mktemp('reports') / 'report.html'
@pytest.mark.usefixtures('report_path')
def test_generate_report(report_path):
# Run pytest programmatically with html plugin to generate report
import subprocess
result = subprocess.run([
'pytest',
'--html=' + str(report_path),
'--self-contained-html',
'--maxfail=1',
'--disable-warnings'
], capture_output=True, text=True)
# Check pytest run was successful
assert result.returncode == 0, f"Pytest failed: {result.stdout} {result.stderr}"
# Check report file exists
assert os.path.exists(report_path), "Report file was not created"
# Check report content includes test name and status
with open(report_path, 'r', encoding='utf-8') as f:
content = f.read()
assert 'test_sample' in content, "Test name not found in report"
assert 'passed' in content.lower(), "Test status 'passed' not found in report"This script defines a simple test test_sample that always passes.
The report_path fixture creates a temporary directory for the HTML report to avoid cluttering the project folder.
The test_generate_report test runs PyTest programmatically with the pytest-html plugin enabled to generate an HTML report file.
Assertions check that PyTest ran successfully, the report file was created, and the report content includes the test name and the word 'passed'.
This shows how plugins extend PyTest by adding new features like HTML reporting, which is not available in PyTest by default.