1

голосов
1

ответ
1.3k

Просмотры

Как получить идентификатор WorkItem, который начал автоматизированный тест

Введение: В VS2012, мы имеем набор WorkItems, которые планируется автоматизировать. Я создал набор автоматизированных тестов через SpecFlow в VS2010. Для подключения WorkItem с автоматизированным тестом, я должен выбрать WorkItem и поиск автоматизированного теста, который может быть только один раз метода. Недостаток заключается в том, что при большом количестве TestMethods (и у нас), список очень длинный. Это будет утомительно для подключения WorkItem с соответствующим TestMethod. Таким образом, многие из наших тестов (и, следовательно, имена TestMethod) генерируются автоматически, так как мы используем SpecFlow. А когда командный игрок изменить название сценария, это имя TestMethod также изменяется, разрывая связь между WorkItem и автоматизированным тестированием. То, что я хочу: Я хочу, чтобы создать единый TestMethod, которые могут быть выбраны для каждого автоматизированного WorkItem. Это TestMethod извлекает идентификатор WorkItem и ищет для TestMethod, которое начинается с ID, или имеет атрибут Tag SpecFlow с этим идентификатором. Поэтому мне нужен идентификатор WorkItem. Вопрос: Как получить идентификатор WorkItem, который инициировал проверку?
AutomatedChaos
0

голосов
5

ответ
37

Просмотры

Is there a simple way to transform this JSON back and forth?

Мы используем Почтальон для тестирования API. Некоторые объекты, которые мы получаем обратно очень подробны и просты в обращении, поэтому я хочу, чтобы создать вспомогательный метод, чтобы сделать их немного более краткими. Я знаю, что есть все виды библиотек преобразования, как узел-JSON-преобразование, selecttransform, jsontransforms и т.д., но, к сожалению, я могу использовать только библиотеку Почтальоной песочницы и ванильный JS. Я ищу простейшего (наименьшее количество LOC и функций) способ превратить этот объект: вар многословным = [{ «Key»: «Имя», «Значение»: «Джон Доу», «Instance»: 1}, { "Key": "Возраст", "Значение": "33", "Instance": 1}, { "Key": "Ребенок", "Значение": "Джейн", "Instance": 1}, { "Key": "Ребенок", "Значение": "Рокки", "Instance": 2}]; в этом: вар лаконичным = { "Name": "John Doe", "Возраст": "33", "ребенок": [ "Джейн", "Рокки"]}; и обратно в многословной форме. Я уже пробовал родной способ Еогеасп-кий по каждому объекту и добавление свойства / значения к новому объекту, но он пошел некрасиво скоро, когда я достиг несколько пар ключа экземпляра / значения. Я могу себе представить, есть более простой способ с помощью карты / уменьшить, но я не знаком с этими методами. вар лаконичный = { "Имя": "John Doe", "Возраст": "33", "Детский": [ "Джейн", "Рокки"]}; и обратно в многословной форме. Я уже пробовал родной способ Еогеасп-кий по каждому объекту и добавление свойства / значения к новому объекту, но он пошел некрасиво скоро, когда я достиг несколько пар ключа экземпляра / значения. Я могу себе представить, есть более простой способ с помощью карты / уменьшить, но я не знаком с этими методами. вар лаконичный = { "Имя": "John Doe", "Возраст": "33", "Детский": [ "Джейн", "Рокки"]}; и обратно в многословной форме. Я уже пробовал родной способ Еогеасп-кий по каждому объекту и добавление свойства / значения к новому объекту, но он пошел некрасиво скоро, когда я достиг несколько пар ключа экземпляра / значения. Я могу себе представить, есть более простой способ с помощью карты / уменьшить, но я не знаком с этими методами.
AutomatedChaos
2

голосов
0

ответ
269

Просмотры

Почему ссылка на меня в функции возвращает объект типа VBScriptTypeInfo?

