Рубрики
Без рубрики

[Как] Напишите комплексные тестовые случаи с использованием генератора тестового теста DIY.

Узнайте, как писать сложные тестовые случаи с использованием генератора тестового теста DIY.

Автор оригинала: Tadayuki Tanigawa.

Что это?

Мы должны написать много кода и тестов.

Иногда нам нужно поддерживать огромный и сложный код, а также тесты, которые следуют изменения, когда деловые ситуации меняются так быстро.

Слишком сложно писать и хранить качественный код теста, когда столкнулся с сложной бизнес-логикой.

Мы кодеры Отказ Давайте исправим эти проблемы с генератором, чтобы легко и быстро сделать тесты.

После изучения этого метода вы можете легко масштабироваться в этих ситуациях.

Для пользователей Windows

  • Github клон
  • пряжа
  • пряжа watch_xlsx.
  • Определите свои сложные бизнес-шаблоны в XLSX.
  • Изменить generate_test_case.rb, чтобы делать то, что вам нужно.
  • Скопируйте сгенерированный тестовый код в ваш проект.
  • Запустите и измените данные, которые вы хотите.

Для пользователей без окон

  • Клон от Гадость
  • пряжа
  • пряжа watch_csv.
  • Определите свои сложные бизнес-шаблоны в CSV.
  • Изменить generate_test_case.rb, чтобы делать то, что вам нужно.
  • Скопируйте сгенерированный тестовый код в ваш проект.
  • Запустите и измените данные, которые вы хотите.

Подготовьтесь к использованию

Клон от github

Откройте свой терминал или командную строку.

git clone https://github.com/panghea/testcasegenerator

Пример

Этот пример – рабочий процесс для упаковок элемента. Упаковка элемента определяется категорией элемента и типом судов товара. Есть пять маршрутов, чтобы одобрить доставку товара для пакета.

Код примера

public class Routes {
    // result for Package Type
    public String packageType;

    public void approveA(Item item) {
        // approve with Item Category and Ship Type

        // process data and write to the database....
        // if the final approve flow record package type to this.packageType 
    }
    public void approveB(Item item) {
        // approve with Item Category and Ship Type

        // process data and write to the database....
        // if the final approve flow record package type to this.packageType 
    }
    public void approveC(Item item) {
        // approve with Item Category and Ship Type

        // process data and write to the database....
        // if the final approve flow record package type to this.packageType 
    }
    public void approveD(Item item) {
        // approve with Item Category and Ship Type

        // process data and write to the database....
        // if the final approve flow record package type to this.packageType 
    }
    public void approveE(Item item) {
        // approve with Item Category and Ship Type

        // process data and write to the database....
        // if the final approve flow record package type to this.packageType 
    }
    public String Reject(Item item) {
        // reject workflow when somthing happend at bussiness working.

        // clean up data and record where to reject approve process to the database
        return approveProcessName;
    }
}

Вот пример данных Excel (вход/data_pattern.xlsx)

Пакет C1. Тип судна B. пропускать нужно пропускать пропускать нужно Категория А.
Пакет C2. Тип судна C. нужно нужно пропускать нужно нужно Категория А.
Пакет A2. Тип судна D. нужно нужно нужно нужно нужно Категория А.
Пакет A3. Тип судна C. пропускать пропускать пропускать пропускать нужно Категория А.
Пакет C1. Тип корабля А. нужно нужно пропускать нужно нужно Категория B.
Пакет A2. Тип судна B. пропускать нужно нужно нужно нужно Категория B.
Пакет B7. Тип судна F. нужно нужно пропускать нужно нужно Категория B.
Пакет B4. Тип судна B. нужно нужно нужно нужно нужно Категория C.
Пакет A3. Тип корабля А. нужно нужно пропускать пропускать нужно Категория C.
Пакет C2. Тип судна F. пропускать нужно пропускать нужно пропускать Категория D.
Пакет D1. Тип судна G. пропускать нужно пропускать пропускать нужно Категория D.
Пакет F2. Тип корабля А. нужно пропускать пропускать пропускать пропускать Категория E.

Вот пример данных CSV (вход/data_pattern_csv.yaml)

Он пишет CSV внутри YAML, что полезно для чтения и редактирования для людей и преобразователей.

data_csv: 
  - ["Category A","Ship Type B","skip","need","skip","skip","need","Package C1"]
  - ["Category A","Ship Type C","need","need","skip","need","need","Package C2"]
  - ["Category A","Ship Type D","need","need","need","need","need","Package A2"]
  - ["Category A","Ship Type C","skip","skip","skip","skip","need","Package A3"]
  - ["Category B","Ship Type A","need","need","skip","need","need","Package C1"]
  - ["Category B","Ship Type B","skip","need","need","need","need","Package A2"]
  - ["Category B","Ship Type F","need","need","skip","need","need","Package B7"]
  - ["Category C","Ship Type B","need","need","need","need","need","Package B4"]
  - ["Category C","Ship Type A","need","need","skip","skip","need","Package A3"]
  - ["Category D","Ship Type F","skip","need","skip","need","skip","Package C2"]
  - ["Category D","Ship Type G","skip","need","skip","skip","need","Package D1"]
  - ["Category E","Ship Type A","need","skip","skip","skip","skip","Package F2"]

Создайте YAML из каждого файла данных (Excel или CSV)

Создайте YAML из файлов XLSX (только для Windows)

Если вы используете Windows, вы можете генерировать YAML из XLSX.

cd testcasegenerator
ruby xlsx2yaml.rb

Генерировать YAML из файла CSV

Если вы не используете Windows, вы можете генерировать YAML из CSV.

cd testcasegenerator
ruby csv2yaml.rb

