На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Тестирование консольных приложений Delphi с помощью языка Python., Тестирование консольных приложений Delphi.
Всем доброе время суток)
Тема "Тестирование консольных приложений Delphi с помощью языка Python."
Почему такая тема вроде бы с Delphi не связанна.

Не давно смотрел обучающее видео про использование языка Python для тестирования программ написанных на c++.
И захотел сделать аналогичное для консольных приложении написанных на Delphi.
В видео не рассматривается вариант для приложений с дескриптором.
Ответ подсказал другой пример, который был дополнен догадками и прочтением справки.

Сразу оговорюсь "Не претендую на полноту ответа по данной теме.
Вариант больше похож на костыль и его возможно можно улучшить, не спорю.
А также что это актуальная информация по данной теме так как я не стал искать дальше
может уже придумали что-то новое просто мне неизвестно." :D

Коротко так.
Имеется приложение
на вход подается строка из "единиц и нулей".
на выход поступает "строки развертки" "единицы и нули".
Строка на вход пример:
ExpandedWrap disabled
    1100100100001111110110101010001000100001011010001100001000110100

Строки развертки выход (на входной пример):
ExpandedWrap disabled
    1100100100001111110110101010001000100001011010001100001000110100
    1111010100010110110111100111001100000000101101001101001100000000
    0110001100011011111011101011000110000001111000001110000010010000
    1011000100011111011111101111100101000000111000000110100101000000
    1111100100011111101011101111010100000000111000001010010100000000
    1111010100011111111011101111000100000000111000001110000100000000
    1111000100011111111011101111000100000000111000001110000100000000
    1101011010001000
    1101101101010100
    1110111000110000
    0111111100010000
    1010111110010000
    1110111101010000
    1110111100010000
    1010
    0111
    1011
    1111
    1


Далее код без редактуры на Python.
ExpandedWrap disabled
    # Запуск программы консоли
    import subprocess
    from io import StringIO
    print('#1 ')
    args = ["D:\\1Руслан собираю 9.15 Гб\\Задание завершено 03.07.16\\консоль -7.2.1 строки\\Bibit.exe","1100100100001111110110101010001000100001011010001100001000110100"]
    process = subprocess.Popen(args, stdout=subprocess.PIPE)
    data = process.communicate()
    code = process.wait()
    print('Завершился без ошибок код ',code) # 0
    #print(data)
    #print('Данные',data[0])
    s = "".join(str(x) for x in data[0])
    print()
    s = s.replace('49', '1')
    s = s.replace('48', '0')
    new = s.split('1310')
    for line in new:
       print(line)
    #*********************************************************** Write to File
    f = open('C:\\Documents and Settings\\LeyRus\\Рабочий стол\\Текстовый документ (2).txt','w')
    #f = open('D:\\Мой фалы с работы PAS\\test.txt','r')
    #for index in l:
    #f.write(index + '\n')
    f.write('#1 Данные'+ '\n')
    for line in new:
       f.write(line+ '\n')
    f.close()
    #********************************************************** End Writing
    print('#2 ')
    args = ["D:\\1Руслан собираю 9.15 Гб\\Задание завершено 03.07.16\\консоль -7.2.1 строки\\Bibit.exe","1100011001100111"]
    process = subprocess.Popen(args, stdout=subprocess.PIPE)
    data = process.communicate()
    code = process.wait()
    print('Завершился без ошибок код ',code) # 0
    s = "".join(str(x) for x in data[0])
    print()
    s = s.replace('49', '1')
    s = s.replace('48', '0')
    new = s.split('1310')
    for line in new:
       print(line)
    #*********************************************************** Apped to File
    f = open('C:\\Documents and Settings\\LeyRus\\Рабочий стол\\Текстовый документ (2).txt','a')
    #f = open('D:\\Мой фалы с работы PAS\\test.txt','r')
    #for index in l:
    #f.write(index + '\n')
    f.write("\n#2 Данные\n")
    for line in new:
       f.write(line+ '\n')
    f.close()
    #********************************************************** End Appending
    print('#3 ')
    args = ["D:\\1Руслан собираю 9.15 Гб\\Задание завершено 03.07.16\\консоль -7.2.1 строки\\Bibit.exe","0011011011110000001001010101110111011110100101110011110111001011"]
    process = subprocess.Popen(args, stdout=subprocess.PIPE)
    data = process.communicate()
    code = process.wait()
    print('Завершился без ошибок код ',code) # 0
     
    s = "".join(str(x) for x in data[0])
    print()
    s = s.replace('49', '1')
    s = s.replace('48', '0')
    new = s.split('1310')
    for line in new:
       print(line)
    #print('Данные',data[0])
    #*********************************************************** Apped to File
    f = open('C:\\Documents and Settings\\LeyRus\\Рабочий стол\\Текстовый документ (2).txt','a')
    #f = open('D:\\Мой фалы с работы PAS\\test.txt','r')
    #for index in l:
    #f.write(index + '\n')
    f.write("\n#3 Данные\n")
    for line in new:
       f.write(line+ '\n')
    f.close()
    #********************************************************** End Appending


Используется функция Popen из библиотеки subprocess.
Версия Python 3.4.4
Сообщение отредактировано: RusSun -
плохо, когда уверенность
в своей правоте ограничивает видимость
собственным носом
Дельфи тут ни при чем, да и такого уровня проверка делается даже проще на бат файлах. Вот если бы у тебя был набор ассетов из пар вход-ожидаемый выход, прогон в цикле со сравнением и выдачей ошибочных кейсов, отчеты и прочие навороты, тогда уже применение Питона оправдано. Т.ч. есть куда стремиться ))
Codero ergo sum
// Программирую — значит, существую
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0822 ]   [ 20 queries used ]   [ Generated: 19.07.19, 06:51 GMT ]