Рассмотрим следующий код: Function Foo () Set Foo = я End Function MsgBox TypeName (Foo ()) Это отображает строку VBScriptTypeInfo. Зачем? Возвращаясь меня из функции (автономный, а не внутри класса), кажется, возвращает корректный объект: IsObject (Foo ()) возвращает True; (Foo () Является ли Nothing) возвращает значение False Можем ли мы разработать Возвращенный меня объект каким-либо образом, чтобы сделать его полезным?
AutomatedChaos
6

голосов
3

ответ
5.6k

Просмотры

Есть ли Unicode символ для Superscript запятой?

Несмотря на то, что делает перевод на видео YouTube (переводы могут быть только в Unicode, никакая другая разметка не возможно, насколько я знаю), я наткнулся на концентрации Н + в апельсиновом соке. Предполагается, что один раз в десять отрицательному 3,5 моляра. Я хотел бы, чтобы записать его как «1 · 10-3,5 M» (против запятой, переводится на нидерландский). Проблема заключается в том, что я не могу найти надстрочную запятую или даже надстрочный период между всеми 120,520 Юникодом графических символами. Кто-то имеет представление о том, как решить эту проблему?
AutomatedChaos
2

голосов
2

ответ
1.5k

Просмотры

Как уничтожить объекты должным образом, чтобы они не вызывают утечки памяти

Когда я создаю два словаря объектов, ссылающихся друг на друга, они остаются в памяти даже после того, как я поставил их явно ни к чему. Следующий код потребляет> 1 Гб памяти дима I Для я = 1 до 100000 утечки Следующего Sub утечки дима а, б положат а = CreateObject ( «scripting.dictionary») множество В = CreateObject ( «scripting.dictionary») a.Add "dict1", б b.Add "dict2", множество а = Nothing Set б = Nothing End Sub Это не связано с какой-то мусорный сбора (VBScript не делает этого). Доказательство: когда я изменяю a.Add «dict1», б a.Add «dict1», «Foo» и «b.Add dict2», а к a.Add «dict2», «бар» в памяти остается потребление в пределах разумного пределы. Кстати, это также происходит, когда словарь ссылается на себя:
AutomatedChaos
6

голосов
1

ответ
1.5k

Просмотры

Writing test results back to the TestContext with an Excel WorkSheet as DataSource

