Фреймворк для автоматического тестирования YAT

Фреймворк Yet another test (YAT) — это фреймворк для автоматического тестирования, основанный на Python3. Ядро фреймворка реализовано на языке Kotlin. Фреймворк инкапсулирован и связан через Python для обеспечения интерфейсов командной строки (CLI). На рисунке 1 показана общая схема фреймворка. Фреймворк YAT постоянно развивается, чтобы стать более эффективной и продвинутой системой автоматического тестирования.

YAT — это фреймворк автоматического тестирования, используемый для мониторинга спецификации баз данных openGauss. openGauss 2.1.0 не только выпускает YAT с открытым исходным кодом, но и предоставляет более 30 000 автоматических тестовых случаев для расширения возможностей тестирования сообщества openGauss, обогащения экосистемы openGauss и привлечения большего числа разработчиков к участию в создании сообщества. Репозиторий кода YAT: https://gitee.com/opengauss/Yat

Рисунок 1 Общая структура YAT

Преимущества продукта

  • Он дружественен к тестам баз данных. Пользователи могут напрямую писать SQL-код и организовывать код в тестовый набор для тестов без дополнительной настройки. Тестовые примеры выполняются через JDBC API и могут адаптироваться к различным базам данных.
  • Он поддерживает множество языков и является расширяемым.

В настоящее время поддерживаются такие языки, как SQL, Shell, Python (unittes) и Groovy (Junit/Spock). Новые языки и фреймворки могут быть добавлены с помощью адаптеров. Операторы SQL, поддерживаемые YAT, являются супермножествами стандартных операторов SQL. То есть, YAT расширяется на основе стандартных операторов SQL. Пользователи могут запускать команды оболочки, управлять соединениями, выполнять циклы, связывать операторы SQL, управлять несколькими сессиями и одновременно выполнять операторы SQL в сценариях SQL. Например:

@conn user/passwd@127.0.0.1:9090;  -- Reconnect to the database as the new user.
drop table if exists tbl_x;  -- Execute SQL statements.

create table tbl_x (id int, age int, xb int);

insert into tbl_x values(1, 2, 4);
insert into tbl_x values(3, 4, 5);

-- Perform the binding operation.
insert into tbl_x values(?, ?, ?);
@bind {
    int 3
    int 5
    int 7
}
-- Perform the binding operation in batches.
insert into tbl_x values(?, ?, ?);
@batch {
    int 3 int 4 int 0
    int 3 int 4 int 9
    int 3 int 4 int 8
    int 3 int 4 int 7
}
-- Run the shell commands.
@sh zctl.py -t stop;
@sh zctl.py -t start;

-- Define sessions.
@session(name: s1)
{
    @set autocommit false;
    update table tbl_x set par1 = 2 par2 = 2;
    insert into tbl_x values(1, 3, 4);
    commit;
}

@session(name: s2, user: abc, password: 'gauss@123')
{
    @set autocommit false;
    update table tbl_x set par1 = 2 par2 = 2;
    insert into tbl_x values(1, 3, 4);
    @step
    {
        select * from tbl_x for update;
    }
    commit;
}
-- Executes SQL statements in sessions.
@steps s1.0 s2.0 s1.1 s1.2 s2.2 s2.1;
-- Execute loops.
@for (count: 10)
{
    insert into abc values(1,1,3,4);
}
-- Concurrently execute SQL statements.
@parallel {
    @session {
        select * from abc for update;
        commit;
    }

    @session {
        select * from abc for update;
        commit;
    }
}
Войти в полноэкранный режим Выход из полноэкранного режима

Сценарий тестирования на языке Python должен быть сценарием тестирования unittest. YAT предоставляет общедоступную библиотеку для облегчения операций с базами данных и удаленным SSH в сценарии тестирования на языке Python unittest. Например:

class TestPrimaryStandby(TestCase):
    node = None
    node_standby = None

    test_table_drop = 'drop table if exists tbl_test';
    test_table_create = '''create table tbl_test (
        id int,
        name char(20),
        address varchar(1024)
    )
    '''

    @classmethod
