LAB: TESTING AUTOMATION NETWORK USING UNITTEST -

LAB: TESTING AUTOMATION NETWORK USING UNITTEST -

LAB: TESTING AUTOMATION NETWORK USING UNITTEST -

LAB: TESTING AUTOMATION NETWORK USING UNITTEST -

LAB: TESTING AUTOMATION NETWORK USING UNITTEST -
LAB: TESTING AUTOMATION NETWORK USING UNITTEST -
(028) 35124257 - 0933 427 079

LAB: TESTING AUTOMATION NETWORK USING UNITTEST

05-10-2023

1/ Yêu cầu: 

  • Sử dụng Netmiko cấu hình IP 192.168.23.1 cho interface e0/2.
  • Sử dụng Netmiko cấu hình Vlan 20-30.
  • Sử dụng PyTest kiểm tra cấu hình trên thiết bị.

2/ Yêu cầu công cụ:

  • Cài đặt Python 3
  • Cài đặt Netmiko
  • Cài đặt NTC_templates
  • Cài đặt Pytest

3/ Hướng dẫn thực hiện:

 3.1. Kiểm tra Python:

python -V

3.2. Cài đặt Netmiko và Pytest

python -m pip install netmiko pytest ntc_templates

3.3Cấu hình IP và VLAN

from netmiko import ConnectHandler

sw={

    'device_type':"cisco_ios",

    'ip':'10.215.27.27',

    'username':'vnpro',

    'password':'vnpro#123',

    'secret':'vnpro#321'

}

sw_connect= ConnectHandler(**sw)

sw_connect.enable()

 

setip=['int e0/2','no sw','ip add 192.168.23.1 255.255.255.0','no shut']

sw_connect.send_config_set(setip)

for i in range(20,31):

    createvlan=['vlan {}'.format(i)]

    configvlan=['int vlan {}'.format(i), 'ip add 172.16.{}.1 255.255.255.0'.format(i),'no shut']

    sw_connect.send_config_set(createvlan)

    sw_connect.send_config_set(configvlan)

3.4 Kiểm tra kết quả

Sử dụng Unittest

Để Unitest tự động xác định file python test, cần đặt tên theo cú pháp “test_*.py” (Dấu * có thay thế bằng bất kỳ ký tự được phép nào trong quy ước đặt tên)

Chạy test từ modules hoặc class

python -m unittest modules

Nếu không đặt tên theo cú pháp cần chỉ định file cho Unitest

python -m unittest somethings.py

Viết file Python test kiểm tra địa chỉ IP và VLAN 20-30 cấu hình bên trên đã thành công hay chưa?

Sử dụng thư viện và module cần thiết: unittest, netmiko,ntc_templates

import unittest

from netmiko import ConnectHandler

from ntc_templates.parse import parse_output

Khai báo class chứa testcas sử dụng giá trị truyền vào unittest.TesCase chứa các chức năng sau:

  • Khởi tạo kết nối SSH
  • Kiểm tra IP đã được cấu hình hay chưa.
  • Kiểm tra VLAN đã được cấu hinh hay chưa.
  • Ngắt kết nố SSH khi tất cả các test thực thi xong.

class Testconfig(unittest.TestCase):

    @classmethod

    def setUpClass(cls):

        sw={

            'device_type':"cisco_ios",

            'ip':'10.215.27.27',

            'username':'vnpro',

            'password':'vnpro#123',

            'secret':'vnpro#321'

        }

        sw_connect= ConnectHandler(**sw)

        sw_connect.enable()

        print("start test")

        cls.sw_connect=sw_connect

    @classmethod

    def tearDownClass(cls) -> None:

        cls.sw_connect.disconnect()

Trong Python @classmethod được sử dụng để khai báo một phương thức của Class, tham số đâu tiên của hàm này phải là cls

Hàm setUpClass (lưu ý phải đặt tên đúng syntax) sẽ thực hiện đầu tiên, trước tất cả các testcase.

Hàm tearDownClass(lưu ý phải đặt tên đúng syntax) sẽ thực hiện cuối cùng, sau tất cả các testcase.

  • TestCase IP

    def test_ip(self):

        data=self.sw_connect.send_command('show ip int br')

        data_parse=parse_output(platform="cisco_ios",command="show ip interface brief",data=data)

 

        self.assertEqual(data_parse[2]['ipaddr'],'192.168.23.1')

assertEqual sẽ kiểm tra IP của E0/2 có phải là ‘192.168.23.1’

  • TestCase VLAN:

    def test_vlan(self):

        data=self.sw_connect.send_command("show vlan")

        data_parse=parse_output(platform="cisco_ios",command="show vlan",data=data)

        vlanid=[]

        for i in range(len(data_parse)):

            vlanid+=[data_parse[i]['vlan_id']]

        for i in range(20,31):

            self.assertIn(str(i),vlanid)

Testcase này sẽ thu tập tất cả các vlan_id hiện đang được cấu hình trên thiết bị lưu thành list.

assertIn sẽ kiểm tra vlan_id có trong danh sách này hay không.

 

File test_configsw.py

import unittest

from netmiko import ConnectHandler

from ntc_templates.parse import parse_output

 

 

class Testconfig(unittest.TestCase):

    @classmethod

    def setUpClass(cls):

        sw={

            'device_type':"cisco_ios",

            'ip':'10.215.27.27',

            'username':'vnpro',

            'password':'vnpro#123',

            'secret':'vnpro#321'

        }

        sw_connect= ConnectHandler(**sw)

        sw_connect.enable()

        print("start test")

        cls.sw_connect=sw_connect

    @classmethod

    def tearDownClass(cls) -> None:

        cls.sw_connect.disconnect()      

    def test_ip(self):

        data=self.sw_connect.send_command('show ip int br')

        data_parse=parse_output(platform="cisco_ios",command="show ip interface brief",data=data)

        self.assertEqual(data_parse[2]['ipaddr'],'192.168.23.1')       

    def test_vlan(self):

        data=self.sw_connect.send_command("show vlan")

        data_parse=parse_output(platform="cisco_ios",command="show vlan",data=data)

        vlanid=[]

        for i in range(len(data_parse)):

            vlanid+=[data_parse[i]['vlan_id']]

        for i in range(20,31):

            self.assertIn(str(i),vlanid)

       

if __name__=='__main__':

    unittest.main()

  • Chạy file test để kiểm tra

python -m unittest

python -m unittest .\test_configsw.py

Với 2 cách trên ta sẽ chạy toàn bộ test trong file. Để chạy test kiểm tra kèm điều kiện chỉ 1 vài test có tên file hoặc tên test chỉ định ta chọn option -k

python -m unittest -k ip # chạy test có ký tự ip

Với File test bên trên ta có 1 testcase ứng với ký tự ip

Để xem chi tiết testcase nào được chạy ta chọn option -v

python -m unittest -v

Tham khảo:

https://docs.python.org/3/library/unittest.html

https://realpython.com/python-testing/

https://github.com/networktocode/ntc-templates


FORM ĐĂNG KÝ MUA HÀNG
Đặt hàng
icon-cart
0