Автор Тема: Как перекрыть переменную?  (Прочитано 265 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vitaliy4us [?]

  • Новичок
  • *
  • Сообщений: 139
  • Репутация: 3
    • Награды
Как перекрыть переменную?
« Создано: Апрель 20, 2017, 15:51:38 »
1. Имеется отдельный au3 файл с константами и функциями, используемыми всеми тестами для автоматического тестирования.
2. В этом файле имеется глобальная переменная Global $log, указывающая на файл, в который все тесты пишут логи.
3. Но кроме того, тесты разбиты на suits. Каждый тестовый suit запускается из своего au3 файла, в котором создается с целью перекрытия глобальной переменной $log локальная переменная с тем же именем. Подразумевается, что теперь каждый suit будет писать в свой лог.
4. Но нет, логи упорно продолжают писаться в файл, обозначенный глобальной переменной.
5. OK. Меняю Global на Local и Local на Global - то же самое, как в принципе и в любой их комбинации. В любом случае, логи упорно пишутся в самый первый файл. А все оттого, что именно в нем прописана функция записи в лог. Если переменную $log убрать из этого файла совсем, то не будут запускаться каждый тест по отдельности, а только через suit.  Как бы сделать так, чтобы при запуске из suit.au3 писалось в один файл, а при запуске каждого теста отдельно - в другой?

Русское сообщество AutoIt

Как перекрыть переменную?
« Отправлен: Апрель 20, 2017, 15:51:38 »

Оффлайн Alofa [?]

  • Скриптер
  • ****
  • Сообщений: 1076
  • Репутация: 146
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Как перекрыть переменную?
« Ответ #1, Отправлен: Апрель 20, 2017, 16:07:19 »
... Меняю Global на Local и Local на Global - то же самое, как в принципе и в любой их комбинации.
Может просто переименуете Глобальную переменную или для каждого .au3 используйте свою.
Или изучите такие комбинации:
Код: AutoIt [Выделить]
Global $log = 'Да'

_LogWrite1('Нет')
_LogWrite2('Еще Нет')
MsgBox(262144, 'В итоге:', $log)

Func _LogWrite1($log1)
    MsgBox(262144, 'Переменная передана в функцию:', $log1)
    MsgBox(262144, 'Глобальная переменная:', $log)
    Local $log = 'Я передумал'
    MsgBox(262144, 'Переменная объявлена в функции:', $log)
EndFunc

Func _LogWrite2($log)
    MsgBox(262144, '_LogWrite2()', $log)
EndFunc

« Последнее редактирование: Апрель 20, 2017, 16:20:22 от Alofa »

Онлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2129
  • Репутация: 459
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Как перекрыть переменную?
« Ответ #2, Отправлен: Апрель 20, 2017, 16:27:01 »
Переменные объявляются 1 раз, например Global $log = 'log.txt'
Любая функция может переписать значение, но не нужно заново объявлять, просто присваиваете $log = 'log_1.txt'

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3332
  • Репутация: 875
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как перекрыть переменную?
« Ответ #3, Отправлен: Апрель 20, 2017, 16:45:40 »
vitaliy4us
Цитировать
чтобы при запуске из suit.au3 писалось в один файл, а при запуске каждого теста отдельно - в другой
Я так и не понял, что есть "тест" - это функция или au3-скрипт? Если скрипт, то как вы его вызываете из suit?

Русское сообщество AutoIt

Re: Как перекрыть переменную?
« Ответ #3 Отправлен: Апрель 20, 2017, 16:45:40 »

Оффлайн vitaliy4us [?]

  • Новичок
  • *
  • Сообщений: 139

  • Автор темы
  • Репутация: 3
    • Награды
Re: Как перекрыть переменную?
« Ответ #4, Отправлен: Апрель 20, 2017, 18:16:22 »
vitaliy4us
Цитировать
чтобы при запуске из suit.au3 писалось в один файл, а при запуске каждого теста отдельно - в другой
Я так и не понял, что есть "тест" - это функция или au3-скрипт? Если скрипт, то как вы его вызываете из suit?
Да, тут собака и зарыта. Тест - это au3-скрипт. Запускаю функцией Run. Хотелось бы не создавать для него еще и параметры запуска, а потом использовать их в скрипте, а просто объявить переменную в скрипте suit, который представляет из себя просто набор функций Run для разных тестов, и чтобы эта переменная перекрыла значение глобальной переменной $log, которую каждый из скриптов импортирует вместе с файлом, в котором собраны все функции для всех скриптов.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3332
  • Репутация: 875
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как перекрыть переменную?
« Ответ #5, Отправлен: Апрель 20, 2017, 18:42:57 »
vitaliy4us
Цитировать
Запускаю функцией Run
В этом случае запущенный скрипт ничего не будет знать о переменных скрипта, его запустившего.
Цитировать
Хотелось бы не создавать для него еще и параметры запуска
При таком способе запуска всё равно придётся как-то сообщать скрипту, что он запущен из suit, а в самом скрипте делать проверку и, при необходимости, изменять путь.

Могу предложить такой вариант. Добавляете в самое начало общей UDF директиву
Код: AutoIt [Выделить]
Теперь подключаете UDF в suit перед тестами. Таким образом, все тесты будут писать в один лог, т.к. общая UDF в них уже подключаться не будет. А при запуске тестов отдельно, каждый будет вести свой отчёт
Код: AutoIt [Выделить]
; содержимое suit
#include "common.au3" ; общая UDF с глобальной $log
#include "test1.au3"
ConsoleWrite("test1 выполнен")
#include "test2.au3"
ConsoleWrite("test2 выполнен")
#include "test3.au3"
ConsoleWrite("test3 выполнен")

« Последнее редактирование: Апрель 21, 2017, 01:10:44 от InnI »

Оффлайн vitaliy4us [?]

  • Новичок
  • *
  • Сообщений: 139

  • Автор темы
  • Репутация: 3
    • Награды
Re: Как перекрыть переменную?
« Ответ #6, Отправлен: Апрель 21, 2017, 11:03:54 »
vitaliy4us
Цитировать
Запускаю функцией Run
В этом случае запущенный скрипт ничего не будет знать о переменных скрипта, его запустившего.
Цитировать
Хотелось бы не создавать для него еще и параметры запуска
При таком способе запуска всё равно придётся как-то сообщать скрипту, что он запущен из suit, а в самом скрипте делать проверку и, при необходимости, изменять путь.

Могу предложить такой вариант. Добавляете в самое начало общей UDF директиву
Код: AutoIt [Выделить]
Теперь подключаете UDF в suit перед тестами. Таким образом, все тесты будут писать в один лог, т.к. общая UDF в них уже подключаться не будет. А при запуске тестов отдельно, каждый будет вести свой отчёт
Код: AutoIt [Выделить]
; содержимое suit
#include "common.au3" ; общая UDF с глобальной $log
#include "test1.au3"
ConsoleWrite("test1 выполнен")
#include "test2.au3"
ConsoleWrite("test2 выполнен")
#include "test3.au3"
ConsoleWrite("test3 выполнен")

Спасибо, именно так работает как нужно.

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3817
  • Репутация: 950
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Как перекрыть переменную?
« Ответ #7, Отправлен: Апрель 21, 2017, 17:18:16 »
vitaliy4us

ПредупреждениеЗа нарушение общих правил (пункт В.2):
Цитировать
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.

Скорблю и помню.




Русское сообщество AutoIt

Re: Как перекрыть переменную?
« Ответ #7 Отправлен: Апрель 21, 2017, 17:18:16 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
14 Ответов
4940 Просмотров
Последний ответ Июль 16, 2012, 01:49:27
от Mancoffee
4 Ответов
2524 Просмотров
Последний ответ Август 04, 2012, 16:13:58
от general66
2 Ответов
2593 Просмотров
Последний ответ Сентябрь 14, 2012, 02:09:39
от agikon
3 Ответов
1655 Просмотров
Последний ответ Декабрь 14, 2012, 02:30:35
от agikon
7 Ответов
4351 Просмотров
Последний ответ Февраль 17, 2013, 23:35:45
от madmasles
4 Ответов
1388 Просмотров
Последний ответ Декабрь 23, 2013, 23:12:32
от madmasles
3 Ответов
892 Просмотров
Последний ответ Август 03, 2014, 19:11:10
от CreatoR
1 Ответов
577 Просмотров
Последний ответ Сентябрь 15, 2014, 17:03:18
от oesoes
5 Ответов
1211 Просмотров
Последний ответ Март 09, 2015, 19:15:28
от gloss
2 Ответов
404 Просмотров
Последний ответ Июль 09, 2017, 19:53:58
от Garrett