def setUpClass(cls):
    # Initialize the connection object.
        cls.node = Node(node='primary')
        cls.node_standby = Node(node='standby')
        cls.node.sql(cls.test_table_drop)
        cls.node.sql(cls.test_table_create)

    @classmethod
    def tearDownClass(cls) -> None:
        cls.node.close()
        cls.node_standby.close() # Close the connection object.

def test_abc_001(self):
    # Run the shell command through SSH and check the result.
        self.node.sh('echo "success"').expect('success')

        # Run the SQL statement and check the result.
        self.node.sql('select * from tbl_test').expect(
            (1, 'xxx', 'xxxxxxxxxxxxxxxxxxx'),
            (2, 'xxx', 'xxxxxxxxxxxxxxxxxxx'))

def test_abc_003(self):
    # Run the shell command and determine the result through regular expression matching.
        self.node.sh('cm ctl query').regex(r'.*success.*')
Войти в полноэкранный режим Выйти из полноэкранного режима

Сценарии Groovy можно использовать для написания кейсов JUnit или Spock. Для получения более подробной информации посетите официальный сайт.

  • Он определяет набор стандартных спецификаций для написания тестовых примеров, процессов выполнения тестов и режимов представления тестовых отчетов.

Выполните команду yat init, чтобы создать шаблон тестового набора. После выполнения команды yat init измените содержимое указанного каталога тестового набора. Затем установите драйвер JDBC, добавьте каталог lib в корневой каталог тестового набора, скопируйте драйвер в этот каталог и выполните команду yat suite run для запуска тестового набора. Вы можете добавить различные параметры для настройки печати отчета и формата отчета. На рисунке 2 показан результат работы каталога тестового пакета. Перед запуском тестового пакета настройте следующие каталоги:

  • каталог conf, в котором хранятся файлы конфигурации узла.
  • директория except, в которой хранится ожидаемый файл тестового примера.
  • каталог schedule, в котором хранятся файлы расписания.
  • каталог testcase, в котором хранятся файлы тестовых примеров.

Рисунок 2 Структура каталогов тестового набора

  • Расписание нескольких наборов тестовYAT Schedule — это планировщик, предоставляемый компанией YAT для одновременного планирования нескольких наборов тестов YAT. Вы можете запланировать несколько тестовых наборов YAT в параллельном или последовательном режиме, настроив файл расписания. Когда имеется большое количество тестовых наборов, необходимо определить комбинацию и последовательность тестовых наборов. YAT предоставляет удобный метод организации нескольких тестовых наборов в большой тестовый набор, как показано на следующем рисунке.
# File name: all.ys
serial {# Serial execution of test suites or test suite sets
    suite '../suite1';
    suite '../suite2';
    ...

    parallel { # Parallel execution of test suites or test suite sets
        suite 'parallel/suite1';
        suite 'parallel/suite2';
        ...

        serial { ... }
    }

    suite 'suite3';
    ...
}
Вход в полноэкранный режим Выход из полноэкранного режима

Выполните следующую команду, чтобы выполнить все тестовые наборы в режиме одного клика:

yat schedule -s all.ys

YAT Schedule — это планировщик, предоставляемый компанией YAT для одновременного планирования нескольких тестовых наборов YAT. Вы можете запланировать несколько тестовых наборов YAT в параллельном или последовательном режиме, настроив файл расписания. Когда имеется большое количество тестовых наборов, необходимо определить комбинацию и последовательность тестовых наборов. YAT предоставляет удобный метод организации нескольких тестовых наборов в большой тестовый набор, как показано на следующем рисунке.

Имя файла: all.ys

serial {# Последовательное выполнение тестовых наборов или наборов тестовых наборов
набор ‘../suite1’;
набор ‘../suite2’;

parallel { # Parallel execution of test suites or test suite sets
    suite 'parallel/suite1';
    suite 'parallel/suite2';
    ...

    serial { ... }
}

suite 'suite3';
...
Вход в полноэкранный режим Выход из полноэкранного режима

}
Выполните следующую команду, чтобы выполнить все тестовые наборы в режиме одного клика:

yat schedule -s all.ys
Войти в полноэкранный режим Выйти из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий