打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

前言

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

判断是不是ipv4地址

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

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

'''
给你一个字符串,你怎么判断是不是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 即可

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
格式不对abcdefFalse
格式不对123.456False
格式不对1.2.3False
第1位校验a.1.1.1False
-0.1.1.1False
-1.1.1.1True
-9.1.1.1True
-10.1.1.1True
-99.1.1.1True
-100.1.1.1True
-199.1.1.1True
-200.1.1.1True
-250.1.1.1True
-255.1.1.1True
-256.1.1.1False
-356.1.1.1False
第2位校验10.a.1.1False
-10.0.1.1True
-10.255.1.1True
-10.256.1.1False
-10.300.1.1False
第3位校验10.0.a.1False
-10.0.0.1True
-10.0.255.1True
-10.0.256.1False
-10.0.300.1False
第4位校验10.0.0.aFalse
-10.0.0.0True
-10.0.0.255True
-10.0.0.256False
-10.0.0.300False

代码测试用例

用pytest框架测试上面的用例

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年第六期《python接口自动化+测试开发》课程,1月9号开学(火热报名中!)

1月9-4月1820:30-22:30

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
我来告诉你什么是IPv6
什么是IP V6? IP V6的地址表示方式是什么?
面试题-统计字符出现最大次数
net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串(转)
Java中==和equals的区别
c语言中单引号和双引号的差别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服