На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное 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 -
      Дельфи тут ни при чем, да и такого уровня проверка делается даже проще на бат файлах. Вот если бы у тебя был набор ассетов из пар вход-ожидаемый выход, прогон в цикле со сравнением и выдачей ошибочных кейсов, отчеты и прочие навороты, тогда уже применение Питона оправдано. Т.ч. есть куда стремиться ))
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0203 ]   [ 16 queries used ]   [ Generated: 28.03.24, 19:00 GMT ]