This is an automated email from the ASF dual-hosted git repository.

fokko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-python.git


The following commit(s) were added to refs/heads/main by this push:
     new b98de518 infra: upgrade pytest and use pytest_lazy_fixtures (#2978)
b98de518 is described below

commit b98de5189db19b1f6a6bdce3ef786f9fe8773502
Author: Kevin Liu <[email protected]>
AuthorDate: Sat Feb 7 14:25:54 2026 -0500

    infra: upgrade pytest and use pytest_lazy_fixtures (#2978)
    
    <!--
    Thanks for opening a pull request!
    -->
    
    <!-- In the case this PR will resolve an issue, please replace
    ${GITHUB_ISSUE_ID} below with the actual Github issue id. -->
    <!-- Closes #${GITHUB_ISSUE_ID} -->
    
    # Rationale for this change
    Closes #2810, #393
    Relates to #2743
    
    This PR upgrades `pytest` to `9.0.2`. In doing so, we also had to switch
    `pytest-lazy-fixture` to `pytest-lazy-fixtures` (notice the extra s)
    which is a maintained version
    https://github.com/dev-petrov/pytest-lazy-fixtures
    
    Changed all references of `pytest_lazyfixture` to the new
    `pytest_lazy_fixtures`
    
    ## Are these changes tested?
    
    ## Are there any user-facing changes?
    
    <!-- In the case of user-facing changes, please add the changelog label.
    -->
---
 pyproject.toml                                  |   4 +-
 tests/catalog/test_catalog_behaviors.py         |  10 +--
 tests/conftest.py                               |  22 +++--
 tests/integration/test_catalog.py               |  13 +--
 tests/integration/test_inspect_table.py         |   3 +-
 tests/integration/test_partition_evolution.py   |  85 +++++++++----------
 tests/integration/test_reads.py                 | 103 ++++++++++++------------
 tests/integration/test_rest_catalog.py          |   9 ++-
 tests/integration/test_snapshot_operations.py   |  15 ++--
 tests/integration/test_sort_order_update.py     |  41 +++++-----
 tests/integration/test_statistics_operations.py |   3 +-
 tests/integration/test_writes/test_writes.py    |   9 ++-
 tests/table/test_init.py                        |   5 +-
 uv.lock                                         |  21 ++---
 14 files changed, 176 insertions(+), 167 deletions(-)

diff --git a/pyproject.toml b/pyproject.toml
index a0e7f12e..adbbd4fe 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -100,10 +100,10 @@ entra-auth = ["azure-identity>=1.25.1"]
 
 [dependency-groups]
 dev = [
-    "pytest==7.4.4",
+    "pytest==9.0.2",
     "pytest-checkdocs==2.14.0",
     "prek>=0.2.1,<0.4",
-    "pytest-lazy-fixture==0.6.3",
+    "pytest-lazy-fixtures==1.4.0",
     "fastavro==1.12.1",
     "coverage[toml]>=7.4.2,<8",
     "requests-mock==1.12.1",
diff --git a/tests/catalog/test_catalog_behaviors.py 
b/tests/catalog/test_catalog_behaviors.py
index 21508a8f..01e0d2ce 100644
--- a/tests/catalog/test_catalog_behaviors.py
+++ b/tests/catalog/test_catalog_behaviors.py
@@ -26,7 +26,7 @@ from typing import Any
 import pyarrow as pa
 import pytest
 from pydantic_core import ValidationError
-from pytest_lazyfixture import lazy_fixture
+from pytest_lazy_fixtures import lf
 from sqlalchemy.exc import IntegrityError
 
 from pyiceberg.catalog import Catalog
@@ -323,10 +323,10 @@ def test_write_pyarrow_schema(catalog: Catalog, 
test_table_identifier: Identifie
 @pytest.mark.parametrize(
     "schema,expected",
     [
-        (lazy_fixture("pyarrow_schema_simple_without_ids"), 
lazy_fixture("iceberg_schema_simple_no_ids")),
-        (lazy_fixture("table_schema_simple"), 
lazy_fixture("table_schema_simple")),
-        (lazy_fixture("table_schema_nested"), 
lazy_fixture("table_schema_nested")),
-        (lazy_fixture("pyarrow_schema_nested_without_ids"), 
lazy_fixture("iceberg_schema_nested_no_ids")),
+        (lf("pyarrow_schema_simple_without_ids"), 
lf("iceberg_schema_simple_no_ids")),
+        (lf("table_schema_simple"), lf("table_schema_simple")),
+        (lf("table_schema_nested"), lf("table_schema_nested")),
+        (lf("pyarrow_schema_nested_without_ids"), 
lf("iceberg_schema_nested_no_ids")),
     ],
 )
 def test_convert_schema_if_needed(
diff --git a/tests/conftest.py b/tests/conftest.py
index 801c1e86..4de0a190 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -45,7 +45,7 @@ import boto3
 import pytest
 from moto import mock_aws
 from pydantic_core import to_json
-from pytest_lazyfixture import lazy_fixture
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog import Catalog, load_catalog
 from pyiceberg.catalog.memory import InMemoryCatalog
@@ -3080,11 +3080,10 @@ def fixed_test_table_namespace() -> Identifier:
 
 
 @pytest.fixture(
-    scope="session",
     params=[
-        lazy_fixture("fixed_test_table_identifier"),
-        lazy_fixture("random_table_identifier"),
-        lazy_fixture("random_hierarchical_identifier"),
+        lf("fixed_test_table_identifier"),
+        lf("random_table_identifier"),
+        lf("random_hierarchical_identifier"),
     ],
 )
 def test_table_identifier(request: pytest.FixtureRequest) -> Identifier:
@@ -3092,11 +3091,10 @@ def test_table_identifier(request: 
pytest.FixtureRequest) -> Identifier:
 
 
 @pytest.fixture(
-    scope="session",
     params=[
-        lazy_fixture("another_fixed_test_table_identifier"),
-        lazy_fixture("another_random_table_identifier"),
-        lazy_fixture("another_random_hierarchical_identifier"),
+        lf("another_fixed_test_table_identifier"),
+        lf("another_random_table_identifier"),
+        lf("another_random_hierarchical_identifier"),
     ],
 )
 def another_table_identifier(request: pytest.FixtureRequest) -> Identifier:
@@ -3105,9 +3103,9 @@ def another_table_identifier(request: 
pytest.FixtureRequest) -> Identifier:
 
 @pytest.fixture(
     params=[
-        lazy_fixture("database_name"),
-        lazy_fixture("hierarchical_namespace_name"),
-        lazy_fixture("fixed_test_table_namespace"),
+        lf("database_name"),
+        lf("hierarchical_namespace_name"),
+        lf("fixed_test_table_namespace"),
     ],
 )
 def test_namespace(request: pytest.FixtureRequest) -> Identifier:
diff --git a/tests/integration/test_catalog.py 
b/tests/integration/test_catalog.py
index c164bed8..130d5cd7 100644
--- a/tests/integration/test_catalog.py
+++ b/tests/integration/test_catalog.py
@@ -21,6 +21,7 @@ from collections.abc import Generator
 from pathlib import Path, PosixPath
 
 import pytest
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog import Catalog, MetastoreCatalog, load_catalog
 from pyiceberg.catalog.hive import HiveCatalog
@@ -109,12 +110,12 @@ def hive_catalog() -> Generator[Catalog, None, None]:
 
 
 CATALOGS = [
-    pytest.lazy_fixture("memory_catalog"),
-    pytest.lazy_fixture("sqlite_catalog_memory"),
-    pytest.lazy_fixture("sqlite_catalog_file"),
-    pytest.lazy_fixture("rest_catalog"),
-    pytest.lazy_fixture("hive_catalog"),
-    pytest.lazy_fixture("rest_test_catalog"),
+    lf("memory_catalog"),
+    lf("sqlite_catalog_memory"),
+    lf("sqlite_catalog_file"),
+    lf("rest_catalog"),
+    lf("hive_catalog"),
+    lf("rest_test_catalog"),
 ]
 
 
diff --git a/tests/integration/test_inspect_table.py 
b/tests/integration/test_inspect_table.py
index b40ba7e1..03d4437d 100644
--- a/tests/integration/test_inspect_table.py
+++ b/tests/integration/test_inspect_table.py
@@ -24,6 +24,7 @@ import pyarrow as pa
 import pytest
 import pytz
 from pyspark.sql import DataFrame, SparkSession
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog import Catalog
 from pyiceberg.exceptions import NoSuchTableError
@@ -672,7 +673,7 @@ def test_inspect_partitions_partitioned_with_filter(spark: 
SparkSession, session
 
 
 @pytest.mark.integration
[email protected]("catalog", [pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog")])
 def test_inspect_partitions_partitioned_transform_with_filter(spark: 
SparkSession, catalog: Catalog) -> None:
     for table_name, predicate, partition_predicate in [
         ("test_partitioned_by_identity", "ts >= '2023-03-05T00:00:00+00:00'", 
"ts >= '2023-03-05T00:00:00+00:00'"),
diff --git a/tests/integration/test_partition_evolution.py 
b/tests/integration/test_partition_evolution.py
index 2444e187..2afc5ceb 100644
--- a/tests/integration/test_partition_evolution.py
+++ b/tests/integration/test_partition_evolution.py
@@ -17,6 +17,7 @@
 # pylint:disable=redefined-outer-name
 
 import pytest
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog import Catalog
 from pyiceberg.exceptions import NoSuchTableError
@@ -78,7 +79,7 @@ def _create_table_with_schema(
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_identity_partition(catalog: Catalog, table_schema_simple: Schema) 
-> None:
     simple_table = _simple_table(catalog, table_schema_simple)
     simple_table.update_spec().add_identity("foo").commit()
@@ -90,7 +91,7 @@ def test_add_identity_partition(catalog: Catalog, 
table_schema_simple: Schema) -
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_year(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", YearTransform(), 
"year_transform").commit()
@@ -98,7 +99,7 @@ def test_add_year(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_year_generates_default_name(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", YearTransform()).commit()
@@ -106,7 +107,7 @@ def test_add_year_generates_default_name(catalog: Catalog) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_month(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", MonthTransform(), 
"month_transform").commit()
@@ -114,7 +115,7 @@ def test_add_month(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_month_generates_default_name(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", MonthTransform()).commit()
@@ -122,7 +123,7 @@ def test_add_month_generates_default_name(catalog: Catalog) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_day(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", DayTransform(), 
"day_transform").commit()
@@ -130,7 +131,7 @@ def test_add_day(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_day_generates_default_name(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", DayTransform()).commit()
@@ -138,7 +139,7 @@ def test_add_day_generates_default_name(catalog: Catalog) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_hour(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", HourTransform(), 
"hour_transform").commit()
@@ -146,7 +147,7 @@ def test_add_hour(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_hour_string_transform(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", "hour", 
"str_hour_transform").commit()
@@ -154,7 +155,7 @@ def test_add_hour_string_transform(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_hour_generates_default_name(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", HourTransform()).commit()
@@ -162,7 +163,7 @@ def test_add_hour_generates_default_name(catalog: Catalog) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_bucket(catalog: Catalog, table_schema_simple: Schema) -> None:
     simple_table = _create_table_with_schema(catalog, table_schema_simple, "1")
     simple_table.update_spec().add_field("foo", BucketTransform(12), 
"bucket_transform").commit()
@@ -170,7 +171,7 @@ def test_add_bucket(catalog: Catalog, table_schema_simple: 
Schema) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_bucket_generates_default_name(catalog: Catalog, 
table_schema_simple: Schema) -> None:
     simple_table = _create_table_with_schema(catalog, table_schema_simple, "1")
     simple_table.update_spec().add_field("foo", BucketTransform(12)).commit()
@@ -178,7 +179,7 @@ def test_add_bucket_generates_default_name(catalog: 
Catalog, table_schema_simple
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_truncate(catalog: Catalog, table_schema_simple: Schema) -> None:
     simple_table = _create_table_with_schema(catalog, table_schema_simple, "1")
     simple_table.update_spec().add_field("foo", TruncateTransform(1), 
"truncate_transform").commit()
@@ -188,7 +189,7 @@ def test_add_truncate(catalog: Catalog, 
table_schema_simple: Schema) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_truncate_generates_default_name(catalog: Catalog, 
table_schema_simple: Schema) -> None:
     simple_table = _create_table_with_schema(catalog, table_schema_simple, "1")
     simple_table.update_spec().add_field("foo", TruncateTransform(1)).commit()
@@ -196,7 +197,7 @@ def test_add_truncate_generates_default_name(catalog: 
Catalog, table_schema_simp
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_multiple_adds(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_identity("id").add_field("event_ts", 
HourTransform(), "hourly_partitioned").add_field(
@@ -214,7 +215,7 @@ def test_multiple_adds(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_void(catalog: Catalog, table_schema_simple: Schema) -> None:
     simple_table = _create_table_with_schema(catalog, table_schema_simple, "1")
     simple_table.update_spec().add_field("foo", VoidTransform(), 
"void_transform").commit()
@@ -222,7 +223,7 @@ def test_add_void(catalog: Catalog, table_schema_simple: 
Schema) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_void_generates_default_name(catalog: Catalog, 
table_schema_simple: Schema) -> None:
     simple_table = _create_table_with_schema(catalog, table_schema_simple, "1")
     simple_table.update_spec().add_field("foo", VoidTransform()).commit()
@@ -230,7 +231,7 @@ def test_add_void_generates_default_name(catalog: Catalog, 
table_schema_simple:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_hour_to_day(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("event_ts", DayTransform(), 
"daily_partitioned").commit()
@@ -246,7 +247,7 @@ def test_add_hour_to_day(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_add_multiple_buckets(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_field("id", BucketTransform(16)).add_field("id", 
BucketTransform(4)).commit()
@@ -261,7 +262,7 @@ def test_add_multiple_buckets(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_identity(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_identity("id").commit()
@@ -274,7 +275,7 @@ def test_remove_identity(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_identity_v2(catalog: Catalog) -> None:
     table_v2 = _table_v2(catalog)
     table_v2.update_spec().add_identity("id").commit()
@@ -285,7 +286,7 @@ def test_remove_identity_v2(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_and_add_identity(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_identity("id").commit()
@@ -302,7 +303,7 @@ def test_remove_and_add_identity(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_and_add_identity_v2(catalog: Catalog) -> None:
     table_v2 = _table_v2(catalog)
     table_v2.update_spec().add_identity("id").commit()
@@ -317,7 +318,7 @@ def test_remove_and_add_identity_v2(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_bucket(catalog: Catalog) -> None:
     table = _table(catalog)
     with table.update_spec() as update:
@@ -338,7 +339,7 @@ def test_remove_bucket(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_bucket_v2(catalog: Catalog) -> None:
     table_v2 = _table_v2(catalog)
     with table_v2.update_spec() as update:
@@ -353,7 +354,7 @@ def test_remove_bucket_v2(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_day(catalog: Catalog) -> None:
     table = _table(catalog)
     with table.update_spec() as update:
@@ -374,7 +375,7 @@ def test_remove_day(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_day_v2(catalog: Catalog) -> None:
     table_v2 = _table_v2(catalog)
     with table_v2.update_spec() as update:
@@ -389,7 +390,7 @@ def test_remove_day_v2(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_rename(catalog: Catalog) -> None:
     table = _table(catalog)
     table.update_spec().add_identity("id").commit()
@@ -400,7 +401,7 @@ def test_rename(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_cannot_add_and_remove(catalog: Catalog) -> None:
     table = _table(catalog)
     with pytest.raises(ValueError) as exc_info:
@@ -409,7 +410,7 @@ def test_cannot_add_and_remove(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_cannot_add_redundant_time_partition(catalog: Catalog) -> None:
     table = _table(catalog)
     with pytest.raises(ValueError) as exc_info:
@@ -420,7 +421,7 @@ def test_cannot_add_redundant_time_partition(catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_cannot_delete_and_rename(catalog: Catalog) -> None:
     table = _table(catalog)
     with pytest.raises(ValueError) as exc_info:
@@ -430,7 +431,7 @@ def test_cannot_delete_and_rename(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_cannot_rename_and_delete(catalog: Catalog) -> None:
     table = _table(catalog)
     with pytest.raises(ValueError) as exc_info:
@@ -440,7 +441,7 @@ def test_cannot_rename_and_delete(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_cannot_add_same_tranform_for_same_field(catalog: Catalog) -> None:
     table = _table(catalog)
     with pytest.raises(ValueError) as exc_info:
@@ -451,7 +452,7 @@ def test_cannot_add_same_tranform_for_same_field(catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_cannot_add_same_field_multiple_times(catalog: Catalog) -> None:
     table = _table(catalog)
     with pytest.raises(ValueError) as exc_info:
@@ -462,7 +463,7 @@ def test_cannot_add_same_field_multiple_times(catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_cannot_add_multiple_specs_same_name(catalog: Catalog) -> None:
     table = _table(catalog)
     with pytest.raises(ValueError) as exc_info:
@@ -473,7 +474,7 @@ def test_cannot_add_multiple_specs_same_name(catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_change_specs_and_schema_transaction(catalog: Catalog) -> None:
     table = _table(catalog)
     with table.transaction() as transaction:
@@ -506,7 +507,7 @@ def test_change_specs_and_schema_transaction(catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_multiple_adds_and_remove_v1(catalog: Catalog) -> None:
     table = _table(catalog)
     with table.update_spec() as update:
@@ -528,7 +529,7 @@ def test_multiple_adds_and_remove_v1(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_multiple_adds_and_remove_v2(catalog: Catalog) -> None:
     table_v2 = _table_v2(catalog)
     with table_v2.update_spec() as update:
@@ -542,7 +543,7 @@ def test_multiple_adds_and_remove_v2(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_multiple_remove_and_add_reuses_v2(catalog: Catalog) -> None:
     table_v2 = _table_v2(catalog)
     with table_v2.update_spec() as update:
@@ -572,7 +573,7 @@ def _validate_new_partition_fields(
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_partition_schema_field_name_conflict(catalog: Catalog) -> None:
     schema = Schema(
         NestedField(1, "id", LongType(), required=False),
@@ -597,7 +598,7 @@ def test_partition_schema_field_name_conflict(catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_partition_validation_during_table_creation(catalog: Catalog) -> None:
     schema = Schema(
         NestedField(1, "id", LongType(), required=False),
@@ -619,7 +620,7 @@ def 
test_partition_validation_during_table_creation(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_schema_evolution_partition_conflict(catalog: Catalog) -> None:
     schema = Schema(
         NestedField(1, "id", LongType(), required=False),
diff --git a/tests/integration/test_reads.py b/tests/integration/test_reads.py
index fb63bee4..6c8b4a20 100644
--- a/tests/integration/test_reads.py
+++ b/tests/integration/test_reads.py
@@ -31,6 +31,7 @@ from hive_metastore.ttypes import LockRequest, LockResponse, 
LockState, UnlockRe
 from pyarrow.fs import S3FileSystem
 from pydantic_core import ValidationError
 from pyspark.sql import SparkSession
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog import Catalog
 from pyiceberg.catalog.hive import HiveCatalog, _HiveClient
@@ -84,7 +85,7 @@ def create_table(catalog: Catalog) -> Table:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_table_properties(catalog: Catalog) -> None:
     table = create_table(catalog)
 
@@ -114,7 +115,7 @@ def test_table_properties(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive")])
[email protected]("catalog", [lf("session_catalog_hive")])
 def test_hive_properties(catalog: Catalog) -> None:
     table = create_table(catalog)
     table.transaction().set_properties({"abc": "def", "p1": 
"123"}).commit_transaction()
@@ -135,7 +136,7 @@ def test_hive_properties(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive")])
[email protected]("catalog", [lf("session_catalog_hive")])
 def test_hive_preserves_hms_specific_properties(catalog: Catalog) -> None:
     """Test that HMS-specific table properties are preserved during table 
commits.
 
@@ -212,7 +213,7 @@ def 
test_iceberg_property_deletion_not_restored_from_old_hms_state(session_catal
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive")])
[email protected]("catalog", [lf("session_catalog_hive")])
 def test_iceberg_metadata_is_source_of_truth(catalog: Catalog) -> None:
     """Test that Iceberg metadata is the source of truth for all 
Iceberg-managed properties.
 
@@ -249,7 +250,7 @@ def test_iceberg_metadata_is_source_of_truth(catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive")])
[email protected]("catalog", [lf("session_catalog_hive")])
 def test_hive_critical_properties_always_from_iceberg(catalog: Catalog) -> 
None:
     """Test that critical properties (EXTERNAL, table_type, metadata_location) 
always come from Iceberg.
 
@@ -286,7 +287,7 @@ def 
test_hive_critical_properties_always_from_iceberg(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive")])
[email protected]("catalog", [lf("session_catalog_hive")])
 def test_hive_native_properties_cannot_be_deleted_via_iceberg(catalog: 
Catalog) -> None:
     """Test that HMS-native properties (set outside Iceberg) cannot be deleted 
via Iceberg.
 
@@ -346,7 +347,7 @@ def 
test_hive_native_properties_cannot_be_deleted_via_iceberg(catalog: Catalog)
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_table_properties_dict(catalog: Catalog) -> None:
     table = create_table(catalog)
 
@@ -376,7 +377,7 @@ def test_table_properties_dict(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_table_properties_error(catalog: Catalog) -> None:
     table = create_table(catalog)
     properties = {"abc": "def"}
@@ -386,7 +387,7 @@ def test_table_properties_error(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_pyarrow_nan(catalog: Catalog) -> None:
     table_test_null_nan = catalog.load_table("default.test_null_nan")
     arrow_table = table_test_null_nan.scan(row_filter=IsNaN("col_numeric"), 
selected_fields=("idx", "col_numeric")).to_arrow()
@@ -396,7 +397,7 @@ def test_pyarrow_nan(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_pyarrow_nan_rewritten(catalog: Catalog) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     arrow_table = table_test_null_nan_rewritten.scan(
@@ -408,7 +409,7 @@ def test_pyarrow_nan_rewritten(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.skip(reason="Fixing issues with NaN's: 
https://github.com/apache/arrow/issues/34162";)
 def test_pyarrow_not_nan_count(catalog: Catalog) -> None:
     table_test_null_nan = catalog.load_table("default.test_null_nan")
@@ -417,7 +418,7 @@ def test_pyarrow_not_nan_count(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_pyarrow_batches_nan(catalog: Catalog) -> None:
     table_test_null_nan = catalog.load_table("default.test_null_nan")
     arrow_batch_reader = table_test_null_nan.scan(
@@ -431,7 +432,7 @@ def test_pyarrow_batches_nan(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_pyarrow_batches_nan_rewritten(catalog: Catalog) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     arrow_batch_reader = table_test_null_nan_rewritten.scan(
@@ -445,7 +446,7 @@ def test_pyarrow_batches_nan_rewritten(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.skip(reason="Fixing issues with NaN's: 
https://github.com/apache/arrow/issues/34162";)
 def test_pyarrow_batches_not_nan_count(catalog: Catalog) -> None:
     table_test_null_nan = catalog.load_table("default.test_null_nan")
@@ -458,7 +459,7 @@ def test_pyarrow_batches_not_nan_count(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_duckdb_nan(catalog: Catalog) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     con = table_test_null_nan_rewritten.scan().to_duckdb("table_test_null_nan")
@@ -468,7 +469,7 @@ def test_duckdb_nan(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_pyarrow_limit(catalog: Catalog) -> None:
     table_test_limit = catalog.load_table("default.test_limit")
     limited_result = table_test_limit.scan(selected_fields=("idx",), 
limit=1).to_arrow()
@@ -492,7 +493,7 @@ def test_pyarrow_limit(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_pyarrow_limit_with_multiple_files(catalog: Catalog) -> None:
     table_name = "default.test_pyarrow_limit_with_multiple_files"
     try:
@@ -530,7 +531,7 @@ def test_pyarrow_limit_with_multiple_files(catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_daft_nan(catalog: Catalog) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     df = table_test_null_nan_rewritten.to_daft()
@@ -539,7 +540,7 @@ def test_daft_nan(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_daft_nan_rewritten(catalog: Catalog) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     df = table_test_null_nan_rewritten.to_daft()
@@ -553,7 +554,7 @@ def test_daft_nan_rewritten(catalog: Catalog) -> None:
 @pytest.mark.skip(reason="Bodo should not monekeypatch PyArrowFileIO, 
https://github.com/apache/iceberg-python/issues/2400";)
 @pytest.mark.integration
 @pytest.mark.filterwarnings("ignore")
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_bodo_nan(catalog: Catalog, monkeypatch: pytest.MonkeyPatch) -> None:
     # Avoid local Mac issues (see 
https://github.com/apache/iceberg-python/issues/2225)
     monkeypatch.setenv("BODO_DATAFRAME_LIBRARY_RUN_PARALLEL", "0")
@@ -567,7 +568,7 @@ def test_bodo_nan(catalog: Catalog, monkeypatch: 
pytest.MonkeyPatch) -> None:
 
 @pytest.mark.integration
 @pytest.mark.filterwarnings("ignore")
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_ray_nan(catalog: Catalog, ray_session: Any) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     ray_dataset = table_test_null_nan_rewritten.scan().to_ray()
@@ -577,7 +578,7 @@ def test_ray_nan(catalog: Catalog, ray_session: Any) -> 
None:
 
 @pytest.mark.integration
 @pytest.mark.filterwarnings("ignore")
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_ray_nan_rewritten(catalog: Catalog, ray_session: Any) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     ray_dataset = table_test_null_nan_rewritten.scan(
@@ -590,7 +591,7 @@ def test_ray_nan_rewritten(catalog: Catalog, ray_session: 
Any) -> None:
 
 @pytest.mark.integration
 @pytest.mark.filterwarnings("ignore")
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.skip(reason="Fixing issues with NaN's: 
https://github.com/apache/arrow/issues/34162";)
 def test_ray_not_nan_count(catalog: Catalog, ray_session: Any) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
@@ -600,7 +601,7 @@ def test_ray_not_nan_count(catalog: Catalog, ray_session: 
Any) -> None:
 
 @pytest.mark.integration
 @pytest.mark.filterwarnings("ignore")
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_ray_all_types(catalog: Catalog, ray_session: Any) -> None:
     table_test_all_types = catalog.load_table("default.test_all_types")
     ray_dataset = table_test_all_types.scan().to_ray()
@@ -610,7 +611,7 @@ def test_ray_all_types(catalog: Catalog, ray_session: Any) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_pyarrow_to_iceberg_all_types(catalog: Catalog) -> None:
     table_test_all_types = catalog.load_table("default.test_all_types")
     fs = S3FileSystem(
@@ -629,7 +630,7 @@ def test_pyarrow_to_iceberg_all_types(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.parametrize("format_version", [2, 3])
 def test_pyarrow_deletes(catalog: Catalog, format_version: int) -> None:
     # number, letter
@@ -669,7 +670,7 @@ def test_pyarrow_deletes(catalog: Catalog, format_version: 
int) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.parametrize("format_version", [2, 3])
 def test_pyarrow_deletes_double(catalog: Catalog, format_version: int) -> None:
     # number, letter
@@ -709,7 +710,7 @@ def test_pyarrow_deletes_double(catalog: Catalog, 
format_version: int) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.parametrize("format_version", [2, 3])
 def test_pyarrow_batches_deletes(catalog: Catalog, format_version: int) -> 
None:
     # number, letter
@@ -753,7 +754,7 @@ def test_pyarrow_batches_deletes(catalog: Catalog, 
format_version: int) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.parametrize("format_version", [2, 3])
 def test_pyarrow_batches_deletes_double(catalog: Catalog, format_version: int) 
-> None:
     # number, letter
@@ -799,7 +800,7 @@ def test_pyarrow_batches_deletes_double(catalog: Catalog, 
format_version: int) -
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_partitioned_tables(catalog: Catalog) -> None:
     for table_name, predicate in [
         ("test_partitioned_by_identity", "ts >= '2023-03-05T00:00:00+00:00'"),
@@ -816,7 +817,7 @@ def test_partitioned_tables(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_unpartitioned_uuid_table(catalog: Catalog) -> None:
     unpartitioned_uuid = 
catalog.load_table("default.test_uuid_and_fixed_unpartitioned")
     arrow_table_eq = unpartitioned_uuid.scan(row_filter="uuid_col == 
'102cb62f-e6f8-4eb0-9973-d9b012ff0967'").to_arrow()
@@ -833,7 +834,7 @@ def test_unpartitioned_uuid_table(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_unpartitioned_fixed_table(catalog: Catalog) -> None:
     fixed_table = 
catalog.load_table("default.test_uuid_and_fixed_unpartitioned")
     arrow_table_eq = fixed_table.scan(row_filter=EqualTo("fixed_col", 
b"1234567890123456789012345")).to_arrow()
@@ -852,7 +853,7 @@ def test_unpartitioned_fixed_table(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.parametrize("format_version", [2, 3])
 def test_scan_tag(catalog: Catalog, format_version: int) -> None:
     test_positional_mor_deletes = 
catalog.load_table(f"default.test_positional_mor_deletes_v{format_version}")
@@ -861,7 +862,7 @@ def test_scan_tag(catalog: Catalog, format_version: int) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 @pytest.mark.parametrize("format_version", [2, 3])
 def test_scan_branch(catalog: Catalog, format_version: int) -> None:
     test_positional_mor_deletes = 
catalog.load_table(f"default.test_positional_mor_deletes_v{format_version}")
@@ -870,7 +871,7 @@ def test_scan_branch(catalog: Catalog, format_version: int) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_filter_on_new_column(catalog: Catalog) -> None:
     test_table_add_column = catalog.load_table("default.test_table_add_column")
     arrow_table = test_table_add_column.scan(row_filter="b == '2'").to_arrow()
@@ -884,7 +885,7 @@ def test_filter_on_new_column(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_filter_case_sensitive_by_default(catalog: Catalog) -> None:
     test_table_add_column = catalog.load_table("default.test_table_add_column")
     arrow_table = test_table_add_column.scan().to_arrow()
@@ -899,7 +900,7 @@ def test_filter_case_sensitive_by_default(catalog: Catalog) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_filter_case_sensitive(catalog: Catalog) -> None:
     test_table_add_column = catalog.load_table("default.test_table_add_column")
     arrow_table = test_table_add_column.scan().to_arrow()
@@ -914,7 +915,7 @@ def test_filter_case_sensitive(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_filter_case_insensitive(catalog: Catalog) -> None:
     test_table_add_column = catalog.load_table("default.test_table_add_column")
     arrow_table = test_table_add_column.scan().to_arrow()
@@ -928,7 +929,7 @@ def test_filter_case_insensitive(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_filters_on_top_level_struct(catalog: Catalog) -> None:
     test_empty_struct = 
catalog.load_table("default.test_table_empty_list_and_map")
 
@@ -946,7 +947,7 @@ def test_filters_on_top_level_struct(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_upgrade_table_version(catalog: Catalog) -> None:
     table_test_table_version = catalog.load_table("default.test_table_version")
 
@@ -974,7 +975,7 @@ def test_upgrade_table_version(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_sanitize_character(catalog: Catalog) -> None:
     table_test_table_sanitized_character = 
catalog.load_table("default.test_table_sanitized_character")
     arrow_table = table_test_table_sanitized_character.scan().to_arrow()
@@ -984,7 +985,7 @@ def test_sanitize_character(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_null_list_and_map(catalog: Catalog) -> None:
     table_test_empty_list_and_map = 
catalog.load_table("default.test_table_empty_list_and_map")
     arrow_table = table_test_empty_list_and_map.scan().to_arrow()
@@ -1083,7 +1084,7 @@ def test_configure_row_group_batch_size(session_catalog: 
Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_table_scan_keep_types(catalog: Catalog) -> None:
     expected_schema = pa.schema(
         [
@@ -1125,7 +1126,7 @@ def test_table_scan_keep_types(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_empty_scan_ordered_str(catalog: Catalog) -> None:
     table_empty_scan_ordered_str = 
catalog.load_table("default.test_empty_scan_ordered_str")
     arrow_table = table_empty_scan_ordered_str.scan(EqualTo("id", 
"b")).to_arrow()
@@ -1133,7 +1134,7 @@ def test_empty_scan_ordered_str(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_table_scan_empty_table(catalog: Catalog) -> None:
     identifier = "default.test_table_scan_empty_table"
     arrow_table = pa.Table.from_arrays(
@@ -1161,7 +1162,7 @@ def test_table_scan_empty_table(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_read_from_s3_and_local_fs(catalog: Catalog, tmp_path: PosixPath) -> 
None:
     identifier = "default.test_read_from_s3_and_local_fs"
     schema = pa.schema([pa.field("colA", pa.string())])
@@ -1189,7 +1190,7 @@ def test_read_from_s3_and_local_fs(catalog: Catalog, 
tmp_path: PosixPath) -> Non
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_scan_with_datetime(catalog: Catalog) -> None:
     table = create_table(catalog)
 
@@ -1217,8 +1218,8 @@ def test_scan_with_datetime(catalog: Catalog) -> None:
 
 @pytest.mark.integration
 # TODO: For Hive we require writing V3
-# @pytest.mark.parametrize("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [pytest.lazy_fixture("session_catalog")])
+# @pytest.mark.parametrize("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
[email protected]("catalog", [lf("session_catalog")])
 def test_initial_default(catalog: Catalog, spark: SparkSession) -> None:
     identifier = "default.test_initial_default"
     try:
@@ -1244,7 +1245,7 @@ def test_initial_default(catalog: Catalog, spark: 
SparkSession) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_filter_after_arrow_scan(catalog: Catalog) -> None:
     identifier = "test_partitioned_by_hours"
     table = catalog.load_table(f"default.{identifier}")
@@ -1257,7 +1258,7 @@ def test_filter_after_arrow_scan(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", [pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog")])
 def test_scan_source_field_missing_in_spec(catalog: Catalog, spark: 
SparkSession) -> None:
     identifier = "default.test_dropped_field"
     spark.sql(f"DROP TABLE IF EXISTS {identifier}")
diff --git a/tests/integration/test_rest_catalog.py 
b/tests/integration/test_rest_catalog.py
index 24a8d9f6..18aa9431 100644
--- a/tests/integration/test_rest_catalog.py
+++ b/tests/integration/test_rest_catalog.py
@@ -17,6 +17,7 @@
 # pylint:disable=redefined-outer-name
 
 import pytest
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog.rest import RestCatalog
 
@@ -24,7 +25,7 @@ TEST_NAMESPACE_IDENTIFIER = "TEST NS"
 
 
 @pytest.mark.integration
[email protected]("catalog", [pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog")])
 def test_namespace_exists(catalog: RestCatalog) -> None:
     if not catalog.namespace_exists(TEST_NAMESPACE_IDENTIFIER):
         catalog.create_namespace(TEST_NAMESPACE_IDENTIFIER)
@@ -33,7 +34,7 @@ def test_namespace_exists(catalog: RestCatalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", [pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog")])
 def test_namespace_not_exists(catalog: RestCatalog) -> None:
     if catalog.namespace_exists(TEST_NAMESPACE_IDENTIFIER):
         catalog.drop_namespace(TEST_NAMESPACE_IDENTIFIER)
@@ -42,7 +43,7 @@ def test_namespace_not_exists(catalog: RestCatalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", [pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog")])
 def test_create_namespace_if_not_exists(catalog: RestCatalog) -> None:
     if catalog.namespace_exists(TEST_NAMESPACE_IDENTIFIER):
         catalog.drop_namespace(TEST_NAMESPACE_IDENTIFIER)
@@ -53,7 +54,7 @@ def test_create_namespace_if_not_exists(catalog: RestCatalog) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", [pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog")])
 def test_create_namespace_if_already_existing(catalog: RestCatalog) -> None:
     if not catalog.namespace_exists(TEST_NAMESPACE_IDENTIFIER):
         catalog.create_namespace(TEST_NAMESPACE_IDENTIFIER)
diff --git a/tests/integration/test_snapshot_operations.py 
b/tests/integration/test_snapshot_operations.py
index 6fd3aada..07fb77ed 100644
--- a/tests/integration/test_snapshot_operations.py
+++ b/tests/integration/test_snapshot_operations.py
@@ -19,6 +19,7 @@ from collections.abc import Generator
 
 import pyarrow as pa
 import pytest
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog import Catalog
 from pyiceberg.table import Table
@@ -53,7 +54,7 @@ def table_with_snapshots(session_catalog: Catalog) -> 
Generator[Table, None, Non
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_create_tag(catalog: Catalog) -> None:
     identifier = "default.test_table_snapshot_operations"
     tbl = catalog.load_table(identifier)
@@ -64,7 +65,7 @@ def test_create_tag(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_create_branch(catalog: Catalog) -> None:
     identifier = "default.test_table_snapshot_operations"
     tbl = catalog.load_table(identifier)
@@ -75,7 +76,7 @@ def test_create_branch(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_tag(catalog: Catalog) -> None:
     identifier = "default.test_table_snapshot_operations"
     tbl = catalog.load_table(identifier)
@@ -91,7 +92,7 @@ def test_remove_tag(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_remove_branch(catalog: Catalog) -> None:
     identifier = "default.test_table_snapshot_operations"
     tbl = catalog.load_table(identifier)
@@ -107,7 +108,7 @@ def test_remove_branch(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_set_current_snapshot(catalog: Catalog) -> None:
     identifier = "default.test_table_snapshot_operations"
     tbl = catalog.load_table(identifier)
@@ -132,7 +133,7 @@ def test_set_current_snapshot(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_set_current_snapshot_by_ref(catalog: Catalog) -> None:
     identifier = "default.test_table_snapshot_operations"
     tbl = catalog.load_table(identifier)
@@ -163,7 +164,7 @@ def test_set_current_snapshot_by_ref(catalog: Catalog) -> 
None:
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_set_current_snapshot_chained_with_create_tag(catalog: Catalog) -> 
None:
     identifier = "default.test_table_snapshot_operations"
     tbl = catalog.load_table(identifier)
diff --git a/tests/integration/test_sort_order_update.py 
b/tests/integration/test_sort_order_update.py
index 548c6692..fdbfa9a3 100644
--- a/tests/integration/test_sort_order_update.py
+++ b/tests/integration/test_sort_order_update.py
@@ -17,6 +17,7 @@
 # pylint:disable=redefined-outer-name
 
 import pytest
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog import Catalog
 from pyiceberg.exceptions import NoSuchTableError
@@ -45,10 +46,10 @@ def _create_table_with_schema(catalog: Catalog, schema: 
Schema, format_version:
 @pytest.mark.parametrize(
     "catalog, format_version",
     [
-        (pytest.lazy_fixture("session_catalog"), "1"),
-        (pytest.lazy_fixture("session_catalog_hive"), "1"),
-        (pytest.lazy_fixture("session_catalog"), "2"),
-        (pytest.lazy_fixture("session_catalog_hive"), "2"),
+        (lf("session_catalog"), "1"),
+        (lf("session_catalog_hive"), "1"),
+        (lf("session_catalog"), "2"),
+        (lf("session_catalog_hive"), "2"),
     ],
 )
 def test_map_column_name_to_id(catalog: Catalog, format_version: str, 
table_schema_simple: Schema) -> None:
@@ -61,10 +62,10 @@ def test_map_column_name_to_id(catalog: Catalog, 
format_version: str, table_sche
 @pytest.mark.parametrize(
     "catalog, format_version",
     [
-        (pytest.lazy_fixture("session_catalog"), "1"),
-        (pytest.lazy_fixture("session_catalog_hive"), "1"),
-        (pytest.lazy_fixture("session_catalog"), "2"),
-        (pytest.lazy_fixture("session_catalog_hive"), "2"),
+        (lf("session_catalog"), "1"),
+        (lf("session_catalog_hive"), "1"),
+        (lf("session_catalog"), "2"),
+        (lf("session_catalog_hive"), "2"),
     ],
 )
 def test_update_sort_order(catalog: Catalog, format_version: str, 
table_schema_simple: Schema) -> None:
@@ -83,10 +84,10 @@ def test_update_sort_order(catalog: Catalog, 
format_version: str, table_schema_s
 @pytest.mark.parametrize(
     "catalog, format_version",
     [
-        (pytest.lazy_fixture("session_catalog"), "1"),
-        (pytest.lazy_fixture("session_catalog_hive"), "1"),
-        (pytest.lazy_fixture("session_catalog"), "2"),
-        (pytest.lazy_fixture("session_catalog_hive"), "2"),
+        (lf("session_catalog"), "1"),
+        (lf("session_catalog_hive"), "1"),
+        (lf("session_catalog"), "2"),
+        (lf("session_catalog_hive"), "2"),
     ],
 )
 def test_increment_existing_sort_order_id(catalog: Catalog, format_version: 
str, table_schema_simple: Schema) -> None:
@@ -113,10 +114,10 @@ def test_increment_existing_sort_order_id(catalog: 
Catalog, format_version: str,
 @pytest.mark.parametrize(
     "catalog, format_version",
     [
-        (pytest.lazy_fixture("session_catalog"), "1"),
-        (pytest.lazy_fixture("session_catalog_hive"), "1"),
-        (pytest.lazy_fixture("session_catalog"), "2"),
-        (pytest.lazy_fixture("session_catalog_hive"), "2"),
+        (lf("session_catalog"), "1"),
+        (lf("session_catalog_hive"), "1"),
+        (lf("session_catalog"), "2"),
+        (lf("session_catalog_hive"), "2"),
     ],
 )
 def test_update_existing_sort_order(catalog: Catalog, format_version: str, 
table_schema_simple: Schema) -> None:
@@ -144,10 +145,10 @@ def test_update_existing_sort_order(catalog: Catalog, 
format_version: str, table
 @pytest.mark.parametrize(
     "catalog, format_version",
     [
-        (pytest.lazy_fixture("session_catalog"), "1"),
-        (pytest.lazy_fixture("session_catalog_hive"), "1"),
-        (pytest.lazy_fixture("session_catalog"), "2"),
-        (pytest.lazy_fixture("session_catalog_hive"), "2"),
+        (lf("session_catalog"), "1"),
+        (lf("session_catalog_hive"), "1"),
+        (lf("session_catalog"), "2"),
+        (lf("session_catalog_hive"), "2"),
     ],
 )
 def test_update_existing_sort_order_with_unsorted_sort_order(
diff --git a/tests/integration/test_statistics_operations.py 
b/tests/integration/test_statistics_operations.py
index 09273768..35e36bcd 100644
--- a/tests/integration/test_statistics_operations.py
+++ b/tests/integration/test_statistics_operations.py
@@ -17,6 +17,7 @@
 from typing import TYPE_CHECKING
 
 import pytest
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.exceptions import NoSuchTableError
 from pyiceberg.table.statistics import BlobMetadata, StatisticsFile
@@ -40,7 +41,7 @@ def _create_table_with_schema(catalog: "Catalog", schema: 
"Schema") -> "Table":
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_manage_statistics(catalog: "Catalog", arrow_table_with_null: 
"pa.Table") -> None:
     tbl = _create_table_with_schema(catalog, arrow_table_with_null.schema)
 
diff --git a/tests/integration/test_writes/test_writes.py 
b/tests/integration/test_writes/test_writes.py
index a8b7e328..e17c8ef6 100644
--- a/tests/integration/test_writes/test_writes.py
+++ b/tests/integration/test_writes/test_writes.py
@@ -38,6 +38,7 @@ import pytz
 from pyarrow.fs import S3FileSystem
 from pydantic_core import ValidationError
 from pyspark.sql import SparkSession
+from pytest_lazy_fixtures import lf
 from pytest_mock.plugin import MockerFixture
 
 from pyiceberg.catalog import Catalog, load_catalog
@@ -966,7 +967,7 @@ def test_write_and_evolve(session_catalog: Catalog, 
format_version: int) -> None
 
 @pytest.mark.integration
 @pytest.mark.parametrize("format_version", [1, 2])
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_create_table_transaction(catalog: Catalog, format_version: int) -> 
None:
     identifier = 
f"default.arrow_create_table_transaction_{catalog.name}_{format_version}"
 
@@ -1018,7 +1019,7 @@ def test_create_table_transaction(catalog: Catalog, 
format_version: int) -> None
 
 @pytest.mark.integration
 @pytest.mark.parametrize("format_version", [1, 2])
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_create_table_with_non_default_values(catalog: Catalog, 
table_schema_with_all_types: Schema, format_version: int) -> None:
     identifier = 
f"default.arrow_create_table_transaction_with_non_default_values_{catalog.name}_{format_version}"
     identifier_ref = 
f"default.arrow_create_table_transaction_with_non_default_values_ref_{catalog.name}_{format_version}"
@@ -1256,7 +1257,7 @@ def test_hive_catalog_storage_descriptor_has_changed(
 
 
 @pytest.mark.integration
[email protected]("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog_hive"), 
lf("session_catalog")])
 def test_sanitize_character_partitioned(catalog: Catalog) -> None:
     table_name = "default.test_table_partitioned_sanitized_character"
     try:
@@ -1278,7 +1279,7 @@ def test_sanitize_character_partitioned(catalog: Catalog) 
-> None:
 
 
 @pytest.mark.integration
[email protected]("catalog", [pytest.lazy_fixture("session_catalog")])
[email protected]("catalog", [lf("session_catalog")])
 def test_sanitize_character_partitioned_avro_bug(catalog: Catalog) -> None:
     table_name = "default.test_table_partitioned_sanitized_character_avro"
     try:
diff --git a/tests/table/test_init.py b/tests/table/test_init.py
index d677d42b..aef6e3cc 100644
--- a/tests/table/test_init.py
+++ b/tests/table/test_init.py
@@ -22,6 +22,7 @@ from typing import Any
 
 import pytest
 from pydantic import BaseModel, ValidationError
+from pytest_lazy_fixtures import lf
 
 from pyiceberg.catalog.noop import NoopCatalog
 from pyiceberg.exceptions import CommitFailedException
@@ -262,8 +263,8 @@ def test_history(table_v2: Table) -> None:
 @pytest.mark.parametrize(
     "table_fixture",
     [
-        pytest.param(pytest.lazy_fixture("table_v2"), id="parquet"),
-        pytest.param(pytest.lazy_fixture("table_v2_orc"), id="orc"),
+        pytest.param(lf("table_v2"), id="parquet"),
+        pytest.param(lf("table_v2_orc"), id="orc"),
     ],
 )
 def test_table_scan_select(table_fixture: Table) -> None:
diff --git a/uv.lock b/uv.lock
index bec534da..f686b2ee 100644
--- a/uv.lock
+++ b/uv.lock
@@ -4473,7 +4473,7 @@ dev = [
     { name = "pyspark", extra = ["connect"] },
     { name = "pytest" },
     { name = "pytest-checkdocs" },
-    { name = "pytest-lazy-fixture" },
+    { name = "pytest-lazy-fixtures" },
     { name = "pytest-mock" },
     { name = "requests-mock" },
     { name = "sqlalchemy" },
@@ -4559,9 +4559,9 @@ dev = [
     { name = "protobuf", specifier = "==6.33.5" },
     { name = "pyarrow-stubs", specifier = ">=20.0.0.20251107" },
     { name = "pyspark", extras = ["connect"], specifier = "==4.0.1" },
-    { name = "pytest", specifier = "==7.4.4" },
+    { name = "pytest", specifier = "==9.0.2" },
     { name = "pytest-checkdocs", specifier = "==2.14.0" },
-    { name = "pytest-lazy-fixture", specifier = "==0.6.3" },
+    { name = "pytest-lazy-fixtures", specifier = "==1.4.0" },
     { name = "pytest-mock", specifier = "==3.15.1" },
     { name = "requests-mock", specifier = "==1.12.1" },
     { name = "sqlalchemy", specifier = ">=2.0.18,<3" },
@@ -4727,7 +4727,7 @@ connect = [
 
 [[package]]
 name = "pytest"
-version = "7.4.4"
+version = "9.0.2"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "colorama", marker = "sys_platform == 'win32'" },
@@ -4735,11 +4735,12 @@ dependencies = [
     { name = "iniconfig" },
     { name = "packaging" },
     { name = "pluggy" },
+    { name = "pygments" },
     { name = "tomli", marker = "python_full_version < '3.11'" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz";,
 hash = 
"sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size 
= 1357116, upload-time = "2023-12-31T12:00:18.035Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz";,
 hash = 
"sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size 
= 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl";,
 hash = 
"sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", size 
= 325287, upload-time = "2023-12-31T12:00:13.963Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl";,
 hash = 
"sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size 
= 374801, upload-time = "2025-12-06T21:30:49.154Z" },
 ]
 
 [[package]]
@@ -4756,15 +4757,15 @@ wheels = [
 ]
 
 [[package]]
-name = "pytest-lazy-fixture"
-version = "0.6.3"
+name = "pytest-lazy-fixtures"
+version = "1.4.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "pytest" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/b2/82/ae6d2f6903719c4ec410dcd31ee24e3bce74b2cef3c5b9150ad36e8594b6/pytest-lazy-fixture-0.6.3.tar.gz";,
 hash = 
"sha256:0e7d0c7f74ba33e6e80905e9bfd81f9d15ef9a790de97993e34213deb5ad10ac", size 
= 7878, upload-time = "2020-02-01T18:04:02.321Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/75/05/030c4efe596bc31bcb4fefb31f5fcefc8917df99bd745a920763c5e81863/pytest_lazy_fixtures-1.4.0.tar.gz";,
 hash = 
"sha256:f544b60c96b909b307558a62cc1f28f026f11e9f03d7f583a1dc636de3dbcb10", size 
= 36188, upload-time = "2025-09-16T18:42:31.797Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/2d/a1/2f2c1c2353350d66c4d110d283e422e4943eb5ad10effa9357ba66f7b5b9/pytest_lazy_fixture-0.6.3-py3-none-any.whl";,
 hash = 
"sha256:e0b379f38299ff27a653f03eaa69b08a6fd4484e46fd1c9907d984b9f9daeda6", size 
= 4948, upload-time = "2020-02-01T18:04:00.347Z" },
+    { url = 
"https://files.pythonhosted.org/packages/60/a0/a07399bd4842282fe3c2da264746069d5216640bc0940b7a359e2c950aa6/pytest_lazy_fixtures-1.4.0-py3-none-any.whl";,
 hash = 
"sha256:c5db4506fa0ade5887189d1a18857fec4c329b4f49043fef6732c67c9553389a", size 
= 9680, upload-time = "2025-09-16T18:42:30.534Z" },
 ]
 
 [[package]]

Reply via email to