angular 判断字符串为空_软件测试面试-给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例...

我们都知道IP地址组成为:(1~255).(0~255).(0~255).(0~255)

b09afe5c0a68960a142381182806ac04.png

那么这道面试题个人认为很经典,既考察了求职者的写用例水平又考察了软件测试求职者的编码水平。

看似没有头绪的题目,其实静下心来,边写代码边写用例,不知不觉就完成了这道题目的解答,下来我对题目进行拆解。

8f1395c46d94e11b3da290249dfb6a19.png

首先我们都知道写用例第一步,按照正常人的思维先肯定想到正向的用例,对应的用例为:

e210dea749cfc73acaa8da9c72fa846d.png

之后考虑输入为空的情况:

bd98a99f44392c5429b5508cb17b13e2.png

对应的代码片段为:

4d8b964fca892570724472d4621efd9c.png

下来再考虑IP肯定在7~15位(最小的1.1.1.1,最大的255.255.255.255)正常情况已经包括了

那么,作为测试人员,考虑小于7位以及7的边界值的情况:

066ce886b79c04b743a6244476214496.png

对应的代码片段为:

2a5e9b93de2d059ae3fb52b06f0abad3.png

下来考虑的是大于15位以及15位左右情况

2804f964c499a3580ac0ecbb3470ea8c.png

对应的代码片段

c482ee7a9016bffcc5de406ad96824ed.png

再考虑首尾不能以.结尾

3145474b48a8a8ca875251ceb6e38e29.png

对应的代码片段为:

f2a3439807d0015fe085b74b4ba4144b.png

我们都知道ip地址固定有4个".",并且按"."分割之后每隔分割的字符,不能以'0'开头,且按"."分割之后必须在0-255

对应的用例为:

3720746a05c520d05bceeaa550527fcb.png

对应的代码片段为:

a068e81980881113fd6abd212eaa72a6.png

当然,需要检查每一个分割出来的字符都是在0-9之间:

52597c5d8bc1d5e760c6235bbd4e5121.png

这里面还有输入其他的情况会导致转换异常,因此,本人用异常,把异常try except

时间有限,部分完整的用例如下:

567f336a47cb8e8afbeb2733f4116a8d.png

e8700180ad215e7bccda1d8e896e72bd.png

有时间各位童鞋可以完善用例,代码整个如下:

6df6414e8d327def22d12c3eb916c8af.png

当然,还有一种比较简单的方法就是使用正则表达式,一般遇到ip地址和邮箱电话等等,我们也可以优先考虑正则表达式

d3021129ba7d9f9ccaa264edfd67bcf1.png
import re
def isIpAdress(IpStr):
    flag = True
    try:
        if IpStr == '':#'IP地址不能为空'
            flag = False
        if len(IpStr)<7:#'IP地址至少为7位'
            flag = False
        if len(IpStr)>15:#'IP地址最长位15位'
            flag = False
        if IpStr[0]=='.':#对输入字符串的首字符判断,如果是"."则是非法IP
            flag = False
        if IpStr[-1]=='.':#对输入字符串的末字符判断,如果是"."则是非法IP
            flag = False
        arr = IpStr.split('.')
        if len(arr)!=4:#按"."分割字符串,并判断分割出来的个数,如果不是4个,则是非法IP
            flag = False
        for item in arr:
            if len(item)>0 and item[0]=='0':#如果每个字符串不是一位字符,且以'0'开头,则是非法的IP,如:01.02.03.004
                flag = False
            for num in item:
                if num<'0' and num >'9':#对每个字符串的每个字符进行逐一判断,如果不是数字0-9,则是非法的IP
                    flag = False
                    break
            if int(item)<0 or int(item)>255:
                flag = False
                break
    except:
        flag = False
    return flag




def isIpAdress2(IpStr):
    reg = "^([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))(.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))){3}$"
    if (re.match(reg,IpStr)):
        return True
    else:
        return False



if __name__ == '__main__':
    s = input("请输入IP地址,格式参考(1~255).(0~255).(0~255).(0~255):")
    if isIpAdress(s):
        print("IP地址有效")
    else:
        print("无效的IP地址")
    if isIpAdress2(s):
        print("IP地址有效")
    else:
        print("无效的IP地址")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值