测试开发基础
给定一个字符串,怎么判断是不是ip地址?手写这段代码,并写出测试用例
code
java版
public class IpTest{ public static boolean isIpLegal(String str){ //检查ip是否为空 if(str == null){ return false; } //检查ip长度,最短为:x.x.x.x(7位),最长为xxx.xxx.xxx.xxx(15位) if(str.length()<7 || str.length()>15 ){ return false; } //对输入字符串的首末字符判断,如果是"."则是非法IP if(str.charAt(0) == '.' || str.charAt(str.length()-1) == '.'){ return false; } //按"."分割字符串,并判断分割出来的个数,如果不是4个,则是非法IP String[] arr = str.split("\\."); if(arr.length != 4){ return false; } //对分割出来的每个字符串进行单独判断 for(int i=0; i<arr.length; i++){ //如果每个字符串不是一位字符,且以'0'开头,则是非法IP,如:01.002.03.004 if(arr[i].length()>1 && arr[i].charAt(0) == '0'){ return false; } } //对每个字符串中的每个字符进行逐一判断,如果不是数字0-9,则是非法IP for(int j=0; j<arr[i].length(); j++){ if(arr[i].charAt(j) < '0' || arr[i].charAt(j) > '9'){ return false; } } //对拆分的每一个字符串进行转换成数字,并判断是否在0~255之间 for(int i=0; i<arr.length; i++){ int temp = Integer.parseInt(arr[i]); if(i==0){ if(temp < 1 || temp > 255){ return false; } }else{ if(temp < 0 || temp > 255){ return false; } } } return true; } public static void main(String[] args){ //输入一个字符串 Scanner scanner = new Scanner(System.in); String ipStr = scanner.next(); boolean isIpLegal = isIpLegal(isStr); if(isIpLegal){ System.out.println(ipStr + "合法"); }else{ System.out.println(ipStr + "非法"); } } }
python版
def ip_check(ip_str): # 题目要求入参只有字符串类型 if not isinstance(ip_str, str): return False if len(ip_str) < 7 or len(ip_str) > 15: return False if ip_str.startswith('.') or ip_str.endswith('.'): return False ip_lst = ip_str.split('.') if len(ip_lst) != 4: return False for idx, ip_num in enumerate(ip_lst): if not ip_num.isdigit(): return False if len(ip_num) > 1 and ip_num.startswith('0'): return False if idx == 0: if int(ip_num) < 1 or int(ip_num) > 255: return False else: if int(ip_num) < 0 or int(ip_num) >255: return False return True
有关ip地址的知识点:
有效可用的ip地址
A类 | 1.0.0.0 - 126.255.255.254 |
---|---|
A私有 | 10.0.0.0 - 10.255.255.254 |
B类 | 128.0.0.0 - 191.255.255.254 |
B私有 | 172.16.0.0 - 172.31.255.254 |
C类 | 192.0.0.0 - 223.255.255.254 |
C私有 | 192.168.0.0 - 192.168.255.254 |
Windows自动分配 | 169.254.0.0 - 169.254.255.254 |
有效但不可用的IP地址
D类 | 244.0.0.0 - 239.255.255.254 |
---|---|
E类 | 240.0.0.0 - 255.255.255.254 |
全网 | 0.x.x.x, x.x.x.0 |
广播 | x.x.x.255 |
回环 | 127.0.0.0 - 127.255.255.254 |
测试用例
等价划分类
输入 | 结果 |
---|---|
64.11.22.33 | 有效可用 |
10.12.13.14 | 有效可用,不能直接访问公网 |
151.123.234.56 | 有效可用 |
172.20.123.56 | 有效可用,不能直接访问公网 |
192.127.35.65 | 有效可用 |
192.168.128.128 | 有效可用,不能直接访问公网 |
169.254.15.200 | 有效可用,不能直接访问公网 |
224.1.2.3 | 有效不可用,超过有效范围(D类) |
250.11.22.33 | 有效不可用,超过有效范围(E类) |
0.200.3.4 | 有效不可用,全网地址 |
64.11.22.0 | 有效不可用,全网地址 |
10.12.13.255 | 有效不可用,广播地址 |
127.50.60.70 | 有效不可用,回环地址 |
用户登陆过程需要做哪些分析?
- 功能测试
- 正常流程(正确账号密码,点击提交,验证能否正确登陆)
- 异常流程(错误的账号密码,点击提交,验证登陆失败,并提示相应错误信息)
- 登陆成功后能否正确跳转
- 用户名和密码,太短或太长的处理(边界值法)
- 用户名和密码,有特殊字符(比如空格)及其他非英文的情况
- 记住用户名,记住密码
- 登陆失败后,不记录密码
- 用户名和密码前后有空格的处理
- 密码是否是密文显示,使用“*”号或圆点等符号代替
- 验证码的辨认难度,考虑颜***盲使用者),刷新或换一个按钮是否好用
- 输入密码时,大写键盘开启时是否有提示信息
- 什么都不输入,点击提交按钮,检查提示信息
- 登陆token测试
- 界面测试
- 布局是否合理,按钮和表单是否整齐
- 按钮和表单高度和长度是否符合要求
- 界面风格是否符合UI设计稿
- 文字有无错别字
- 性能测试
- 打开登陆页面,需要的时间是否在需求要求的时间内
- 输入正确的账号密码,点击登陆,是否在需求时间内跳转成功
- 模拟大量用户同时登陆,检查一定压力下能否正常跳转
- 安全性测试
- 用户名或密码是否是通过加密方式,发送给后端服务器
- 用户名和密码应该在前端和后端做双重验证
- 防止CSRF攻击,是否存在token
- 用户名和密码的输入框,应该屏蔽SQL注入攻击
- 用户名和密码的输入框,应该禁止输入脚本(防止xss攻击)
- 防止暴力破解,检测是否有错误登陆的次数限制
- 是否支持多用户在同一机器上登陆
- 同一用户能否在多台机器上登陆
- 可用性测试
- 是否可以用全键盘操作,是否有快捷键
- 输入用户名,密码后按回车,是否可以登陆
- 输入框是否可以Tab切换
- 兼容性测试
- 不同浏览器下能否显示正常,且功能正常(IE,6,7,8,9,10,11,Firefox,Chrome,Safari)等
- 同种浏览器下不同版本能否显示正常且功能正常
- 不同的操作系统是否能正常工作(Windows, Mac)
- 移动设备上是否正常工作(iOS,Android)
- 本地化测试
- 不同语言环境下,页面的显示是否正确
测试的相关流程
- 不同语言环境下,页面的显示是否正确
答:
按W模型:
需求测试 -> 概要设计测试 -> 详细设计测试 -> 单元测试 -> 集成测试 -> 系统测试 -> 验收测试
我工作中实际测试流程:
需求评审 -> 技术评审 -> case评审 -> 开发自测以及冒烟测试 -> 整体提测(集成测试) -> 回归测试 -> 系统测试 -> 验收测试
测试项目具体工作是什么
答:
搭建测试环境
撰写测试用例
执行测试用例
写测试计划、测试报告
测试并提交BUG
跟踪BUG修改情况
自动化测试
性能测试、压力测试、安全测试等其他测试
如何对电梯进行测试
功能:上升、下降、停止、开门、关门、梯内电话、灯光、指示灯,监控等;
性能:速度、反应时间、关门时间等;
压力:超载、尖锐物碰撞电梯壁等;
安全:停电、报警装置、轿箱停靠位置、有人扒门时的情况等;
可用性:按键高度、操作是否方便、舒适程度,是否是就近原则停靠等;
UI:美观程度、光滑程度、形状、质感等;
稳定性:长时间运行情况等;
兼容性:不同电压是否可工作、不同类型电话是否可安装等。
异常场景: 突然停电时的情况、障碍物阻挡、
交互测试: 多次点击同一楼层号码、与其他电梯之间是否协作良好、同时按关门和开门按钮、电梯运行期间上人下人再按新的楼层等
优化点:比如电梯按钮的设计是否符合一般人的习惯,按钮颜色关门后是否清晰可见数字等等
用户登陆过程需要做哪些分析?
- 功能测试
- 正常流程(正确账号密码,点击提交,验证能否正确登陆)
- 异常流程(错误的账号密码,点击提交,验证登陆失败,并提示相应错误信息)
- 登陆成功后能否正确跳转
- 用户名和密码,太短或太长的处理(边界值法)
- 用户名和密码,有特殊字符(比如空格)及其他非英文的情况
- 记住用户名,记住密码
- 登陆失败后,不记录密码
- 用户名和密码前后有空格的处理
- 密码是否是密文显示,使用“*”号或圆点等符号代替
- 验证码的辨认难度,考虑颜***盲使用者),刷新或换一个按钮是否好用
- 输入密码时,大写键盘开启时是否有提示信息
- 什么都不输入,点击提交按钮,检查提示信息
- 登陆token测试
- 界面测试
- 布局是否合理,按钮和表单是否整齐
- 按钮和表单高度和长度是否符合要求
- 界面风格是否符合UI设计稿
- 文字有无错别字
- 性能测试
- 打开登陆页面,需要的时间是否在需求要求的时间内
- 输入正确的账号密码,点击登陆,是否在需求时间内跳转成功
- 模拟大量用户同时登陆,检查一定压力下能否正常跳转
- 安全性测试
- 用户名或密码是否是通过加密方式,发送给后端服务器
- 用户名和密码应该在前端和后端做双重验证
- 防止CSRF攻击,是否存在token
- 用户名和密码的输入框,应该屏蔽SQL注入攻击
- 用户名和密码的输入框,应该禁止输入脚本(防止xss攻击)
- 防止暴力破解,检测是否有错误登陆的次数限制
- 是否支持多用户在同一机器上登陆
- 同一用户能否在多台机器上登陆
- 可用性测试
- 是否可以用全键盘操作,是否有快捷键
- 输入用户名,密码后按回车,是否可以登陆
- 输入框是否可以Tab切换
- 兼容性测试
- 不同浏览器下能否显示正常,且功能正常(IE,6,7,8,9,10,11,Firefox,Chrome,Safari)等
- 同种浏览器下不同版本能否显示正常且功能正常
- 不同的操作系统是否能正常工作(Windows, Mac)
- 移动设备上是否正常工作(iOS,Android)
- 本地化测试
- 不同语言环境下,页面的显示是否正确
回归测试:
回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。