Выходной файл YAML

Сгенерированный/Generator_input.yaml.

---
- ItemCategory: Category A
  ItemShipType: Ship Type B
  ApproveRouteA: skip
  ApproveRouteB: need
  ApproveRouteC: skip
  ApproveRouteD: skip
  ApproveRouteE: need
  PackageType: Package C1
- ItemCategory: Category A
  ItemShipType: Ship Type C
  ApproveRouteA: need
  ApproveRouteB: need
  ApproveRouteC: skip
  ApproveRouteD: need
  ApproveRouteE: need
  PackageType: Package C2
...

Создайте файл тестового случая из файла yaml

ruby generate_test_case.rb

Источник генератора

Требуется всего несколько кодов для генерации тестовых случаев.

def generateTestCase(testCase) 
    outputCodes = []
    # write method header
    outputCodes.push(<<-GENERATOR.gsub(/^$/,"")
        /*
        * Test Case Of [#{testCase["ItemCategory"]}] and [#{testCase["ItemShipType"]}]
*
        * ======================================================
        * 2017/09/15 Tadayuki Tanigawa
        * 
* @throws Throwable */ @Test public void testCase#{"%02d" % (testCase['caseNo']+ 1)}_#{testCase['ItemCategory'].gsub(/ /,"_")}_#{testCase['ItemShipType'].gsub(/[- ]/,"_")}() throws Throwable { // prepare for test data by route GENERATOR ); # prepare data for each route outputCodes.push(prepareTestData(testCase).join()) # do test methods outputCodes.push(<<-GENERATOR // create item Item item = new Item(); item.setCategory("#{testCase["ItemCategory"].gsub(/.* /,"")}"); item.setShipType("#{testCase["ItemShipType"].gsub(/.* /,"")}"); // call each route Routes routes = new Routes(); GENERATOR ) outputCodes.push(testRouteCall(testCase).join()) # assert test result outputCodes.push(<<-GENERATOR // assert package type assertThat("Package Type", routes.packageType, is("#{testCase["PackageType"].gsub(/.* /,"")}")); GENERATOR ) outputCodes.push(<<~GENERATOR #{testCase["Assertions"]} GENERATOR ) outputCodes.push(<<-GENERATOR } GENERATOR ) outputCodes end

Сгенерированный код

Это сгенерированный метод теста путем Generate_Test_Case.rb.

Если вам нужно добавить маршруты в ваши бизнес-правила, легко создавать тесты, используя генератор. Вы просто добавляете новый маршрут элемента как строка в XLSX или CSV.

        /*
        * Test Case Of [Category B] and [Ship Type F]
*
        * ======================================================
        * 2017/09/15 Tadayuki Tanigawa
        * 
* @throws Throwable */ @Test public void testCase07_Category_B_Ship_Type_F() throws Throwable { // prepare for test data by route // For Route A insert or update data to the Database dao.update("Update ItemRouteTable ... RouteName = 'ApproveRouteA' ,itemCategory = 'Category B'...."); // For Route B insert or update data to the Database dao.insert("Insert RouteTable ... SELECT 'B' AS RouteType ,'Category B' as ItemCategory...."); dao.update("Update ItemCategoryTable ... itemCategory = 'Category B Where itemShipType = 'Ship Type F'") dao.update("Update ItemRouteTable ... RouteName = 'ApproveRouteB' ,itemCategory = 'Category B'...."); // For Route D insert or update data to the Database dao.insert("Insert RouteTable ... SELECT 'D' AS RouteType ,'Category B' as ItemCategory...."); dao.update("Update ItemRouteTable ... RouteName = 'ApproveRouteD' ,itemCategory = 'Category B'...."); // For Route E insert or update data to the Database dao.insert("Insert RouteTable ... SELECT 'E' AS RouteType ,'Category B' as ItemCategory...."); dao.update("Update ItemRouteTable ... RouteName = 'ApproveRouteE' ,itemCategory = 'Category B'...."); // create item Item item = new Item(); item.setCategory("B"); item.setShipType("F"); // call each route Routes routes = new Routes(); // approve by A route.approveA(item); // approve by B route.approveB(item); // approve by D route.approveD(item); // approve by E route.approveE(item); // assert package type assertThat("Package Type", routes.packageType, is("B7")); }

Автоматически генерировать код при сохранении xlsx или csv

Он наблюдает за модификацией файлов и автоматически выполняет Ruby. Вы просто редактируете Generate_test_Case.rb или data_pattern.xlsx или data_pattern_csv.yaml!

Для окон

npm install -g yarn
yarn watch_xlsx

Для других

npm install -g yarn
yarn watch_csv

Следующий

  • Вы можете добавить пользовательские выражения, которые относятся к данным или утверждению тестового кода в YAML для действительно сложных испытаний.

    Изменить generate_test_case.rb.

    Затем генерируйте код:

    Вы можете определить правила YAML и легко генерировать результаты.

  • Вы можете написать документы Excel от YAML таким образом! Это действительно полезно! Если вы заинтересованы, позвоните мне!

Часто задаваемые вопросы

  1. Зачем использовать YAML для поколения?

    • YAML проще модифицировать, чем CSV и XLSX в текстовом редакторе.
    • YAML – это текстовый файл, который легко управлять на Git.
    • Если XLSX или CSV сломан, мы можем повторно генерировать из YAML в каждый файл – просто сделайте генератор для XLSX или CSV.
    • Ямл читает быстрее, а затем XLSX от Ruby. Мы иногда занимаемся большим размером XLSX файлами.
  2. Зачем использовать Ruby?

    • Здесь документ Ruby потрясающий для генерации кода.
    • Ruby хорош для автоматизации Excel до сих пор.