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

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

Оффлайн vitaliy4us [?]

  • Новичок
  • *
  • Сообщений: 129
  • Репутация: 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 [?]

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

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3221
  • Репутация: 847
    • Награды
  • Версия 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 [?]

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

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

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3221
  • Репутация: 847
    • Награды
  • Версия 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 [?]

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

  • Автор темы
  • Репутация: 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 [?]

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

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


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

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




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

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

 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
4647 Просмотров
Последний ответ Декабрь 23, 2009, 21:54:13
от Medic84
9 Ответов
3991 Просмотров
Последний ответ Апрель 22, 2012, 13:11:09
от Vadimmm0072
14 Ответов
4603 Просмотров
Последний ответ Июль 16, 2012, 01:49:27
от Mancoffee
4 Ответов
2415 Просмотров
Последний ответ Август 04, 2012, 16:13:58
от general66
2 Ответов
2493 Просмотров
Последний ответ Сентябрь 14, 2012, 02:09:39
от agikon
3 Ответов
1585 Просмотров
Последний ответ Декабрь 14, 2012, 02:30:35
от agikon
7 Ответов
4155 Просмотров
Последний ответ Февраль 17, 2013, 23:35:45
от madmasles
4 Ответов
1330 Просмотров
Последний ответ Декабрь 23, 2013, 23:12:32
от madmasles
3 Ответов
841 Просмотров
Последний ответ Август 03, 2014, 19:11:10
от CreatoR
1 Ответов
533 Просмотров
Последний ответ Сентябрь 15, 2014, 17:03:18
от oesoes