Как переименовать тестовые прогоны в Testrail автоматически

Я пытаюсь автоматически переименовать тестовые прогоны из "Automated Run TIMESTAMP", который генерируется по умолчанию.

В идеальной ситуации мне бы хотелось, чтобы бегун pytest взял часть имени из файла json в каталоге test и соединил его с относительным путем к тесту, который я запускаю. Тесты находятся в виртуальной среде, если это что-то меняет.

относительный путь:

workspace/functional/auth/Test.py

содержимое test.json (которое находится в рабочей области /):

{ "testrail" : "Project Name" }

Выполнение командной строки (из рабочей области / каталога):

$ py.test --testrail=testrail.cfg functional/auth/Test.py

ожидаемое имя в Testrails - "Имя проекта - Функциональное - Auth TIMESTAMP"

1 ответ

Решение

Итак, я смог найти способ автоматического переименования тестов без необходимости импорта из внешнего файла.

измените это в рабочей области /venv/test/lib/python2.7/site-packages/pytest_testrail/plugin.py - (путь будет отличаться)

import os

def testrun_name(location):
"""
Returns testrun name with timestamp
Edited to grab the directory and name the test based off of that
"""
projects = {mapping of projects}
suite = {mapping of sub folders to function names}

absolute_path = os.getcwd()
project_dir = absolute_path.split('workspace/')[1]

now = datetime.utcnow()
return '{} - {} Tests {}'.format(projects[project_dir],suite[location],now.strftime(DT_FORMAT))

@pytest.hookimpl(trylast=True)
def pytest_collection_modifyitems(self, session, config, items):

    # Create list of locations of the test cases
    locations = []
    location = 'project'
    for item in items:
        loc = item.location[0].split('/')[1]
        if loc not in locations:
            locations.append(loc)
    # Remove the Testrails location
    if '..' in locations:
        locations.remove('..')
    # Check length of list to determine if running individual test
    if len(locations) == 1:
        location = locations[0]

    tr_keys = get_testrail_keys(items)
    self.create_test_run(
        self.assign_user_id,
        self.project_id,
        self.suite_id,
        testrun_name(location),
        tr_keys
    )

Это приводит к запуску testrun из рабочей области / functions /auth/Test.py с именем "Functional - Auth Tests TIMESTAMP" и тестам из рабочей области / функционала с именем "Functional - Project Tests TIMESTAMP"

Другие вопросы по тегам