Сравнение rtf
#1
Отправлено 03 мая 2009 - 16:49
Ранее все печатные формы формировались непосредственно самой системой, под тестированием. Т.е. печатная форма - это класс. В системе встроены методы, которые по заданой схеме формируют rtf файл.
При предварительном тестом прогоне мы получали rtf-файлы, проверяли их и сохраняли как эталон.
Далее в ходе тестирования печатные формы формировались (вывод печатных форм в файл) и затем сравнивались штатными средствами ТС. Сравнение шло побайтовое. Если было расхождение, то я просто загружал файл-эталона и файл-теста и визуально сравнивал их, проблему обнаруживаешь в секунду.
Принято решение перейти на внешние печатные формы. Т.е. создается печатная форма-шаблон и указывается, что при биллинге использовать эту форму. Дальнейшая технология сранивания аналогична.
Я получаю эталоны, сохраняю их.
В ходе теста формирую печатные формы и сравниваю с эталоном.
Но не тут-то было. Тест фиксирует расхождение. Смотрю количество байтов идентично, быстрая проверка содержимого указывает. что и содержимое аналогично. Сравнение файлов в программах сравнения показывают на рассхождение в некоторых местах обычно в rsidах и insidах.
Кто может что-то посоветовать в этом случае? Спасибо
#2
Отправлено 03 мая 2009 - 19:20
Удалить или заменить на какую-нибудь константу.
Точно так же можно поступать с любой другой незначимой информацией - например, если внутри файла пишется дата его создания, или имя машины - информация, которая не меняет вид или поведение, но всегда будет мешать автоматическому сравнению.
#3
Отправлено 04 мая 2009 - 09:29
Если функционально новые формы правильные (вся информация на своих местах), достаточно просто удалить незначимую информацию из файла-эталона и из тестируемого файла перед их сравнением.
Удалить или заменить на какую-нибудь константу.
Алексей, спасибо за ответ.
Вопрос как удалить эту незначимую информацию? Как узнать, что ее нужно удалить?
Да путем сравнения ранее созданого эталона и вновь созданных документов я могу увидеть, где происходит изменение, но как можно найти и удалить перед сравнением то, что будет заведомо отличаться?
Мне это совершенно не понятно.
Более того я делал такой простой эксперимент. Берешь только что созданный rtf, открываешь его и сохраняешь по другим именем - уже размер файлов отличается
#4
Отправлено 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-файлы перед сравнением.
#5
Отправлено 04 мая 2009 - 10:06
#6
Отправлено 04 мая 2009 - 10:48
Любым приемлемым способом. Регэкспом. Заменой строки. и тд и тп.Вопрос как удалить эту незначимую информацию? Как узнать, что ее нужно удалить?
А это уже стратегический вопрос. Как вариант - прочитать спецификацию на формат файла и сразу поудалять все лишнее.Да путем сравнения ранее созданого эталона и вновь созданных документов я могу увидеть, где происходит изменение, но как можно найти и удалить перед сравнением то, что будет заведомо отличаться?
Мне это совершенно не понятно.
#7
Отправлено 04 мая 2009 - 14:13
Братцы Pryanik, rlabs. Коли бы я знал, что и как делать, стал бы я обращаться на форум? Это не в упрек, а к тому, ну советы давайте немного более конкретные :)
Я прикрепил пару файлов - один эталон, другой вновь созданный. Расхождения есть, вероятно убрать их можно. Вопрос каким образом? просто заменив на некие константы как предлагают greesha и rlabs?
#8
Отправлено 04 мая 2009 - 14:17
Что такое Регэксп? Это ПО? Или некий термин причастных к тестированию rtf? Я просто не знаюЛюбым приемлемым способом. Регэкспом. Заменой строки. и тд и тп.
#9
Отправлено 04 мая 2009 - 14:55
Это регулярные выражения (regular expressions).Что такое Регэксп? Это ПО? Или некий термин причастных к тестированию rtf? Я просто не знаю
#10
Отправлено 04 мая 2009 - 15:52
Я прикрепил пару файлов - один эталон, другой вновь созданный. Расхождения есть, вероятно убрать их можно. Вопрос каким образом? просто заменив на некие константы как предлагают greesha и rlabs?
Да, просто заменив константы.
Можно еще попробовать все сохранить в XML в том же ворде... смысл тот же, но там просто тэги на более человеческом языке обозваны + ненужное можно грохать один махом вместе с потомками, ежели появится желание... :)
#11
Отправлено 04 мая 2009 - 16:14
А почему с большой буквы?Это регулярные выражения (regular expressions).
#12
Отправлено 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 реагировать на выбор Сервиса и затем Параметров :(
#13
Отправлено 04 мая 2009 - 17:30
Я сторонник исключительно простых решений. Я не совсем понимаю фразы "просто заменив их константами".
Просто пример. Открываю rtf в фаре и пытаюсь заменить все rsid на пусто к примеру - не тут то было. К тому же кроме rsid там есть много еще других проблем. В общем вижу что путь по ртф неочень перспективный.
А что именно было, когда "не тут-то было"? Желательно с примерами.
Какие именно проблемы?
У меня вопрос к знатокам word
1/ можно ли как-то управлять word из командной строки, например задать в каком формате сохранять файлы
2. если нет, а как работать с word как опен-аппликейшен, а то просто жуть, закрытее нашего тестируемого приложения. Несмотря на то, что я научился работать в word без использования мыши, TC не хочет разделять со мной мою радость
1. Создаете макрос, который вам все сохраняет.
2. Запускаете командную строку: <путь до ворда> /mname <путь к файлу>
(выделенное жирным name заменить на имя вашего макроса)
Еще можно попробовать подключить библиотеку Word и сравнить все интересующие места через API.
#14
Отправлено 04 мая 2009 - 23:01
Братцы Pryanik, rlabs. Коли бы я знал, что и как делать, стал бы я обращаться на форум? Это не в упрек, а к тому, ну советы давайте немного более конкретные :)
просто удалить незначимую информацию из файла-эталона и из тестируемого файла перед их сравнением.
Удалить или заменить на какую-нибудь константу.
написать простой фильтр, удаляющий все лишние данные (если беспокоит только rsid - например, тупо заменять все идентификаторы на константу), и пропускать через него все сгенерированные RTF-файлы перед сравнением.
Однако, куда уже конкретнее? Или вам скрипты написать?
Боюсь, я не готов объяснять на низком уровне, как производить замену строк в файле. Предполагается, что инженер это умеет делать.
Потому, что в начале предложения.Что такое Регэксп? А почему с большой буквы?
#15
Отправлено 05 мая 2009 - 06:29
Извне (например из TestComplete) с Word проще всего работать через COM. Вот, например, как можно открыть файл и сохранить его в другом формате:можно ли как-то управлять word из командной строки, например задать в каком формате сохранять файлы
//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 (или т.п.)).
#16
Отправлено 05 мая 2009 - 06:58
Боюсь, я не готов объяснять на низком уровне, как производить замену строк в файле. Предполагается, что инженер это умеет делать.
А почему вы решили, что galogenIt - инженер?
Сдаётся мне, что вы не аналитик. :)
#18
Отправлено 05 мая 2009 - 08:10
Я, может, сейчас глупость скажу, но почему именно MS Word? А не Open Office или AbiWord или WordPad?
Могу точно сказать, что OpenOffice у меня когда-то криво переводил в XML, вернее постоянно добавлялись новые стили и шрифты типа : Tahoma1, Tahoma11 и т.д. по нарастающей. Вобщем, заработал мою антипатию... хотя и хорошая вещь :)
А в WordPad можно писать макросы/скрипты? Давненько его не видела... :)
#19
Отправлено 05 мая 2009 - 09:36
#20
Отправлено 05 мая 2009 - 10:02
Бесплатному коню в зубы не смотрят :)Могу точно сказать, что OpenOffice у меня когда-то криво переводил в XML, вернее постоянно добавлялись новые стили и шрифты типа : Tahoma1, Tahoma11 и т.д. по нарастающей. Вобщем, заработал мою антипатию... хотя и хорошая вещь :)
Конечно нет, а тут разве нужна поддержка макросов?А в WordPad можно писать макросы/скрипты? Давненько его не видела... :)
PS я к чему веду: ворд при сохранении документа записывает в него ещё много всяких одному ему ведомых метаданных. Может, альтернативные продукты позволят избежать описанных проблем с rsid и insid.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных