Перейти к содержимому

Фотография

Сравнение rtf


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 23

#1 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 03 мая 2009 - 16:49

У нас есть тесты для проверки корректности создания печатных форм в ходе исполнения биллинга.
Ранее все печатные формы формировались непосредственно самой системой, под тестированием. Т.е. печатная форма - это класс. В системе встроены методы, которые по заданой схеме формируют rtf файл.
При предварительном тестом прогоне мы получали rtf-файлы, проверяли их и сохраняли как эталон.
Далее в ходе тестирования печатные формы формировались (вывод печатных форм в файл) и затем сравнивались штатными средствами ТС. Сравнение шло побайтовое. Если было расхождение, то я просто загружал файл-эталона и файл-теста и визуально сравнивал их, проблему обнаруживаешь в секунду.

Принято решение перейти на внешние печатные формы. Т.е. создается печатная форма-шаблон и указывается, что при биллинге использовать эту форму. Дальнейшая технология сранивания аналогична.
Я получаю эталоны, сохраняю их.
В ходе теста формирую печатные формы и сравниваю с эталоном.
Но не тут-то было. Тест фиксирует расхождение. Смотрю количество байтов идентично, быстрая проверка содержимого указывает. что и содержимое аналогично. Сравнение файлов в программах сравнения показывают на рассхождение в некоторых местах обычно в rsidах и insidах.

Кто может что-то посоветовать в этом случае? Спасибо
  • 0
С уважением, Эдуард!

#2 rlabs

rlabs

    Специалист

  • Members
  • PipPipPipPipPip
  • 660 сообщений
  • Город:Россия, Санкт-Петербург

Отправлено 03 мая 2009 - 19:20

Если функционально новые формы правильные (вся информация на своих местах), достаточно просто удалить незначимую информацию из файла-эталона и из тестируемого файла перед их сравнением.
Удалить или заменить на какую-нибудь константу.

Точно так же можно поступать с любой другой незначимой информацией - например, если внутри файла пишется дата его создания, или имя машины - информация, которая не меняет вид или поведение, но всегда будет мешать автоматическому сравнению.
  • 0

#3 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 04 мая 2009 - 09:29

Если функционально новые формы правильные (вся информация на своих местах), достаточно просто удалить незначимую информацию из файла-эталона и из тестируемого файла перед их сравнением.
Удалить или заменить на какую-нибудь константу.


Алексей, спасибо за ответ.
Вопрос как удалить эту незначимую информацию? Как узнать, что ее нужно удалить?
Да путем сравнения ранее созданого эталона и вновь созданных документов я могу увидеть, где происходит изменение, но как можно найти и удалить перед сравнением то, что будет заведомо отличаться?
Мне это совершенно не понятно.
Более того я делал такой простой эксперимент. Берешь только что созданный rtf, открываешь его и сохраняешь по другим именем - уже размер файлов отличается
  • 0
С уважением, Эдуард!

#4 greesha

greesha

    Опытный участник

  • Members
  • PipPipPipPip
  • 363 сообщений
  • ФИО:Печёнкин Григорий Михайлович
  • Город:Мытищи

Отправлено 04 мая 2009 - 09:43

Но не тут-то было. Тест фиксирует расхождение. Смотрю количество байтов идентично, быстрая проверка содержимого указывает. что и содержимое аналогично. Сравнение файлов в программах сравнения показывают на рассхождение в некоторых местах обычно в rsidах и insidах.


rsid, судя по спецификации, появились в MS Word 2002, и содержат информацию о каждом сохранении:

RSIDs (Revision Save IDs) indicate when text or a property was changed. Whenever text is added or deleted or properties are changed, that text or property is tagged with the current "Save ID," which is a random number that changes each time the document is saved.


То есть как нарочно придумано для затруднения автоматизированной обработки, ещё раз спасибо Microsoft. :)

Напрашивается два варианта:
1) поискать возможность отключения этих RSID в том компоненте, который генерирует RTF (может быть, можно указать необходимость использования более ранней версии формата RTF?)
2) если первый вариант не проходит, написать простой фильтр, удаляющий все лишние данные (если беспокоит только rsid - например, тупо заменять все идентификаторы на константу), и пропускать через него все сгенерированные RTF-файлы перед сравнением.
  • 0
Григорий Печёнкин
greesha.ru
жежешечка

#5 Pryanik

Pryanik

    Постоянный участник

  • Members
  • PipPipPip
  • 214 сообщений
  • Город:МОСКВА

Отправлено 04 мая 2009 - 10:06

Может стоит посмотреть сторонние инструменты для сравнивания rtf файлов?
  • 0

#6 rlabs

rlabs

    Специалист

  • Members
  • PipPipPipPipPip
  • 660 сообщений
  • Город:Россия, Санкт-Петербург

Отправлено 04 мая 2009 - 10:48

Вопрос как удалить эту незначимую информацию? Как узнать, что ее нужно удалить?

Любым приемлемым способом. Регэкспом. Заменой строки. и тд и тп.

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

