Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

LAB: Testing Automation Network using Unittest

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • LAB: Testing Automation Network using Unittest

    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ị.
    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
    Hướng dẫn thực hiện:
    Kiểm tra Python:
    python -V
    Click image for larger version

Name:	dataurl927720.png
Views:	36
Size:	3.3 KB
ID:	427820
    Cài đặt Netmiko và Pytest
    python -m pip install netmiko pytest ntc_templates
    Cấ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)
    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",comma nd="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",comma nd="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",comma nd="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",comma nd="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
    Click image for larger version

Name:	dataurl927727.png
Views:	22
Size:	17.0 KB
ID:	427822
    python -m unittest .\test_configsw.py
    Click image for larger version

Name:	dataurl927729.png
Views:	22
Size:	17.7 KB
ID:	427823
    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
    Click image for larger version

Name:	dataurl927731.png
Views:	22
Size:	17.9 KB
ID:	427824
    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
    Click image for larger version

Name:	dataurl927732.png
Views:	22
Size:	32.9 KB
ID:	427821

    Tham khảo:
    https://docs.python.org/3/library/unittest.html
    https://realpython.com/python-testing/
    https://github.com/networktocode/ntc-templates

    Email : vnpro@vnpro.org
    ---------------------------------------------------------------------------------------------------------------
    Trung Tâm Tin Học VnPro
    149/1D Ung Văn Khiêm P25 Q.Bình thạnh TPHCM
    Tel : (08) 35124257 (5 lines)
    Fax: (08) 35124314

    Home page: http://www.vnpro.vn
    Support Forum: http://www.vnpro.org
    - Chuyên đào tạo quản trị mạng và hạ tầng Internet
    - Phát hành sách chuyên môn
    - Tư vấn và tuyển dụng nhân sự IT
    - Tư vấn thiết kế và hỗ trợ kỹ thuật hệ thống mạng

    Network channel: http://www.dancisco.com
    Blog: http://www.vnpro.org/blog
Working...
X