Как гарантировать, что DataProvider инициализируется только один раз БЕЗ использования Factory?

У меня есть тестовый класс, в котором все методы используют один и тот же DataProvider. Я хочу, чтобы DataProvider был распараллелен. Я не могу использовать заводской метод, потому что в TestNg есть дефект, который делает его бесполезным для моей цель.

Прямо сейчас поставщик данных пересчитывается для каждого метода, который его использует. Использование фабрики решило бы эту проблему, за исключением того, что мне нужно, чтобы все методы в каждом экземпляре тестового класса, порожденного фабрикой, запускались в ОДНОМ потоке. В TestNG есть нерешенный дефект, когда параллельное выполнение по экземплярам не работает. Я пробовал использовать более старые версии TestNG, но каждая версия, которую я пробовал, имеет дефект. Я могу только вернуться назад, прежде чем начну терять другие нужные мне функции.

Мне также нужно, чтобы DataProvider работал параллельно, то есть все методы в тестовом классе должны запускаться параллельно для каждого из предоставленных наборов данных. Есть ли какое-то обходное решение, которое я могу использовать, чтобы гарантировать, что DataProvider инициализируется только один раз, а поставщик является многопоточным?

Еще одна проблема заключается в том, что когда я использую параллельный DataProvider без Factory, каждый тестовый метод запускается в отдельном потоке. Я хочу, чтобы ВСЕ методы в тестовом классе выполнялись в ОДНОМ потоке для каждого набора данных в поставщике и для каждого набора данных, который выполнялся параллельно. Итак, если у меня есть три набора данных, мне нужны три потока, в которых выполняются тестовые методы в классе.


person Selena    schedule 07.12.2015    source источник


Ответы (1)


Лучшим решением было бы предложить запрос на перенос с исправлением указанной вами проблемы. В противном случае вы можете решить проблему самостоятельно, установив статический атрибут и вернув его после первого вызова (и его инициализации). У вас также может быть класс внешнего поставщика данных, который по умолчанию можно инициализировать в конструкторе.

person juherr    schedule 07.12.2015
comment
Итак, я загрузил исходный код TestNg, чтобы попытаться выяснить, как исправить этот дефект. Где именно мне следует искать, потому что у меня возникают проблемы с определением того, где запланированы методы тестирования для данного потока. Не помогает то, что я был одним из многих студентов, которые заблудились в структурах данных после того, как появились алгоритмы графов ... - person Selena; 08.12.2015
comment
Хорошее начало - добавить новый тест, который показывает проблему, и предложить ее. Тогда будет проще обсудить, как это исправить. Кстати, вы пробовали обходные пути? - person juherr; 08.12.2015
comment
У меня есть обходной путь, который уродлив, но работает. Я создал класс диспетчера данных, который использует хэш-карту для управления данными. Ключевым значением является хэш-код экземпляров WebDriver, которые используются для каждого из наборов данных, предоставленных DataProvider. Я создам этот тест до конца недели. - person Selena; 08.12.2015