В первых двух уроках (How to use RobotFramework With SeleniumLibrary и How to use RobotFramework Part 2), Метью Балтел показал нам как использовать Robot Framework для тестирования ваших веб приложений. К сожалению, Robot Framework не всегда дает вам средства для тестирования того, что вы хотели бы протестировать. В качестве компенсации этого, Robot Framework дает нам возможность создать собственные тестовые библиотеки.
В этом уроке нашей целью будет научиться создавать такие библиотеки и использовать их в ваших тестах. В уроке есть только вариант с использованием Python для создания библиотек, но, в любом случае, их можно внедрять, используя Java если вы работаете с Jython. В этом уроке я буду опираться на то, что вы хоть немного знакомы с Python. Если это не так, Robot Frameworks дает отличный урок, который поможет вам начать свое знакомство с Python. Советую держать его неподалеку, чтобы вы могли понимать все что происходит в ходе этого руководства.
И в завершение, хочу сказать, что если вы хотите получить еще несколько подсказок на эту тему, изучите Robot Framework, руководство пользователя.
Давайте начнем
В первую очередь, вам необходимо создать класс или модуль python. Создавая свой файл, вы должны помнить, что его название будет также названием вашей библиотеки. Если вы хотите создать класс, я рекомендую дать вашему классу такое же название как и файлу, чтобы вы могли пропустить название модуля при импорте вашей библиотеки.Если вы все же хотите дать им разные названия, вам необходимо импортировать moduleName.MyLibName.
Теперь, когда у вас есть файл, вам следует задать две переменные, чтобы дать информацию Robot Framework. Первая называется ROBOT_LIBRARY_SCOPE. Она используется для того, чтобы «сказать» Robot Framework следует ли ему создавать новые примеры в вашей библиотеке один раз для каждого тестового случая, один раз для одного набора тестов или один раз за все выполнение теста. Значения этих переменных следующие: TEST CASE (по умолчанию), TEST SUITE и GLOBAL.
Вторая: ROBOT_LIBRARY_VERSION (или __version__), определяющая версию вашей библиотеки. (например : 0.1, 1.1.3, 1 … Тут все зависит от того, как вы хотите считать).
Ваш файл должен выглядеть следующим образом:
``` import someusefullib import anotherusefullibclass mylib:
ROBOT_LIBRARY_SCOPE = 'TEST_SUITE'
__version__ = '0.1'
<p>Вы уже создали свою первую библиотеку (Да !), а теперь давайте поможем ей выполнять определенный действия.</p>
<p>Для нашей библиотеки check_mail.py </p>
<p>У нас есть:</p><p>
import imaplib
class check_mail:
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
__version__ = '0.1'
</p><h2>Ключевые слова для Robot Framework </h2>
<p>Для создания ключевых слов, которые можно использовать в ваших наборах тестов, необходимо просто создать новый метод в вашем классе (или модуле). Название этой функции и будет ключевым словом, потребуется только маленькие согласования. Первое, совпадение между названиями метода и ключевыми словами не чувствительно у регистру, а это значит, что “Pwet” и “pwet” будут обращаться к одному и тому же методу в вашей библиотеке (например, pwet). Также, совпадение игнорирует подчеркивание и пробелы, а это значит, что ключевое слово
“Try This” совпадает с “TryThis” и “Try_this”.</p>
<h2>Аргументы</h2>
<p>Если вашей библиотеке необходимы агрументы (для конструктора) вам потребуется всего лишь добавить метод __init__ со всеми необходимыми вам аргументами. В этом случае вам потребуется добавить
их в вашу библиотеку при их импорте.</p>
<p>В случае, когда вашим ключевым словам необходимы аргументы, методы, внедряющие эти ключевые слова используют такие аргументы. Проще всего иметь определенное количество таких аргументов. Вы можете использовать переменное число аргументов, используя синтаксис python :</p><p>
def many_args(*args):
print args
</p><p>Вы также можете задать
значения по умолчанию для ваших аргументов (не обязательно для всех)</p><p>
def default_arg (arg1, arg2=‘default’):
print arg1, arg2
</p><h2>Ошибки </h2>
<p>Обработка ошибок довольно проста. Статус ключевого слова сообщается благодаря исключениям, что значит, что если ключевое слово попадает на исключение, его возвращаемым значением будет FAIL, а если же оно возвращается нормально, его значением будет PASS.</p>
<p>Более того, типы ошибок и сообщения будут появляться в журналах, отчетах и консоли. Таким образом, при создании своей библиотеки, вы должны дать сообщения об ошибках как можно точнее . Таким образом, вам будет проще определить какая именно часть теста была неуспешной и по какой причине.</p><p>
def check_mail(self, *args):
r, self.item = self.mailbox.search(None, *args)
self.item = self.item[0].split()
if self.item == []:
raise AssertionError(“No mail found”)
</p><p>Этот пример будет вызывать поиск по методу <a href="http://docs.python.org/library/imaplib.html">imaplib</a>. В случае, если он не может найти почту в вашем почтовом ящике (который вы открыли ранее) с аргументами, которые вы указали, вы увидите “Не найдено почты с вашими аргументами” в журнале возвращаемое значение теста будет установлено как «Fail».</p>
<p>Использование вашей новой библиотеки в robot framework</p>
<p>Теперь, когда вы создали свою библиотеку, все что вам следует сделать для использования ее в robot framework, это импортировать ее в часть установок вашего файла:</p>
<p><strong>Library path/to/your/lib.py</strong></p>
<p>Затем, вы можете вызывать ключевые слова так, как если бы они были ключевыми словами robot framework.</p>
<h2>Собираем все вместе </h2>
<p>Вот полный источник check_mail.py:</p><p>
import imaplib
class check_mail:
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
__version__ = '0.1'
def open_mail_box(self, server, user, pwd):
try:
self.mailbox = imaplib.IMAP4(server)
self.mailbox.login(user, pwd)
self.mailbox.select()
except imaplib.IMAP4.error:
raise AssertionError('Could not connect to the mailbox')
def check_mail(self, *args):
r, self.item = self.mailbox.search(None, *args)
self.item = self.item[0].split()
if self.item == []:
raise AssertionError("No mail found")
def close_mailbox(self):
self.mailbox.close()
</p><p>А тестовый случай, с использованием библиотеки, проверяющей присутствует ли новая почта из <a href="mailto:remote@domain.com">remote@domain.com</a> будет выглядеть следующим образом:</p><p>
#Library
Library Lib/check_mail.py
*** Test Cases ***
TC test mail [Documentation]
Open Mail Box server user password
Check Mail UNSEEN FROM “remote@domain.com”
</p>