Как я могу параметризовать тестовую функцию, используя данные, которые я получаю из других пользовательских классов?В документации я вижу только примеры параметризации статических данных, представленных в виде глобального списка кортежей.
В моем случае я тестирую написанную мной функцию, которая находит изображение в другом изображении.Это выглядит так:
def search_for_image_in_image(screenshot_path, detectable_path):
"""
Uses template matching algorithm to detect an image within an image
:param screenshot_path: Path to the screenshot to search
:param detectable_path: Path to the detectable to search for
:return: tuple containing:
(bool) - Whether or not the detectable was found within the screenshot, using
the given epsilon
(float) - Maximum value the algorithm found
(list) - x and y position in the screenshot where the maximum value is located.
Or in other words, where the algorithm thinks the top left of the detectable
is most likely to be (if it is there at all)
Итак, я настроил некоторые примеры данных для тестирования:
tests\
sample data\
images_to_search_for\
moe.png
larry.png
curly.png
images_to_search
screenshot_01.png
screenshot_02.png
expected_results.csv
Я вручную создал файл CSV, например:
screenshot_name,moe,larry,curly
screenshot_01,True,False,True
screenshot_02,False,False,False
Я могу создать классы или функции для загрузки этих образцов данных, но я не понимаю, как передать их моему тестовому методу.
Вот скелет моего тестового кода:
import pytest
from image_detection import search_for_image_in_image
class DataLoader(object):
def __init__(self):
# Load all the data up
pass
def get_screenshot_paths(self):
"""
:return: (list of string) paths to all the images to search
"""
pass
def get_detectable_paths(self):
"""
:return: (list of string) paths to all the images to search for
"""
pass
def is_expected_to_be_found(self, screenshot_name, detectable_name):
"""
:param screenshot_name:
:param detectable_name:
:return: Whether or not the detectable is expected to be found in the screenshot
"""
pass
@pytest.mark.parametrize("screenshot_path,detectable_path,expected_result", ???? )
def test_image_searching(screenshot_path, detectable_path, expected_result):
actual_result, _, _ = search_for_image_in_image(screenshot_path, detectable_path)
Что я положу туда, где у меня есть «????»Или я пойду по-другому?