python在自动化测试中的使用

        自动化测试在版本到到测试部之前,可以完整的跑一遍用例,效果非常的不错,F7公司用tcl模拟NMS网管做自动化测试,很多网络公司用Python+Selenium是进行web自动化测试,其实采用Python+CLI做通信的自动化测试效果非常的不错

        下面是几种语言的分类(python为动态语言:程序运行时,允许改变程序结构或变量类型)


        Python在PC上工作,主控板运行有命令行CLI,通过Python连接到主控,下发对应的Table到主控,模拟网管的操作


        主要的类是ConnectCli,包含下面函数:

1.cli_delay

参数:nsec(秒)

作用:延迟功能

2.cli_connect

参数:host、host_port、usr、pwd

作用:连接cli服务端

3.cli_close:

参数:void

作用:断开与cli服务端的连接

4.cli_sendcmd:

参数:可变长参数*args,要求包括全路径命令字串(如 $.cfg.vpn.getVpn),及此命令需要的参数

作用:向cli发送命令请求

5.cli_cmpassert:

参数:isSubStr,(0)标志需要全匹配(1)标志部分字串匹配;expected_ret,预期结果字串

作用:将传入的预期结果字串与cli处理结果字串进行比对,不相等则报


        测试的例子是通过cli_connect连接到主控板的169.254.0.1:9000,并且输入用户名bg64和密码jupiter,之后就进去CLI了,其中提示符为prompt也就是'->'

        cli_sendcmd就是模拟命令行输入,和在CLI窗口敲入$.l2cfg.xcfrr.set_xcfrr **是一样的,主要是加入了\r\n换行

        cli_cmpassert刚好相反,输入set的时候,判断是否success,输入get的时候,比较获取到的字符串和输入字符串是否一致

        整个思想就是模拟CLI的操作,获取CLI窗口的结果并和想得到的结果比较,一致的话就PASS,不一致就FAILED

        代码如下:

import time

import socket

import string

import telnetlib

 

class ConnectCli:

    prompt = '->'     

    @classmethod   

    def __cli_wait__(self, data):

        print "*INFO* %s"%(data)

        return self._tn.read_until(data)

            

    @classmethod   

    def __cli_sendmsg__(self, data):

        print "*INFO* %s"%(data)

        self._tn.write(data)

 

    @classmethod   

    def __cli_recvmsg__(self): 

        data = self._tn.read_very_eager()

        print "*INFO* %s"%(data)

        return data

 

    @classmethod

    def cli_delay(self, nsec):

        print "*INFO* delay %ssec"%(nsec)

        f_sec = float(nsec)

        time.sleep(f_sec)

       

    @classmethod     

    def cli_connect(self, host, host_port, usr,pwd):

        print "*INFO*HOST=%s,PORT=%s"%(host,host_port)

        verson ="version"+"\n"

        self._tn = telnetlib.Telnet(host,host_port)

        self.__cli_wait__("login:")

        self.__cli_sendmsg__(usr)

       self.__cli_wait__("Password:")

        self.__cli_sendmsg__(pwd)             

        self.__cli_wait__(self.prompt)

        self.__cli_sendmsg__(verson)             

        self.__cli_wait__(self.prompt)       

       

    @classmethod   

    def cli_close(self):       

        self._tn.close()

 

    @classmethod

    def cli_sendcmd(self, *args):

        i = 0

        tmp = ''

        data = ''

 

        data = str(args[0]) + ' '

        data += str(args[1]) + ','

 

        for i in range(len(args)-2):

            data += str(args[i+2]) + ','

               

        data += '\r\n'

        self.__cli_sendmsg__(data)

      

    @classmethod   

    def cli_cmpassert(self, *expected_subret):

        #print "*INFO* expected returnvalue:%s"%(expected_subret)

        data_true = ''

        data_true =self.__cli_wait__(self.prompt)

    

        data_exp = str(expected_subret[0])

             

        m = re.search(data_exp, data_true)

        if m is not None:

            return

        else:

            raise AssertionError("Expectedsub_string to be %s but was %s"

                                      %(data_exp, data_true))

 

#for test

if __name__ =='__main__':

   ConnectCli.cli_connect("169.254.0.1","9000","bg64\n","jupiter\n")

   ConnectCli.cli_sendcmd('$.l2cfg.xcfrr.set_xcfrr',"10,{tunnel_id=0x12c, dest_pe=0x0, outlabel2nnh=0xc8, bypass_tunnel_idx=0x15e,bypass_in_use=0x1, dest_net_id=0x0, reserved=0x0 }")

   ConnectCli.cli_delay('5')

   ConnectCli.cli_cmpassert('success')

   ConnectCli.cli_sendcmd('$.l2cfg.xcfrr.get_xcfrr',"10,{300,0,0,0}")

   ConnectCli.cli_delay('5')   

   ConnectCli.cli_cmpassert('{tunnel_id=0x12c, dest_pe=0x0, outlabel2nnh=0xc8, bypass_tunnel_idx=0x15e,bypass_in_use=0x1, dest_net_id=0x0, reserved=0x0 }')

   ConnectCli.cli_close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值