А это уже стратегический вопрос. Как вариант - прочитать спецификацию на формат файла и сразу поудалять все лишнее.
  • 0

#7 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 04 мая 2009 - 14:13

greesha, спасибо за ответ :) Наверное единственный ответ который я более или менее понял и увидел какое-то решение. Остальные ответы из класса: сделать можно, но как не скажем.

Братцы Pryanik, rlabs. Коли бы я знал, что и как делать, стал бы я обращаться на форум? Это не в упрек, а к тому, ну советы давайте немного более конкретные :)

Я прикрепил пару файлов - один эталон, другой вновь созданный. Расхождения есть, вероятно убрать их можно. Вопрос каким образом? просто заменив на некие константы как предлагают greesha и rlabs?
  • 0
С уважением, Эдуард!

#8 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 04 мая 2009 - 14:17

Любым приемлемым способом. Регэкспом. Заменой строки. и тд и тп.

Что такое Регэксп? Это ПО? Или некий термин причастных к тестированию rtf? Я просто не знаю
  • 0
С уважением, Эдуард!

#9 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 04 мая 2009 - 14:55

Что такое Регэксп? Это ПО? Или некий термин причастных к тестированию rtf? Я просто не знаю

Это регулярные выражения (regular expressions). :smile:
  • 0

#10 Mila

Mila

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • Город:Санкт-Петербург

Отправлено 04 мая 2009 - 15:52

Я прикрепил пару файлов - один эталон, другой вновь созданный. Расхождения есть, вероятно убрать их можно. Вопрос каким образом? просто заменив на некие константы как предлагают greesha и rlabs?


Да, просто заменив константы.
Можно еще попробовать все сохранить в XML в том же ворде... смысл тот же, но там просто тэги на более человеческом языке обозваны + ненужное можно грохать один махом вместе с потомками, ежели появится желание... :)
  • 0

#11 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 04 мая 2009 - 16:14

Это регулярные выражения (regular expressions). :smile:

А почему с большой буквы?
  • 0
С уважением, Эдуард!

#12 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 04 мая 2009 - 16:23

Да, просто заменив константы.
Можно еще попробовать все сохранить в XML в том же ворде... смысл тот же, но там просто тэги на более человеческом языке обозваны + ненужное можно грохать один махом вместе с потомками, ежели появится желание... :)

Я сторонник исключительно простых решений. Я не совсем понимаю фразы "просто заменив их константами".
Просто пример. Открываю rtf в фаре и пытаюсь заменить все rsid на пусто к примеру - не тут то было. К тому же кроме rsid там есть много еще других проблем.

В общем вижу что путь по ртф неочень перспективный.

Пошел по другому пути. Настраиваю word на сохранение в виде txt. Тут полное согласие с эталоном - что не может не радовать, правда при этом практически не возможно контролировать корректность всей разметки, ну об этом ладно.

У меня вопрос к знатокам word
1/ можно ли как-то управлять word из командной строки, например задать в каком формате сохранять файлы
2. если нет, а как работать с word как опен-аппликейшен, а то просто жуть, закрытее нашего тестируемого приложения. Несмотря на то, что я научился работать в word без использования мыши, TC не хочет разделять со мной мою радость

procedure Test3;
  var p1 : OleVariant;
  var w1 : OleVariant;
  var w2 : OleVariant;
  var w3 : OleVariant;
begin
  TestedApps.WINWORD.Run;
  p1 := Sys.Process('WINWORD');
  w1 := p1.Window('OpusApp', '*');
  w1.Window('_WwF').Window('_WwB', '*').Window('_WwG', 'Документ Microsoft Word').Keys('~е~а');
  w2 := p1.Window('bosa_sdm_Microsoft Office Word 11.0', 'Параметры');
  w2.Click(280, 55);
  w3 := w2.Window('bosa_sdm_Microsoft Office Word 11.0', '', 1);
  w3.Click(267, 247);
  w3.Keys('[Home][Down][Down][Down][Down][Down][Down][Down][Enter]');
  w2.Click(372, 446);
end;
Вот в этом месте Keys('~е~а'); не хочет word реагировать на выбор Сервиса и затем Параметров :(
  • 0
С уважением, Эдуард!

#13 Mila

Mila

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • Город:Санкт-Петербург

Отправлено 04 мая 2009 - 17:30

Я сторонник исключительно простых решений. Я не совсем понимаю фразы "просто заменив их константами".
Просто пример. Открываю rtf в фаре и пытаюсь заменить все rsid на пусто к примеру - не тут то было. К тому же кроме rsid там есть много еще других проблем. В общем вижу что путь по ртф неочень перспективный.


А что именно было, когда "не тут-то было"? Желательно с примерами.
Какие именно проблемы?

У меня вопрос к знатокам word
1/ можно ли как-то управлять word из командной строки, например задать в каком формате сохранять файлы
2. если нет, а как работать с word как опен-аппликейшен, а то просто жуть, закрытее нашего тестируемого приложения. Несмотря на то, что я научился работать в word без использования мыши, TC не хочет разделять со мной мою радость


1. Создаете макрос, который вам все сохраняет.
2. Запускаете командную строку: <путь до ворда> /mname <путь к файлу>
(выделенное жирным name заменить на имя вашего макроса)

Еще можно попробовать подключить библиотеку Word и сравнить все интересующие места через API.
  • 0

#14 rlabs

rlabs

    Специалист

  • Members
  • PipPipPipPipPip
  • 660 сообщений
  • Город:Россия, Санкт-Петербург

Отправлено 04 мая 2009 - 23:01

Братцы Pryanik, rlabs. Коли бы я знал, что и как делать, стал бы я обращаться на форум? Это не в упрек, а к тому, ну советы давайте немного более конкретные :)