У нас есть много тестов, где тестовые данные хранятся в Excel. Я создал testmethods где листы Excel, подключенные как DataSource к TestContext. По соображениям удобства, я хочу, чтобы обновить таблицы Excel с результатом тестов, так что легко увидеть, где данные (или система) является неправильным. Вещи, которые я пробовал: Записав его непосредственно к TestContext.DataRow: TestContext.DataRow.BeginEdit (); TestContext.DataRow [ "Результат"] = "изменение"; TestContext.DataRow.EndEdit (); TestContext.DataRow.AcceptChanges (); Результат: проходит, но никакие строки не обновляются в моем файле Excel. . Обновление его через DataConnection: строка currentRow = TestContext.DataRow [ "RowId"] ToString (); System.Data.Common.DbCommand CMD = TestContext.DataConnection.CreateCommand (); cmd.CommandText = String.Format (» Возможно, кто-то сделал это раньше успешно? Или кто-то есть намек, где я мог бы быть неправильно?
AutomatedChaos
4

голосов
2

ответ
3.1k

Просмотры

Повторное использование SpecFlow шаги в другом проекте в том же растворе,

Что такое лучший способ повторного использования SpecFlow Учитывая / когда / Then шаги? Я понял, три пути со всеми специфическими преимуществами и недостатками, но я не уверен, что это лучший способ. У меня есть два проекта в одном решении Projecta: [Связывание] BookSteps общественного класса: StepsBase {[С учетом (@ «следующие книги:»)] общественным недействительным GivenTheFollowingBooks (таблица таблица) {// ...}} Я могу просто наследовать мой шаги, как это: ProjectB: [Связывание] общественный класс BookStepsReference: ProjectA.BookSteps {} Это работает и требует меньше работы. К сожалению, это ломает IntelliSense бонусных файлов: Шаги остаться фиолетовыми в художественных файлах ProjectB. Я могу наследовать и создать метод с той же подписью: ProjectB: [Связывание] BookStepsReference общественного класса: ProjectA.BookSteps {[С учетом (@ «следующие книги:» )] Общественная недействительный GivenTheFollowingBooksReference (таблица таблица) {base.GivenTheFollowingBooks (таблица); }} Это ломает, когда я пытаюсь запустить тест, потому что автоматически генерируемые шаги функции видит два метода с заданным атрибутом «следующими книгами:» и бросает неоднозначное ссылочное исключение. Я делаю частный объект, который ссылается на обязательные этапы от проекта А: ProjectB: [Binding] общественного класса BookStepsReference {частные ProjectA.BookSteps _bookSteps = новые ProjectA.BookSteps (); [С учетом (@ "следующие книги:")] общественным недействительным GivenTheFollowingBooks (таблица таблица) {_bookSteps.GivenTheFollowingBooks (таблица); }} Это работает, а также применяет правильные IntelliSense на ступеньках Feature файла. Но когда я хочу отладить мои шаги, Я получаю внешний COM исключение на инициализации объекта _baseSteps, вероятно, вызванной библиотекой SpecFlow, что видит двойную Binding атрибута. Последний вариант, как я работаю прямо сейчас, но я хотел бы знать, если другие создали лучший способ повторного использования шагов от других проектов.
AutomatedChaos
2

голосов
1

ответ
836

Просмотры

Запуск SpecFlow сценарий из кода

Я пытаюсь запустить сценарий SpecFlow из кода, а не через Test Explorer, или в командной строке. Кто-то удалось это сделать? Из сценария, я могу извлечь имя метода и метода испытаний с помощью рекурсии, но я не могу запустить этот метод сценария. Это, кажется, нуждается в надлежащей инициализации и демонтажа, но я could't удается это сделать. Моя первая мысль была использовать класс TechTalk.SpecFlow.TestRunner, но это не похоже, способ выбора сценария. EDIT, почему я хочу сделать это: Мы хотим запустить конкретные сценарии из TFS. Это очень громоздкое для подключения TestMethods к WorkItems в TFS, потому что: Вы можете назначить только один TestMethod к одному WorkItem Для каждого WorkItem вы должны искать имя методы, с самим по себе являются хлопоты, потому что список очень длинный с большим количеством specflow сценариев. Когда ваш сценарий specflow получает другое название (которое случается много), TFS не может найти правильный метод больше Specflow Сценарий Контуры получить практически непригодным для использования, в то время как они являются очень мощным. Я хочу, чтобы создать механизм, в котором каждый автоматизированный WorkItem получает один и тот же метод, назначенный. Этот метод извлекает WorkItem идентификатор и поиск и выполняет сценарий (ы) с помощью этого WorkItem помеченного.
AutomatedChaos
2

голосов
3

ответ
2.3k

Просмотры

Получить путь от художественного файла SpecFlow в стадии определения

Можно ли получить путь художественного файла SpecFlow во время выполнения в стадии определения? Отрывок: [Принимая во внимание (@ «Некоторое данное утверждение»)] общественный пустота GivenSomeGivenStatement () {вар featureFilePath = // Получает путь к файлу признак // который выполняет этот шаг. } Контекст: Мы тестирование баз данных и запросы. Источник данных создается в файлах Excel и .SQL файлов (для проверки запросов). Эти исходные данные являются большими массивами данных, не представляется возможными поместить в функции файлы самостоятельно или использовать расширение SpecFlow.Plus.Excel. Для того, чтобы сохранить данные, близкие к файлу функций, мы хотим, чтобы эти данные в той же папке, что и сама особенность файл. Для достижения этой цели нам нужен путь к этому файлу особенность, поэтому у нас есть путь к Testdata.
AutomatedChaos
2

голосов
3

ответ
385

Просмотры

Transform a worksheet to an array containing only strings

Мне нужно, чтобы извлечь данные из листа первенствовать в массив, который будет использоваться в приложении, которое использует VBScript в качестве языка сценариев (Quick Test Professional). Мы можем использовать следующий код для этого: 'WS должен быть объектом типа Worksheet Public Function GetArrayFromWorksheet (ByRef WS) GetArrayFromWorksheet = ws.UsedRange.Value End Function туАггау = GetArrayFromWorksheet (myWorksheet) MsgBox "значение ячейки С2 =" & туАггау (2, 3) все красиво и хорошо, но, к сожалению, массив, который получает возвращается не только содержать буквенные текстовые строки, но и примитивы типа дата, целое число, двойной и т.д. Это произошло несколько раз, что эти данные трансформировался. [Править] Пример: при входе = NOW () в клетке и установить ячейку форматирования чч: мм делает отображаемое значение 17:45, описанный выше метод Retuns переменную типа двойной и значение, как 41194.7400990741 следующее решение работало лучше: я могу получить необработанный текст из ячейки, используя свойство .text, но они работают только на одной клетке, а не на диапазон ячеек , Я не могу сделать это сразу для массива, как я мог с собственностью .Value, так что я должен заполнить массив одной ячейки в то время: Public Function GetArrayFromWorksheet_2 (ByRef WS) Dim диапазон, myArr (), строка, столбец Set Диапазон = ws.UsedRange 'построить новый массив с строк / столбцов считаются UpperBound ReDim myArr (range.rows.count, range.columns.count) для ряда = от 1 до range.rows.count окра = 1 до range.columns .count myArr (строка, столбец) = range.cells (строка, столбец) .text Next Next GetArrayFromWorksheet_2 = myArr End Function Но уч ... вложенная цикл. И да, на больших листах имеется значительное падение производительности заметно. Знает ли кто-то лучший способ сделать это?
AutomatedChaos
3

голосов
1

ответ
962

Просмотры

Получить полный источник фактической HTML-страницу, включая фрейм

Для нашей функциональной автоматизации тестирования мы используем QTP с WebTest Plugin. У меня есть контроль над DOM (но не в легкой форме) и может использовать VBScript и частично Javascript, чтобы найти решение. Всякий раз, когда мы сталкиваемся с ошибкой во время теста я хотел бы, чтобы захватить полный исходный код страницы HTML в тот момент. Позже, когда мы инспектирование ошибку из наших отчетов, мы можем увидеть, что произошло и как DOM выглядел в этот момент. Поэтому я смотрю на есть возможности, чтобы захватить этот источник. Обычно я делал это с HtmlSource = браузер ( "micClass: = Браузер") страница ( "micClass: = Page"). Object.documentElement.outerHTML или HtmlSource = браузер ( "micClass: = Браузер"). Страница ( "micClass.: = Page «). Object.getElementsByTagName (» HTML ") (0) .innerHTML к сожалению, это будет только захватить полное содержание тега фреймов, и кадры, но не фактическое содержание, которое находится в кадрах. (Классические кадры здесь, а не IFrames) Теперь я хотел бы способ, чтобы захватить полный исходный код DOM в режиме реального времени, в том числе содержания в фреймовых. И я хотел бы их в правильном порядке и месте, так же, как появляется источник в представлении HTML в Developer Tool IE. Кто-нибудь есть идеи, как я мог бы управлять этим?
AutomatedChaos
3

голосов
1

ответ
1.4k

Просмотры

Coded UI WebTest, набранные символы иногда опускается в полях редактирования

** POST ОБНОВЛЕНО ** Для нашей системы и интеграции тестов на среде Microsoft Dynamics, мы используем Visual Studio 2010 Coded UI. Я неопытный пользователь Visual Studio, но есть опыт работы с автоматизацией тестирования. Всякий раз, когда VS-кодированный-UI-тест ввод текста в окнах редактирования, есть изменения, что один из символов, который должен быть набран опущено. Поле адреса, как Беверли-Хиллз 90210 легко может стать Беверли бед 90210, разбивая мои тесты. Это происходит вокруг 1 в 200 символов (догадка,). Кто-то сталкивался с этим раньше? А где может проблема быть расположена по адресу: скорость Тип VS, Разбитое драйвер клавиатуры, икота браузера, так что не может получить ввод текста правильно, что-то еще? И есть ли возможность снизить скорость набора текста на тест-драйвер в VS кодированной ш? UPDATE, 2012-05-24: До сих пор не нашли решения. Я использую в настоящее время работа вокруг, которые уменьшает изменение неудачи, но это еще не идеально. Работа вокруг кода (да, она грязная): // помещает этот метод в базовый классе или легком компонент, доступный защищаемой ничтожной ExecuteWithRetry (метод действий, внутр maxRetryCount = 2) {попробуйте {метод (); } Задвижка (исключение) {если (maxRetryCount> 0) {ExecuteWithRetry (метод, maxRetryCount - 1); } Еще {бросать; }}} Всякий раз, когда я использую кусок кода, где установить текстовое поле, я называю это с помощью этого метода: UIMap.SetUserfieldsParams.EnterAddress = @ «555 Sunset Boulevard»; UIMap.SetUserfieldsParams.EnterZIP = @ "90210"; ExecuteWithRetry (UIMap.SetUserfields); UPDATE, 2012-06-18: Это, кажется, вызвано олицетворением мы используем. Зарегистрированного пользователя на нашем веб-приложения непосредственно извлекаются из сервера AD по имени пользователя, который начал IE. Начиная IE через перевоплощение, мы можем сделать наши тесты с другими пользователями без (вручную) выйти и войти на в Windows. Мы используем олицетворение с помощью Process.Start (ProcessStartInfo startInfo) в пространстве имен System.Diagnostics.Process
AutomatedChaos
2

голосов
2

ответ
341

Просмотры

What is the fastest way to see if an element contains a child element?

У меня есть IWebElement (а Див), который содержит дочерний элемент половину времени. Я хочу, чтобы увидеть, если он содержит дочерний элемент, и если да, то я хочу, чтобы захватить его. Я делаю что-то вроде этого: IWebElement FirstChild; попробуйте {FirstChild = divElement.FindElement (By.XPath ( "*")); } Задвижка (NoSuchElementException е) {// поймать и обработки ...} Но это медленно на три части: 1. Использование By.XPath ( «*») 2. FindElement что медленно в случае, если элемент не существует 3. попробовать / поймать более медленный механизм, я бы скорее хочу возвращенное булево на существующий из пункта Как я могу ускорить этот способ обнаружения дочерних элементов? EDIT: Для уточнения: Тест я совершаю работаю на сетках с дивами, типичная сетка 4 х 16, поэтому 64 полеев. Я хочу, чтобы превратить эту сетку в DataTable, чтобы сравнить его с ожидаемым результатом. Захват этих полей к DataTable работает в 22 секунд в общей сложности. Он не выполняет очень плохо, но я хотел бы, чтобы сбрить эти драгоценные секунды. UPDATE: мне удалось сделать это путем захвата сетки с HTML Agility Pack. К сожалению (всегда есть что-то), то значения входных элементов не могут быть захвачены, потому что они динамически установлены. В качестве решения я бы позволил ГАПАМ вернуть Идентификаторы входных элементов и захват значения с FindElement (By.Id (inputId)), которая является невероятно быстро по сравнению с другими методами отбора Селена. Чтобы сохранить Короче говоря: мне удалось сократить время захвата от около 22 секунд до менее чем за 3 секунды, повышение производительности более чем на 600%. UPDATE: мне удалось сделать это путем захвата сетки с HTML Agility Pack. К сожалению (всегда есть что-то), то значения входных элементов не могут быть захвачены, потому что они динамически установлены. В качестве решения я бы позволил ГАПАМ вернуть Идентификаторы входных элементов и захват значения с FindElement (By.Id (inputId)), которая является невероятно быстро по сравнению с другими методами отбора Селена. Чтобы сохранить Короче говоря: мне удалось сократить время захвата от около 22 секунд до менее чем за 3 секунды, повышение производительности более чем на 600%. UPDATE: мне удалось сделать это путем захвата сетки с HTML Agility Pack. К сожалению (всегда есть что-то), то значения входных элементов не могут быть захвачены, потому что они динамически установлены. В качестве решения я бы позволил ГАПАМ вернуть Идентификаторы входных элементов и захват значения с FindElement (By.Id (inputId)), которая является невероятно быстро по сравнению с другими методами отбора Селена. Чтобы сохранить Короче говоря: мне удалось сократить время захвата от около 22 секунд до менее чем за 3 секунды, повышение производительности более чем на 600%. d пусть ГАП вернуть Идентификаторы входных элементов и захват значения с FindElement (By.Id (inputId)), которая является невероятно быстро по сравнению с другими методами отбора Селена. Чтобы сохранить Короче говоря: мне удалось сократить время захвата от около 22 секунд до менее чем за 3 секунды, повышение производительности более чем на 600%. d пусть ГАП вернуть Идентификаторы входных элементов и захват значения с FindElement (By.Id (inputId)), которая является невероятно быстро по сравнению с другими методами отбора Селена. Чтобы сохранить Короче говоря: мне удалось сократить время захвата от около 22 секунд до менее чем за 3 секунды, повышение производительности более чем на 600%.
AutomatedChaos
3

голосов
2

ответ
2.9k

Просмотры

Где можно найти хорошие ссылки VS Coded UI? [закрыто]

Исходя из WinRunner, Quick Test Professional и селена, он удивлён, что меня там не так много, чтобы найти в Интернете о тестировании VS Coded UI для стандартных ресурсов MSDN за исключением. Правда там не много хороших ссылок, блоги или форумы по этой теме или я использую Google неправильный путь? Некоторые из моих найденных ресурсов: Блог RBurnham MSDN Visual Studio UI Automation Тестирование форума Хорошая попытка, но только две старые записи в блоге Гаутама Goenka блог (MSDN снова) Visual Studio Team Test Team Блог Другие нашли те: автоматизации тестирования с помощью Visual Studio 2010 Coded UI или MSDNs Absolute Эфирные стартеры Руководство (KMoraz) Mentional ссылки в этой статье: Индекс Anutthara Bharadwaj Блог Balachander Г. Субраманьям Singhal Блог VSTS белорусских рублей Качество Инструменты Команда Блог Содержание для кодированной теста пользовательского интерфейса на Mathew Aniyan»
AutomatedChaos
2

голосов
2

ответ
216

Просмотры

MSBuild argument to let pickles import test results causes Illegal path error

Мы используем SpecFlow применять практику и соленья BDD для создания документации. Наша сборка выглядит следующим образом: Построить Deploy тест (с использованием VSTest) Сформировать документацию (с использованием соленья) Генерировать шаг документации приходит после того, как на стадии тестирования, поэтому мы можем включить TestResults в соленье. Я хочу использовать маринады как шаг сборки, так что я могу управлять версиями соленья использовать и дополнительные параметры в каждом решении. Построить шаг Visual Studio в TFS2017 выглядит следующим образом: / т: DocumentationGeneration / р: Pickles_Generate = True / р: Pickles_DocumentationFormat = DHTML /p:Pickles_ResultsFile="$(build.sourcesdirectory)/TestResults/*.trx»/ р: Pickles_OutputDirectory = «$ (build.artifactstagingdirectory) / PickledDocumentation» [некоторые более общие параметры, которые не имеют отношения здесь] Когда я выше, я получаю " только TestResults не найдены, потому что TestResults находятся в не предсказательной формате: USERNAME_SERVERNAME1234 2017-02-02 09_09_09.trx Я попытался посмотреть в генерируя общее имя для .trx файла, но VSTest не поддерживает пользовательские имена. Кто-нибудь еще столкнулся с этой проблемой, и есть хороший подход решить эту проблему? только TestResults не найдены, потому что TestResults находятся в не предсказательной формате: USERNAME_SERVERNAME1234 2017-02-02 09_09_09.trx Я попытался посмотреть в генерируя общее имя для .trx файла, но VSTest не поддерживает пользовательские имена. Кто-нибудь еще столкнулся с этой проблемой, и есть хороший подход решить эту проблему?
AutomatedChaos
2

голосов
0

ответ
58

Просмотры

Validate dtsx packages outside Visual Studio

Справочная информация: Наше приложение разделяется на проект базы данных и проекта SSIS. Прямо сейчас, это может произойти, что изменение проталкивается по проекту БД (например, изменение имени столбца), что не останется незамеченным до момента выполнения, когда пакет не удается, что пытается использовать этот столбец. В рамках нашей интеграционной сборки, я хочу, чтобы проверить пакеты в проекте SSIS против базы данных, поэтому мы можем обнаружить такого рода ошибки ранее. Вопрос: Как я могу проверить наши dtsx пакетов, так что я могу обнаружить ошибки в конструкции во время сборки интеграции? Preferred решение: я хочу иметь список ошибок для всех пакетов, не соответствующих объектам базы данных, как я вижу, когда я открываю пакет в режиме конструктора: Ошибка 4 Ошибка проверки. My_Package_Name [40]: SSIS Код ошибки DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80040E14. Запись OLE DB доступна. Источник: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Описание: "Заявление (ы) не могут быть получены.". Запись OLE DB доступна. Источник: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Описание: "Неверное имя столбца" MyRenamedColumn". My_Package_Name.dtsx 0 0 В идеале: запуск «Дизайн Предупреждения сканера» из командной строки и захват ошибок и предупреждений. Уже пробовал: Запуск dtexec.exe из командной строки. Но поскольку мы используем подключение менеджер, а не в пакете-переменные для соединения с базой данных, DTExec не работает без ошибок. Проверка пакетов программно с помощью метода Validate () на упаковке в качестве объекта Microsoft.SqlServer.Dts.Runtime.Package. Это всегда будет иметь успех (даже на пакетах, которые используют неисправные столбцы). Добавление соединения SQLSERVER вручную путем сбора Connections не помогает.
AutomatedChaos
2

голосов
1

ответ
111

Просмотры

Using FluentAssertions to compare two collections of dictionaries that are containing different types

From our database, we querying sets of records that are put in a collection of dynamic objects of type ExpandoObject that implements IDictionary on the fields. These are the actual values. From our SpecFlow BDD tests we get a collection of TableRows that implements IDictionary. These are our expected values. With FluentAssertions we'd like to test on equivalency on the whole collection with actual.Should().BeEquivalentTo(expected). Unfortunately, this won't work, because of the mismatch in types when the actual values are not of type string. We could use actual.Should().BeEquivalentTo(expected, options => options.WithAutoConversion()), but this will make the whole actual set a collection of IDictionary which is not useful for comparing dates. I assembled a testcase that will show the same issue: var expected = new List(); expected.Add(new Dictionary { {"Name", "Moon Inc."}, {"Number", "42"}, {"Date", "2018-12-31"} }); var actual = new List(); dynamic eo = new ExpandoObject(); eo.Name = "Moon Inc."; eo.Number = 42; eo.Date = new DateTime(2018, 12, 31); actual.Add(eo); actual.Should().BeEquivalentTo(expected, options => options); /* This throws: NUnit.Framework.AssertionException: Expected item[0][Number] to be System.String, but found System.Int32. Expected item[0][Date] to be System.String, but found System.DateTime. */ actual.Should().BeEquivalentTo(expected, options => options.WithAutoConversion()); /* This throws: NUnit.Framework.AssertionException: Expected item[0][Date] to be "2018-12-31" with a length of 10, but "31-12-2018 0:00:00" has a length of 18. /* I tried to make the receiving type dynamic in a using method like: actual.Should().BeEquivalentTo(expected, options => options .Using(ctx => ctx.Subject.Should().Be(ctx.Expectation)).WhenTypeIs() .Using(ctx => ctx.Subject.Should().Be(ctx.Expectation)).WhenTypeIs()); /* NUnit.Framework.AssertionException: Expected item[0][Number] to be System.String, but found System.Int32. Expected item[0][Date] to be System.String, but found System.DateTime. */ Parsing both sides to a DateTime and using autoconversion does also not work because the actual type is not seen as a DateTime but as string: actual.Should().BeEquivalentTo(expected, options => options .Using( ctx => DateTime.ParseExact(ctx.Subject, "yyy-MM-dd", CultureInfo.InvariantCulture) .Should().Be(DateTime.ParseExact(ctx.Expectation, "yyy-MM-dd", CultureInfo.InvariantCulture))) .WhenTypeIs() .WithAutoConversion()); /* NUnit.Framework.AssertionException: Expected item[0][Date] to be "2018-12-31" with a length of 10, but "31-12-2018 0:00:00" has a length of 18. */ Is there any way with FluentAssertions to achieve this?
AutomatedChaos
7

голосов
2

ответ
4.5k

Просмотры

Можно ли получить экземпляр строки объекта .Net в VBScript?

В VBScript, вы можете использовать некоторые .net классы с помощью автоматизации COM. Это очень удобно, когда вы хотите использовать динамические массивы, списки, очереди и т.д. Было бы хорошо, если бы я мог использовать строки как объекты, так что я мог сделать все фантазии струнный вещи с ним, но всякий раз, когда я прохожу строку из другого объекта, это видно по VBScript, как буквенная строка, а не как объект строки: установить S = CreateObject ( «System.Text.StringBuilder») s.Append_3 «Я люблю сроки Мне нравится свистящий звук, который они делают, как они летят.» "Это дает мне символьной строки MsgBox s.ToString текст = s.ToString Но, к сожалению, это не будет работать MsgBox s.ToString.Length Set stringRef = s.ToString также создает строку как COM-объект не будет работать: Set s = CreateObject ( "System.String") "Нет. Есть ли кто-то, кто сделал управлять этим,
AutomatedChaos
3

голосов
1

ответ
2.3k

Просмотры

Как найти и настроить необходимые параметры для SSIS пакетов для выполнения их из кода

Я хочу, чтобы выполнить SSIS пакеты, которые находятся на сервере из C # код. Я пытаюсь получить этот ход: общественный аннулируются Execute () {строка FOLDERNAME = «MyFolder»; Строка Projectname = "MyProject"; Строка имя_сервер = @ "MYSERVER \ РЕГИОН"; Строка ConnectionString = string.Format ( "Источник данных = {0}; Initial Catalog = MSDB; Integrated Security = SSPI;", ServerName); используя (SqlConnection SqlConnection = новый SqlConnection (ConnectionString)) {IntegrationServices integrationServices = новые IntegrationServices (SqlConnection); Каталог = integrationServices.Catalogs [ "SSISDB"]; CatalogFolder catalogFolder = catalog.Folders [FolderName]; PackageInfo пакет = catalogFolder.Projects [Projectname] .Packages [PackageName]; PackageInfo. ExecutionValueParameterSet batchIdParameter = новый PackageInfo.ExecutionValueParameterSet {. ObjectType = package.Parameters [ "BatchId"] ObjectType, ИмяПараметра = "BatchId", ParameterValue = package.Parameters [ "BatchId"] DesignDefaultValue.}; PackageInfo.ExecutionValueParameterSet dateIdParameter = новый PackageInfo.ExecutionValueParameterSet {. ObjectType = package.Parameters [ "DateId"] ObjectType, ИмяПараметра = "DateId", ParameterValue = package.Parameters [ "DateId"] DesignDefaultValue.}; Коллекция setValueParameters = новая коллекция (); setValueParameters.Add (batchIdParameter); setValueParameters.Add (dateIdParameter); длинный executionId = пакет. Execute (ложный, пустой, setValueParameters); }} Когда я запускаю этот код, я получаю сообщение об ошибке: System.Data.SqlClient.SqlException: Для выполнения этого пакета, вам необходимо указать значения для требуемых параметров. (Оба параметра действительно есть DesignDefaultValue) Но когда я смотрю в пакет с помощью MS SQL Server Management Studio, я вижу только два параметра BatchId и DateId как требуемых параметров по странице Параметры> вкладка Параметры. Почему пакет не будет работать? Я вижу только два параметра BatchId и DateId в качестве требуемых параметров по странице Параметры> вкладка Параметры. Почему пакет не будет работать? Я вижу только два параметра BatchId и DateId в качестве требуемых параметров по странице Параметры> вкладка Параметры. Почему пакет не будет работать?
AutomatedChaos

Связанные вопросы