2016-11-07 36 views
-1

Я использую простой тестовый фреймворк, который преобразует содержимое файла * .xlsx в тестовый браузер selenium. Это позволяет получить высокий уровень абстракции, но раздражает работу в git из-за того, что он является двоичным.Есть ли способ принудительно создать автоматически сгенерированный файл вместе с остальной частью коммита, которая запускает его генерацию?

Формат тестового файла Эксел:

Column A   -> Action 
Column B   -> Identity (which text field, etc) 
Column C onwards -> Value 

Я написал следующий код, который успешно преобразует файл первенствовать в текстовый файл (* .json), по существу, только список списков (так что порядок сохраняется и не вводится лишние ключевые слова).

#!/usr/bin/env python 

""" 
This script takes a GUI test in xlsx format and outputs a text interpretation. 
""" 

import argparse 
import json 
from openpyxl import load_workbook 
from openpyxl.cell import get_column_letter 


def main(xlsx_test): 
    ws = load_workbook(filename=xlsx_test, data_only=True).active 
    col_size = len(ws.column_dimensions) 
    row_size = len(ws.row_dimensions) 
    full_document = [] 

    for col in xrange(2, col_size): 
     col_letter = get_column_letter(col + 1) 
     test_document = [] 

     for row in xrange(row_size): 
      cell_reference = col_letter + str(row + 1) 
      cell_value = ws[cell_reference].value 

      if cell_value: 
       action = ws['A' + str(row + 1)].value 
       identity = ws['B' + str(row + 1)].value 

       if not action: 
        action = "" 
       if not identity: 
        identity = "" 

       test_item = [action, identity, cell_value] 
       test_document.append(test_item) 
     if test_document: 
      full_document.append(test_document) 

    with open(xlsx_test + '.json', 'w') as outfile: 
     json.dump(full_document, outfile, indent=4) 


if __name__ == '__main__': 

    parser = argparse.ArgumentParser(description='Generate text verion of tests') 
    test_file = parser.add_argument(
     '--input', 
     type=str, 
     nargs='?', 
     help='the file to generate text version of tests from' 
    ) 

    args = parser.parse_args() 

    if args.input is None: 
     print '''No file selected''' 
    else: 
     main(args.input) 

Чтобы запустить его, я бы выполнить следующее в Баш скрипт:

python /path/to/this/script.py --input='/path/to/test.xlsx' 

Я хотел бы текстовый файл, он производит совершаться вместе с XLSX двоичном просто так, что мы получаем git изменить историю.

Я читал о крючках pre-commit (что-то, что я с удовольствием настроил на каждой машине автора, но я изо всех сил пытаюсь установить, будет ли он включать дополнительный сгенерированный файл в фиксацию или нет. было бы здорово, так как я не совсем уверен, что на данный момент попробовать.

Мне также нужно решить, могу ли я перебирать список файлов в фиксации с расширением * .xlsx и передавать путь в виде аргумент для скрипта python выше, в цикле.Что я прошу выполнить таким образом?

ответ

0

Я разработал удовлетворительное решение. Я создал два крючка фиксации.

Предварительно совершить крюк:

#!/bin/bash 
echo 
touch .commit 
exit 

И после совершения крюка:

#!/bin/bash 
if [ -e .commit ] 
    then 
    rm .commit 
    git diff-tree --no-commit-id --name-only -r HEAD | while read i; do 
     if [[ "${i}" == *.xlsx ]]; then 
      echo 
      echo ➤ Found an Excel file: $(basename "${i}") in the git diff-tree 
      if [ ! -f "${i}" ]; then 
       echo ➤ $(basename "${i}") was deleted. Not generating a text interpretation 
       if [ -f "${i}.json" ]; then 
        echo ➤ Found an orphaned text interpretation: $(basename "${i}").json 
        rm "${i}.json" 
        echo ➤ Removed $(basename "${i}").json 
        git rm -q "${i}.json" 
        echo ➤ Removed reference to $(basename "${i}").json from git 
       fi 
      else 
       python "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../../relative/path/to/script.py" --input="$(pwd)/${i}" 
       echo ➤ Generated text interpretation: $(basename "${i}").json 
       git add "${i}.json" 
       echo ➤ Added $(basename "${i}").json to git 
      fi 
     fi 
    done 
    echo ----------------------------------------------------------------------- 
    git commit --amend -C HEAD --no-verify 
    echo ➤ Ammended commit above ⬏ 
    echo ----------------------------------------------------------------------- 
    echo ➤ Initial commit below ⬎ 
fi 
exit 
  1. В настоящее время я могу видеть дополнительную проблему, сделать в совершении добавляемые/измененный файл. Участник может только выполнить фиксацию из базового каталога репозитория.

После того, как я их обработаю, я обновлю изменения.