просто удалить незначимую информацию из файла-эталона и из тестируемого файла перед их сравнением.
Удалить или заменить на какую-нибудь константу.


написать простой фильтр, удаляющий все лишние данные (если беспокоит только rsid - например, тупо заменять все идентификаторы на константу), и пропускать через него все сгенерированные RTF-файлы перед сравнением.


Однако, куда уже конкретнее? Или вам скрипты написать?

Боюсь, я не готов объяснять на низком уровне, как производить замену строк в файле. Предполагается, что инженер это умеет делать.

Что такое Регэксп? А почему с большой буквы?

Потому, что в начале предложения.
  • 0

#15 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 05 мая 2009 - 06:29

можно ли как-то управлять word из командной строки, например задать в каком формате сохранять файлы

Извне (например из TestComplete) с Word проще всего работать через COM. Вот, например, как можно открыть файл и сохранить его в другом формате:
//DelphiScript

procedure Main;
const
  wdFormatText = 2;
  //wdFormatTextLineBreaks = 3;
  //wdFormatUnicodeText = 7;
var
  oWord;
begin
  oWord := Sys.OleObject['Word.Application', ''];
  oWord.Documents.Open('C:\MyFile.rtf');
  oWord.ActiveDocument.SaveAs('C:\MyFile.txt', wdFormatText);
  oWord.Quit;
end;
Об объектной модели Word можно почитать в MSDN (ищите по ключевым словам Word Object Model Reference), а также во встроенной справке Word (Сервис -> Макрос -> Редактор Visual Basic -> Help -> Справка: Microsoft Visual Basic (или т.п.)).
  • 0

#16 greesha

greesha

    Опытный участник

  • Members
  • PipPipPipPip
  • 363 сообщений
  • ФИО:Печёнкин Григорий Михайлович
  • Город:Мытищи

Отправлено 05 мая 2009 - 06:58

Боюсь, я не готов объяснять на низком уровне, как производить замену строк в файле. Предполагается, что инженер это умеет делать.


А почему вы решили, что galogenIt - инженер?

Сдаётся мне, что вы не аналитик. :)
  • 0
Григорий Печёнкин
greesha.ru
жежешечка

#17 Clauster

Clauster

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 913 сообщений
  • ФИО:Худобородов Валерий
  • Город:Espoo

Отправлено 05 мая 2009 - 07:55

Я, может, сейчас глупость скажу, но почему именно MS Word? А не Open Office или AbiWord или WordPad?
  • 0

#18 Mila

Mila

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • Город:Санкт-Петербург

Отправлено 05 мая 2009 - 08:10

Я, может, сейчас глупость скажу, но почему именно MS Word? А не Open Office или AbiWord или WordPad?


Могу точно сказать, что OpenOffice у меня когда-то криво переводил в XML, вернее постоянно добавлялись новые стили и шрифты типа : Tahoma1, Tahoma11 и т.д. по нарастающей. Вобщем, заработал мою антипатию... хотя и хорошая вещь :)
А в WordPad можно писать макросы/скрипты? Давненько его не видела... :)
  • 0

#19 marr

marr

    Новый участник

  • Members
  • Pip
  • 4 сообщений

Отправлено 05 мая 2009 - 09:36

У нас сравнение с эталоном сделано в виде отдельной dll-ки, которая через com дергает вордовую APIшку (она делает то же, что Tools -> Compare and merge documents).
  • 0

#20 Clauster

Clauster

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 913 сообщений
  • ФИО:Худобородов Валерий
  • Город:Espoo

Отправлено 05 мая 2009 - 10:02

Могу точно сказать, что OpenOffice у меня когда-то криво переводил в XML, вернее постоянно добавлялись новые стили и шрифты типа : Tahoma1, Tahoma11 и т.д. по нарастающей. Вобщем, заработал мою антипатию... хотя и хорошая вещь :)

Бесплатному коню в зубы не смотрят :)

А в WordPad можно писать макросы/скрипты? Давненько его не видела... :)

Конечно нет, а тут разве нужна поддержка макросов?

PS я к чему веду: ворд при сохранении документа записывает в него ещё много всяких одному ему ведомых метаданных. Может, альтернативные продукты позволят избежать описанных проблем с rsid и insid.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных