Какое значение в UFT содержит пустая ячейка данных? Это пустая строка или ноль?

В UFT у вас есть возможность использовать «Данные», которые по сути представляют собой лист Excel, который можно использовать для проведения тестов.

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


person shicky    schedule 17.12.2014    source источник
comment
Действительно ли нужно было внести поправку в вопрос? Все, что вы сделали, это удалили дополнительную информацию, которая вносила ясность.   -  person shicky    schedule 18.12.2014


Ответы (2)


Во-первых, я не знаю ни одной data функции. Скорее всего, вы имеете в виду метод DataTable.Value.

DataTable.Value всегда должен возвращать пустую строку для пустых ячеек.

Что касается вопроса о производительности - нет, я бы не ожидал здесь узкого места. И даже если... оптимизация для решения проблемы с производительностью, с которой вы еще не сталкиваетесь, называется преждевременной оптимизацией. Не делай этого. Современные процессоры слишком быстры, чтобы вы могли почувствовать разницу между IsEmpty, IsNull или проверкой на равенство пустой строки. Обычно существуют другие операции, которые потребляют гораздо больше времени выполнения, и их лучше оптимизировать.

Значение Null и функция IsNull редко используются в VBScript или, если уж на то пошло, в QTP/UFT.

Вы можете думать, что Empty и IsEmpty существуют для переменных, которые никогда не получали значения (или явно получали Empty).

В отличие от этого, Nothing полезен для инициализации переменной значением, подобным Empty, если эта переменная должна позже содержать ссылку на объект, потому что Is Nothing возвращает допустимое значение для такой переменной в обоих случаях (случай 1: неинициализировано, т.е. инициализировано до Nothing и случай 2: назначен допустимому экземпляру объекта), в то время как Is Nothing завершится ошибкой, если переменная содержит Empty (RTE: «требуется объект»). Точно так же, оставляя унифицированные переменные ссылки на объект инициализированными в Empty (подумайте об этом, потому что это то, что происходит!) и позже присваивая эту переменную другой переменной, используя Set (как вы должны, потому что он, возможно, содержит ссылку на объект в непустом case) потерпит неудачу, если содержащееся значение равно Empty (вам нужно будет использовать обычное присваивание с = и без Set), в то время как оно завершится успешно (т. е. не RTE), если оно содержит Nothing (или ссылку на объект).

И да, при всем этом довольно нелогично, что DataTable.Value возвращает пустую строку для пустой ячейки, а не значение Empty.

Добавляя потенциальную путаницу, Empty = "" всегда возвращает true, что может быть не так, как можно было бы ожидать, потому что эй! пустое строковое значение по определению является строковым значением, как и непустая строка, так почему же оно должно считаться равным Empty? Но это так, потому что для сравнения Empty преобразуется в строку, а CStr (Empty) — это пустая строка, которая, конечно же, является "".

person TheBlastOne    schedule 18.12.2014
comment
IsEmpty("") возвращает False (поскольку буквальное значение не является унитарной переменной); в VBScript нет указателей, Null – это конкретное значение, указывающее "инициализировано, но недействительно". - person Ekkehard.Horner; 18.12.2014
comment
Обновлено. И: Конечно, VBScript не имеет указателей. Я имею в виду, что нулевое значение гарантированно равно нулевому значению указателя, которое вы можете получить (как вариант) от внешних API. Это правильно или неправильно? - person TheBlastOne; 18.12.2014
comment
Неправильно — см. msdn.microsoft.com/de-de/library/cc237865.aspx: вариант VT_NULL не является вариантом VT_PTR, содержащим 0. И: Empty оценивается как 0 в числовом контексте. - person Ekkehard.Horner; 18.12.2014
comment
Спасибо, вы ответили на вопрос и дали мне гораздо больше полезной информации по теме, о которой я не знал. - person shicky; 18.12.2014
comment
Хотя преждевременная оптимизация может быть тем, что меня беспокоит, я действительно не считаю, что это плохой подход. UFT и в лучшие времена работает как собака, поэтому небольшие выигрыши — это именно то, что нам нужно в каждом отдельном тесте, иначе у нас возникнут проблемы с производительностью, и возвращение к решению этих проблем с производительностью будет, по меньшей мере, болезненным. - person shicky; 18.12.2014
comment
Это именно то, чего нельзя делать, извините. UFT не будет работать быстрее, если вы оптимизируете последнюю наносекунду из субмикросекундных операций, которые выполняются один или два раза в секунду. Лучше проанализируйте узкое место и оптимизируйте его. Например, если вы сохраняете свои тесты в QC, вы можете сделать множество вещей, чтобы устранить это узкое место. - person TheBlastOne; 18.12.2014

Наконец RDP действительно заработал, думаю, у меня есть ответ на этот вопрос!

Я обнаружил следующее, описывающее ту же проблему, с которой я столкнулся: http://www.sqaforums.com/forums/hp-unified-functional-testing-uft-mercury-quicktest-pro-qtp/150547-isempty-isnull-not-returning-true-blank-cells-local-datasheet.html

По сути isNull, isEmpty, проверка на null иногда не работала. Судя по сообщению на форуме и тому, что я только что проверил, проверив переменную ‹> "", кажется, что это лучший подход.

Однако есть ли при этом снижение производительности?

person shicky    schedule 17.12.2014