По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
С помощью этого руководства вы научитесь писать модульные тесты для функций Python. Но для чего вообще нужно уделять такое внимание модульным тестам? Что ж, когда вы работаете над большими проектами, вам часто приходится обновлять какие-то модули и выполнять перепроектирование кода по мере необходимости. Однако такие изменения могут негативно влиять на другие модули, в которых используется этот обновленный модуль. В некоторых случаях это может нарушить существующую функциональность программы. Как разработчик, вы обязаны протестировать свой программный код с целью убедиться, что все модули в приложении работают должным образом. Модульные тесты позволяют проверять, корректно ли работают маленькие блоки программного кода, и исправлять несоответствия, которые возникают в результате обновлений и перепроектирования. Это руководство поможет вам научиться обращаться с модульными тестами в Python. Здесь вы узнаете, как использовать встроенный в Python модуль  unittest для настройки и запуска модульных тестов, а также для написания тестовых примеров для проверки функций Python. Также вы узнаете, как тестировать функции, которые вызывают исключения.  Давайте начнем! Тестирование в Python – первый этап Мы начнем с того, что определим функцию Python и напишем модульный тест, чтобы проверить, работает ли она должным образом. Для того, чтобы перейти к настройке модульных тестов, рассмотрим простую функцию  is_prime() , которая принимает на вход число и проверяет его на простоту.  import math def is_prime(num):    '''Check if num is prime or not.'''    for i in range(2,int(math.sqrt(num))+1):        if num%i==0:            return False    return True Давайте запустим Python REPL, вызовем функцию  is_prime() , передав ей аргументы, и проверим результаты.  >>> from prime_number import is_prime >>> is_prime(3) True >>> is_prime(5) True >>> is_prime(12) False >>> is_prime(8) False >>> assert is_prime(7) == True Для того, чтобы убедиться, что  is_prime(), возвращает ожидаемое логическое значение, вы также можете использовать конструкцию  assert (см. выше). Если значение, которое вернула функция, отличается от ожидаемого логического значения, то возникнет ошибка  AssertionError . Такое ручное тестирование будет не самым эффективным вариантом, если вы захотите проверить свою функцию на гораздо большем количестве аргументов. У вас есть возможность настроить автоматическое тестирование, которое будет запускать функцию и проверять выходные данные на соответствие тестовым примерам, которые были определены в тестовом наборе.  Как работать с модулем Python  unittest В Python втроен модуль  unittest , с помощью которого можно настраивать автоматические тесты для функций и классов в вашем приложении. Общая процедура для настройки модульных тестов в Python выглядит следующим образом: # .py import unittest from import # all entries within <> are placeholders class TestClass(unittest.TestCase): def test_(self): # check function_to_test def test_(self): # check function_to_test : : : def test_(self): # check function_to_test Фрагмент кода  .py , который приведен выше, выполняет следующее: Импортирует встроенный в Python модуль  unittest . Импортирует функцию Python  , которую необходимо протестировать, из модуля  , в котором она определена.  Создает тестовый класс ( TestClass ), который наследуется от класса  unittest.TestCase . Все тесты, которые должны быть запущены, должны быть определены в качестве методов внутри тестового класса. ?   Примечание : для того, чтобы  unittest определял эти методы как тесты и запускал их, названия этих методов должны начинаться с  test_ . Класс  TestCase из модуля  unittest предоставляет полезные методы с утверждениями для проверки того факта, что тестируемая функция возвращает ожидаемые значения.  Ниже перечислены самые распространенные методы с утверждениями, и некоторые из них мы будем использовать в этом руководстве. Метод Описание assertEqual(expected_value,actual_value) Утверждает, что  expected_value == actual_value assertTrue(result) Утверждает, что  bool(result) это  True assertFalse(result) Утверждает, что  bool(result) это  False assertRaises(exception, function, *args, **kwargs) Утверждает, что  function(*args, **kwargs) вызывает  exception Для того, чтобы запустить эти тесты, мы должны запустить  unittest в качестве основного модуля с помощью следующей команды: $ python -m unittest .py Для запуска  unittest в качестве основного модуля мы можем добавить условие  if __name__=='__main__' . if __name__=='__main__': unittest.main() Добавив if, у нас появится возможность запускать тесты, просто запуская модуль Python, который содержит эти тесты.  $ python .py Как определять тестовые примеры для функций Python В этом разделе мы напишем модульные тесты для функции  is_prime() с помощью уже изученного синтаксиса.  Для того, чтобы протестировать функцию  is_prime() , которая возвращает логическое значение, мы можем воспользоваться методами  assertTrue() и  assertFalse() . Мы определяем четыре метода тестирования в классе  TestPrime , который наследуется от  unittest.TestCase .  import unittest # import the is_prime function from prime_number import is_prime class TestPrime(unittest.TestCase):    def test_two(self):        self.assertTrue(is_prime(2))    def test_five(self):    self.assertTrue(is_prime(5))    def test_nine(self):    self.assertFalse(is_prime(9))    def test_eleven(self):    self.assertTrue(is_prime(11)) if __name__=='__main__': unittest.main() $ python test_prime.py Ниже вывод в виде точки ( . ) говорит нам об успешно выполненном тестировании. Output .... ---------------------------------------------------------------------- Ran 4 tests in 0.001s OK В приведенном выше коде есть четыре метода тестирования. Каждый из этих методов проверяет какие-то определенные входные данные. Вместо этого вы можете определить один метод тестирования, который проверял бы результат для всех четырех входных данных. import unittest from prime_number import is_prime class TestPrime(unittest.TestCase): def test_prime_not_prime(self):        self.assertTrue(is_prime(2))        self.assertTrue(is_prime(5))        self.assertFalse(is_prime(9))        self.assertTrue(is_prime(11)) После того, как мы запустили модуль  test_prime, мы видим, что успешно было выполнено только одно тестирование. Если какой-либо из методов с утверждением выдает  AssertionError , то это значит, что тест завершился неудачно.  $ python test_prime.py Output . ---------------------------------------------------------------------- Ran 1 test in 0.001s OK Как писать модульные тесты для проверки на исключения В предыдущем разделе мы протестировали функцию  is_prime() , передавая в качестве входных данных как простые, так и непростые числа. Если более конкретно, то все входные данные были положительными числами. Мы еще не установили тот факт, что аргументы в вызове функции  is_prime() должны быть целыми положительными числами. Вы можете использовать подсказки при вводе кода для того, чтобы обеспечить соблюдение типов или выкидывать исключения для недопустимых входных данных.  При тестировании функции  is_prime() мы не учли следующее: Если аргумент будет числом с плавающей точкой, то функция  is_prime() также будет работать и возвращать значение  True или  False , что является ошибочным.  Если аргумент будет совершенно другого типа (например, строкой «five» вместо числа 5), то функция выдаст ошибку  TypeError .  Если аргумент будет отрицательным числом, то функция  math.sqrt() выдаст ошибку  ValueError , поскольку квадраты всех действительных чисел (положительных, отрицательных или нуля) всегда неотрицательны. Давайте проверим то, что мы рассмотрели выше, запустив несколько циклов Python REPL.  >>> from prime_number import is_prime >>> is_prime('five') Traceback (most recent call last): File "", line 1, in File "/home/bala/unit-test-1/prime_number.py", line 5, in is_prime for i in range(2,int(math.sqrt(num))+1): TypeError: must be real number, not str >>> is_prime(-10) Traceback (most recent call last): File "", line 1, in File "/home/bala/unit-test-1/prime_number.py", line 5, in is_prime for i in range(2,int(math.sqrt(num))+1): ValueError: math domain error >>> is_prime(2.5) True Как вызвать исключения для недопустимых входных данных Для того, чтобы устранить все недочеты, которые мы обсудили выше, мы проверим значение num , которое используется в вызове функции, и выбросим исключение, если это будет нужно.  Проверяем, является ли  num целым числом. Если является, то переходим к следующей проверке. В противном случае выбрасываем исключение  TypeError . Проверяем, является ли  num отрицательным целым числом. Если является, то выбрасываем исключение  ValueError . Переопределяем функцию, чтобы она также проверяла значение и выбрасывала по мере необходимости исключения. И получаем: import math def is_prime(num):    '''Check if num is prime or not.'''    # raise TypeError for invalid input type    if type(num) != int:        raise TypeError('num is of invalid type')    # raise ValueError for invalid input value    if num < 0:        raise ValueError('Check the value of num; is num a non-negative integer?')    # for valid input, proceed to check if num is prime    for i in range(2,int(math.sqrt(num))+1):        if num%i==0:        return False    return True Теперь, когда мы изменили функцию так, чтобы мы могли выбрасывать исключения  ValueError и  TypeError для недопустимых входных данных, следующий шаг - проверка того, выпадает ли исключение.  Как пользовать методом  assertRaises()   для проверки наличия исключений Давайте добавим в определение  TestPrime методы для проверки того, выпадают ли исключения.  Мы определим методы  test_typeerror_1() и  test_typeerror_2() для проверки исключения  TypeError , и метод  test_valueerror() для проверки исключения  ValueError . ? Для вызова метода  assertRaises() мы можем использовать следующий общий синтаксис: def test_exception(self):    self.assertRaises(exception-name,function-name,args) Мы также можем применить и другой синтаксис, используя менеджер контекста (в этом примере мы будем использовать именно его): def test_exception(self):    with self.assertRaises(exception-name):        function-name(args) Добавив эти методы тестирования, получим: import unittest from prime_number import is_prime class TestPrime(unittest.TestCase):    def test_prime_not_prime(self):        self.assertTrue(is_prime(2))        self.assertTrue(is_prime(5))        self.assertFalse(is_prime(9))        self.assertTrue(is_prime(11))    def test_typeerror_1(self):        with self.assertRaises(TypeError):        is_prime(6.5)    def test_typeerror_2(self):        with self.assertRaises(TypeError):        is_prime('five')    def test_valueerror(self):        with self.assertRaises(ValueError):        is_prime(-4)            if __name__=='__main__': unittest.main() Давайте запустим модуль  test_prime и посмотрим на результат: $ python test_prime.py Output .... ---------------------------------------------------------------------- Ran 4 tests in 0.002s OK Во всех примерах, которые мы успели написать до этого момента, все тесты выполнялись успешно. Давайте изменим один из методов, допустим,  test_typeerror_2() : def test_typeerror_2(self):    with self.assertRaises(TypeError):    is_prime(5) Мы вызываем функцию  is_prime() и передаем ей в качестве аргумента число 5. В данном случае 5 является допустимым вводом, для которого функция возвращает  True . Поэтому функция не вызывает исключение  TypeError . А когда мы снова запустим тесты, то увидим, что один тест завершился неудачно.  $ python test_prime.py Output ..F. ====================================================================== FAIL: test_typeerror_2 (__main__.TestPrime) ---------------------------------------------------------------------- Traceback (most recent call last): File "test_prime.py", line 17, in test_typeerror_2 is_prime(5) AssertionError: TypeError not raised ---------------------------------------------------------------------- Ran 4 tests in 0.003s FAILED (failures=1) Заключение Благодарю, что дочитали до конца!  ? Надеюсь, что это руководство помогло вам понять азы модульного тестирования в Python. Вы научились настраивать тестирования, которые позволяют проверять, работает ли функция должным образом или выкидывает исключение – и все это с помощью встроенного в Python модуля  unittest .
img
Создание разделов диска позволяет разделить жесткий диск на несколько разделов, которые действуют независимо. В Linux пользователи должны структурировать устройства хранения (USB и жесткие диски) перед их использованием. Разбиение на разделы также полезно, когда вы устанавливаете несколько операционных систем на одном компьютере. В этом пошаговом руководстве вы узнаете, как создать раздел с помощью команды Linux parted или fdisk. Вариант 1: разбить диск на разделы с помощью команды parted Выполните следующие действия, чтобы разбить диск в Linux с помощью команды parted. Шаг 1. Список разделов Перед созданием раздела составьте список доступных запоминающих устройств и разделов. Это действие помогает определить устройство хранения, которое вы хотите разбить на разделы. Выполните следующую команду с sudo, чтобы вывести список устройств хранения и разделов: sudo parted -l Терминал распечатывает доступные устройства хранения с информацией о: Model - Модель запоминающего устройства. Disk - Имя и размер диска. Sector size - логический и физический размер памяти. Не путать с доступным дисковым пространством. Partition Table - тип таблицы разделов (msdos, gpt, aix, amiga, bsd, dvh, mac, pc98, sun и loop). Disk Flags - разделы с информацией о размере, типе, файловой системе и флагах. Типы разделов могут быть: Primary (Основной) - содержит файлы операционной системы. Можно создать только четыре основных раздела. Extended (Расширенный) - особый тип раздела, в котором можно создать более четырех основных разделов. Logical (Логический) - Раздел, созданный внутри расширенного раздела. В нашем примере есть два устройства хранения - /dev/sda и /dev/sdb Примечание. Первый диск хранения (dev/sda или dev/vda) содержит операционную систему. Создание раздела на этом диске может сделать вашу систему не загружаемой. Создавайте разделы только на дополнительных дисках (dev/sdb, dev/sdc, dev/vdb или dev/vdc). Шаг 2: Откройте диск для хранения Откройте диск хранения, который вы собираетесь разделить, выполнив следующую команду: sudo parted /dev/sdb Всегда указывайте запоминающее устройство. Если вы не укажете имя диска, он будет выбран случайным образом. Чтобы сменить диск на dev/sdb, выполните: select /dev/sdb Шаг 3: Создайте таблицу разделов Прежде чем разбивать диск, создайте таблицу разделов. Таблица разделов расположена в начале жесткого диска и хранит данные о размере и расположении каждого раздела. Типы таблиц разделов: aix, amiga, bsd, dvh, gpt, mac, ms-dos, pc98, sun и loop. Чтобы создать таблицу разделов, введите следующее: mklabel [partition_table_type] Например, чтобы создать таблицу разделов gpt, выполните следующую команду: mklabel gpt Введите Yes, чтобы выполнить: Примечание. Два наиболее часто используемых типа таблиц разделов - это gpt и msdos. msdos поддерживает до шестнадцати разделов и форматирует до 16 ТБ, а gpt форматирует до 9,4 ЗБ и поддерживает до 128 разделов. Шаг 4: проверьте таблицу Запустите команду print, чтобы просмотреть таблицу разделов. На выходе отображается информация об устройстве хранения: Примечание. Запустите команду help mkpart, чтобы получить дополнительную справку о том, как создать новый раздел. Шаг 5: Создайте раздел Давайте создадим новый раздел размером 1854 Мбайт, используя файловую систему ext4. Назначенное начало диска должно быть 1 МБ, а конец диска - 1855 МБ. Чтобы создать новый раздел, введите следующее: mkpart primary ext4 1MB 1855MB После этого запустите команду print, чтобы просмотреть информацию о вновь созданном разделе. Информация отображается в разделе Disk Flags: В таблице разделов gpt, тип раздела - это обязательное имя раздела. В нашем примере primary - это имя раздела, а не тип раздела. Чтобы сохранить свои действия и выйти, введите команду quit. Изменения сохраняются автоматически с помощью этой команды. Примечание. Сообщение «You may need to update /etc/fstab file» сигнализирует о том, что раздел может быть смонтирован автоматически во время загрузки. Вариант 2: разбить диск на разделы с помощью команды fdisk Выполните следующие действия, чтобы разбить диск в Linux с помощью команды fdisk. Шаг 1. Список существующих разделов Выполните следующую команду, чтобы вывести список всех существующих разделов: sudo fdisk -l Вывод содержит информацию о дисках и разделах хранилища: Шаг 2: Выберите диск для хранения Выберите диск для хранения, на котором вы хотите создать разделы, выполнив следующую команду: sudo fdisk /dev/sdb Диск /dev/sdbstorage открыт: Шаг 3: Создайте новый раздел Запустите команду n, чтобы создать новый раздел. Выберите номер раздела, набрав номер по умолчанию (2). После этого вас попросят указать начальный и конечный сектор вашего жесткого диска. Лучше всего ввести в этом разделе номер по умолчанию (3622912). Последний запрос связан с размером раздела. Вы можете выбрать несколько секторов или установить размер в мегабайтах или гигабайтах. Введите + 2 GB, чтобы установить размер раздела 2 ГБ. Появится сообщение, подтверждающее создание раздела. Шаг 4: запись на диск Система создала раздел, но изменения не записываются на диск. 1. Чтобы записать изменения на диск, выполните команду w: 2. Убедитесь, что раздел создан, выполнив следующую команду: sudo fdisk -l Как видите, раздел /dev/sdb2 создан. Отформатируйте раздел После создания раздела с помощью команды parted или fdisk отформатируйте его перед использованием. Отформатируйте раздел, выполнив следующую команду: sudo mkfs -t ext4 /dev/sdb1 Смонтировать раздел Чтобы начать взаимодействие с диском, создайте точку монтирования (mount point) и смонтируйте к ней раздел. 1. Создайте точку монтирования, выполнив следующую команду: sudo mkdir -p /mt/sdb1 2. После этого смонтируйте раздел, введя: sudo mount -t auto /dev/sbd1 /mt/sdb1 Терминал не распечатывает вывод, если команды выполнены успешно. 3. Убедитесь, что раздел смонтирован, с помощью команды df hT:
img
Чтобы перенести сетевой трафик групп распределенных портов в группу агрегации каналов (Link Aggregation Group - LAG), нужно создать новую группу LAG на распределяющем коммутаторе. Порядок действий В веб-клиенте vSphere перейдите к распределяющему коммутатору. Во вкладке Configure (Конфигурация) разверните Settings (Настройки) и выберите LACP() Щелкните на значок New Link Aggregation Group(Создать группу объединенных ссылок) Введите имя для новой LAG. Установите количество портов для LAG. Установите такое же количество портов для группы LAG, как и количество портов в канале портов LACP на физическом коммутаторе. Порт LAG имеет ту же функцию, что и восходящая линия (uplink) на распределяющем коммутаторе. Все порты LAG образуют команду NIC в контексте LAG. Выберите режим согласования LACP для группы LAG. Активный режимВсе порты LAG находятся в активном режиме согласования. Порты LAG инициируют согласование с каналом порта LACP на физическом коммутаторе, отправляя пакеты LACP.Пассивный режимПорты LAG находятся в режиме пассивного согласования. Они отвечают на пакеты LACP, которые они получают, но не согласовывают с LACP. Если порты с поддержкой LACP на физическом коммутаторе находятся в активном режиме, вы можете установить порты LAG в пассивный режим и наоборот. Выберите режим балансировки нагрузки из алгоритмов хэширования, которые определяет LACP. Алгоритм хеширования должен совпадать с алгоритмом, установленным для канала порта LACP на физическом коммутаторе. Установите виртуальную локальную сеть (VLAN) и политики NetFlow для LAG. Этот параметр активен, когда переопределение политик VLAN и NetFlow для отдельных портов восходящей линии связи включено в группе портов восходящей линии связи. Если вы установите политики VLAN и NetFlow для LAG, они переопределят политики, установленные на уровне группы портов восходящей линии связи. Нажмите OK Итоги Новая LAG не используется в порядке группировки и отработки отказа распределенных групп портов. Физические сетевые карты не назначены портам LAG. Как и в случае автономных каналов связи, LAG представляется на каждом хосте, связанном с распределяющим коммутатором. Например, если вы создаете LAG1 с двумя портами на распределяющем коммутаторе, LAG 1 с двумя портами создается на каждом хосте, связанном с распределяющим коммутатором. Что делать дальше Установить LAG как резервную в конфигурации группирования и отработки отказа распределенных групп портов. Таким образом, вы создаете промежуточную конфигурацию, которая позволяет переносить сетевой трафик в группу LAG без потери сетевого подключения.
ОСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59