前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试开发面试题-给你一个字符串,你怎么判断是不是ipv4地址?手写这段代码,并写出测试用例

测试开发面试题-给你一个字符串,你怎么判断是不是ipv4地址?手写这段代码,并写出测试用例

作者头像
上海-悠悠
发布2021-03-03 15:18:24
1.2K0
发布2021-03-03 15:18:24
举报

前言

给你一个字符串,你怎么判断是不是ipv4地址?手写这段代码,并写出测试用例

判断是不是ipv4地址

先要知道 ipv4 地址的格式:(1~255).(0~255).(0~255).(0~255)

从格式上看有3个点,分四个部分,第1部分范围是1~255, 后面3个部分是0~255 于是可以把字符串按.去切割,判断数字范围大小

代码语言:javascript
复制
'''
给你一个字符串,你怎么判断是不是ipv4地址?手写这段代码,并写出测试用例
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
'''

def check_ipv4(ip_str):
    """检查ipv4地址格式"""
    if not isinstance(ip_str, str):
        print("输入参数不合法,请输入字符串")
        return False
    if ip_str.count(".") != 3:
        return False
    else:
        ip_list = ip_str.split(".")
        print(ip_list)   # 按点切割四个部分
        # 校验每个部分的合法性,判断是不是数字
        num1 = ip_list[0]
        try:
            n1 = int(num1)
            print("第1个数字:", n1)
            if n1 >=1 and n1 <= 255:
                pass
            else:
                return False
        except:
            return False
        # 后面3个数字
        for n in ip_list[1:]:
            try:
                n2 = int(n)
                print("后面数字:", n2)
                if n2 >=0 and n2 <= 255:
                    pass
                else:
                    return False
            except:
                return False
        return True

if __name__ == '__main__':
    result = check_ipv4("1.2.2.3")
    print(result)

正则判断ipv4地址

也可以用正则表达式判断ipv4地址, 正则匹配代码会简单很多 先第一部分匹配1-255, 匹配有5种情况

  • 1位数 1-9
  • 2位数 10-99
  • 3位数 100-199
  • 3位数 200-249
  • 3位数 250-255

于是正则表达式可以写成[1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5] 后面3个数是从0-255,根上面的差不多,把1-9 改成 0-9 即可

代码语言:javascript
复制
import re
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

def check_ipv4_by_re(ip_str):
    """正则判断ipv4"""
    if not isinstance(ip_str, str):
        print("输入参数不合法,请输入字符串")
        return False
    compile_ipv4 = re.compile('^([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 compile_ipv4.match(ip_str):
        return True
    else:
        return False

if __name__ == '__main__':
    result2 = check_ipv4_by_re("255.0.2.3")
    print(result2)

测试用例

什么是有效的ipv4地址?(baidu搜来的)

有效ipV4(第4版)地址的范围是1.0.0.0~254.255.255.254,由4节组成,每节取值范围0~255 但有一些地址是特殊的,不能算bai作”有效值“有效IP地址的范围是:网络地址+1~广播地址-1。 有效IP地址分为3类,分别是: A类IP段 0.0.0.0 到127.255.255.255 (0段和127段不使用)。 B类IP段 128.0.0.0 到191.255.255.255 C类IP段 192.0.0.0 到223.255.255.255

如果仅仅是校验ipv4 地址的格式:(1~255).(0~255).(0~255).(0~255),用上面的代码就行了,如果要校验有效IP,还得排除掉无效的ip

测试用例设计

测试点

用户输入

期望结果

非字符串

1234

输入不合法 False

空字符

“”

False

格式不对

abcdef

False

格式不对

123.456

False

格式不对

1.2.3

False

第1位校验

a.1.1.1

False

-

0.1.1.1

False

-

1.1.1.1

True

-

9.1.1.1

True

-

10.1.1.1

True

-

99.1.1.1

True

-

100.1.1.1

True

-

199.1.1.1

True

-

200.1.1.1

True

-

250.1.1.1

True

-

255.1.1.1

True

-

256.1.1.1

False

-

356.1.1.1

False

第2位校验

10.a.1.1

False

-

10.0.1.1

True

-

10.255.1.1

True

-

10.256.1.1

False

-

10.300.1.1

False

第3位校验

10.0.a.1

False

-

10.0.0.1

True

-

10.0.255.1

True

-

10.0.256.1

False

-

10.0.300.1

False

第4位校验

10.0.0.a

False

-

10.0.0.0

True

-

10.0.0.255

True

-

10.0.0.256

False

-

10.0.0.300

False

代码测试用例

用pytest框架测试上面的用例

代码语言:javascript
复制
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

# 测试数据
test_data = [
    [1234, False],
    ["", False],
    ["abcdef", False],
    ["123.456", False],
    ["1.2.3",  False],
    ["a.1.1.1", False],
    ["0.1.1.1", False],
    ["1.1.1.1", True],
    ["9.1.1.1", True]

]

@pytest.mark.parametrize("test_input, expected", test_data)
def test_ip(test_input, expected):
    assert expected == check_ipv4_by_re(test_input)

用例太多,省略了一部分

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 判断是不是ipv4地址
  • 正则判断ipv4地址
  • 测试用例
  • 代码测试用例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档