123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- """
- import os
- import json
- import pytest
- from typing import List
- from dataclasses import dataclass
- from _pytest.mark import ParameterSet
- from automatedtesting_shared import asset_database_utils as asset_db_utils
- @dataclass
- class BlackboxAssetTest:
- test_name: str
- asset_folder: str
- override_asset_folder: str = ""
- scene_debug_file: str = ""
- override_scene_debug_file: str = ""
- assets: List[asset_db_utils.DBSourceAsset] = ()
- override_assets: List[asset_db_utils.DBSourceAsset] = ()
- def populate_product_list_from_json(data_products: {iter}) -> list[asset_db_utils.DBProduct]:
- """
- Helper function used by the test_builder.py module to populate an expected product assets list from a json file.
- :param data_products: The "product" key from the target json dict.
- :return: list_products: A list of products.
- """
- list_products = []
- for product in data_products:
- list_products.append(
- asset_db_utils.DBProduct(
- product_name=product["product_name"],
- sub_id=product["sub_id"],
- asset_type=bytes(product["asset_type"], 'utf-8')
- )
- )
- return list_products
- def build_test(scenetest_file: object) -> BlackboxAssetTest:
- """
- A function that reads the contents of a scenetest json file to create a test.
- Returns the test parameters and data as an instance of the BlackboxAssetTest dataclass.
- Scene Test json template example at '\assetpipeline\scene_tests\tests\template.json'
- :param scenetest_file: A json formatted file that provides the data required to drive a test.
- :return: Test data to be parametrized using pytest.param() from within the test runner module in
- '\assetpipeline\scene_tests\scene_tests.py'.
- """
- # Open the json file and load it into a variable.
- with open(scenetest_file) as file:
- data = json.load(file)
- # Create an instance of the BlackboxAssetTest dataclass and populate the parameters with data from the json file.
- TestParams = BlackboxAssetTest(
- test_name=data["test_name"],
- asset_folder=data["asset_folder"],
- override_asset_folder=data["override_asset_folder"],
- scene_debug_file=data["scene_debug_file"],
- override_scene_debug_file=data["override_scene_debug_file"],
- assets=[
- asset_db_utils.DBSourceAsset(
- source_file_name=data["assets"]["source_file_name"],
- uuid=bytes(data["assets"]["uuid"], 'utf-8'),
- jobs=[
- asset_db_utils.DBJob(
- job_key=data["assets"]["jobs"]["job_key"],
- builder_guid=bytes(data["assets"]["jobs"]["builder_guid"], 'utf-8'),
- status=data["assets"]["jobs"]["status"],
- error_count=data["assets"]["jobs"]["error_count"],
- products=populate_product_list_from_json(data["assets"]["jobs"]["products"])
- )
- ]
- )
- ],
- override_assets=[
- asset_db_utils.DBSourceAsset(
- source_file_name=data["override_assets"]["source_file_name"],
- uuid=bytes(data["override_assets"]["uuid"], 'utf-8'),
- jobs=[
- asset_db_utils.DBJob(
- job_key=data["override_assets"]["jobs"]["job_key"],
- builder_guid=bytes(data["override_assets"]["jobs"]["builder_guid"], 'utf-8'),
- status=data["override_assets"]["jobs"]["status"],
- error_count=data["override_assets"]["jobs"]["error_count"],
- products=populate_product_list_from_json(data["override_assets"]["jobs"]["products"])
- )
- ]
- )
- ] if data["override_assets"] is not None else None
- )
- return TestParams
- def parametrize_blackbox_scene_test(dir_test_path: str) -> tuple[list[ParameterSet], list]:
- """
- Summary:
- Helper function that parametrizes tests based on json files found within the test directory and all sub-folders.
- :returns:
- blackbox_scene_tests: List of parametrized tests
- blackbox_test_ids: Name of tests to be used as IDs during parametrization
- """
- blackbox_scene_tests = []
- blackbox_test_ids = []
- for root, dirs, files in os.walk(dir_test_path):
- file_list = [file for file in files if file.endswith(".scenetest")]
- for test in file_list:
- test_path = os.path.join(root, os.path.relpath(test))
- blackbox_scene_tests.append(
- pytest.param(
- build_test(test_path)
- )
- )
- blackbox_test_ids.append(test.split(".")[0])
- return blackbox_scene_tests, blackbox_test_ids
|