测试开发基础

给定一个字符串,怎么判断是不是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 有效不可用,回环地址

用户登陆过程需要做哪些分析?

  1. 功能测试
    • 正常流程(正确账号密码,点击提交,验证能否正确登陆)
    • 异常流程(错误的账号密码,点击提交,验证登陆失败,并提示相应错误信息)
    • 登陆成功后能否正确跳转
    • 用户名和密码,太短或太长的处理(边界值法)
    • 用户名和密码,有特殊字符(比如空格)及其他非英文的情况
    • 记住用户名,记住密码
    • 登陆失败后,不记录密码
    • 用户名和密码前后有空格的处理
    • 密码是否是密文显示,使用“*”号或圆点等符号代替
    • 验证码的辨认难度,考虑颜***盲使用者),刷新或换一个按钮是否好用
    • 输入密码时,大写键盘开启时是否有提示信息
    • 什么都不输入,点击提交按钮,检查提示信息
    • 登陆token测试
  2. 界面测试
    • 布局是否合理,按钮和表单是否整齐
    • 按钮和表单高度和长度是否符合要求
    • 界面风格是否符合UI设计稿
    • 文字有无错别字
  3. 性能测试
    • 打开登陆页面,需要的时间是否在需求要求的时间内
    • 输入正确的账号密码,点击登陆,是否在需求时间内跳转成功
    • 模拟大量用户同时登陆,检查一定压力下能否正常跳转
  4. 安全性测试
    • 用户名或密码是否是通过加密方式,发送给后端服务器
    • 用户名和密码应该在前端和后端做双重验证
    • 防止CSRF攻击,是否存在token
    • 用户名和密码的输入框,应该屏蔽SQL注入攻击
    • 用户名和密码的输入框,应该禁止输入脚本(防止xss攻击)
    • 防止暴力破解,检测是否有错误登陆的次数限制
    • 是否支持多用户在同一机器上登陆
    • 同一用户能否在多台机器上登陆
  5. 可用性测试
    • 是否可以用全键盘操作,是否有快捷键
    • 输入用户名,密码后按回车,是否可以登陆
    • 输入框是否可以Tab切换
  6. 兼容性测试
    • 不同浏览器下能否显示正常,且功能正常(IE,6,7,8,9,10,11,Firefox,Chrome,Safari)等
    • 同种浏览器下不同版本能否显示正常且功能正常
    • 不同的操作系统是否能正常工作(Windows, Mac)
    • 移动设备上是否正常工作(iOS,Android)
  7. 本地化测试
    • 不同语言环境下,页面的显示是否正确

      测试的相关流程

答:

按W模型:

需求测试 -> 概要设计测试 -> 详细设计测试 -> 单元测试 -> 集成测试 -> 系统测试 -> 验收测试

我工作中实际测试流程:

需求评审 -> 技术评审 -> case评审 -> 开发自测以及冒烟测试 -> 整体提测(集成测试) -> 回归测试 -> 系统测试 -> 验收测试


测试项目具体工作是什么

答:

  1. 搭建测试环境

  2. 撰写测试用例

  3. 执行测试用例

  4. 写测试计划、测试报告

  5. 测试并提交BUG

  6. 跟踪BUG修改情况

  7. 自动化测试

  8. 性能测试、压力测试、安全测试等其他测试

    如何对电梯进行测试

  9. 功能:上升、下降、停止、开门、关门、梯内电话、灯光、指示灯,监控等;

  10. 性能:速度、反应时间、关门时间等;

  11. 压力:超载、尖锐物碰撞电梯壁等;

  12. 安全:停电、报警装置、轿箱停靠位置、有人扒门时的情况等;

  13. 可用性:按键高度、操作是否方便、舒适程度,是否是就近原则停靠等;

  14. UI:美观程度、光滑程度、形状、质感等;

  15. 稳定性:长时间运行情况等;

  16. 兼容性:不同电压是否可工作、不同类型电话是否可安装等。

  17. 异常场景: 突然停电时的情况、障碍物阻挡、

  18. 交互测试: 多次点击同一楼层号码、与其他电梯之间是否协作良好、同时按关门和开门按钮、电梯运行期间上人下人再按新的楼层等

  19. 优化点:比如电梯按钮的设计是否符合一般人的习惯,按钮颜色关门后是否清晰可见数字等等

用户登陆过程需要做哪些分析?

  1. 功能测试
    • 正常流程(正确账号密码,点击提交,验证能否正确登陆)
    • 异常流程(错误的账号密码,点击提交,验证登陆失败,并提示相应错误信息)
    • 登陆成功后能否正确跳转
    • 用户名和密码,太短或太长的处理(边界值法)
    • 用户名和密码,有特殊字符(比如空格)及其他非英文的情况
    • 记住用户名,记住密码
    • 登陆失败后,不记录密码
    • 用户名和密码前后有空格的处理
    • 密码是否是密文显示,使用“*”号或圆点等符号代替
    • 验证码的辨认难度,考虑颜***盲使用者),刷新或换一个按钮是否好用
    • 输入密码时,大写键盘开启时是否有提示信息
    • 什么都不输入,点击提交按钮,检查提示信息
    • 登陆token测试
  2. 界面测试
    • 布局是否合理,按钮和表单是否整齐
    • 按钮和表单高度和长度是否符合要求
    • 界面风格是否符合UI设计稿
    • 文字有无错别字
  3. 性能测试
    • 打开登陆页面,需要的时间是否在需求要求的时间内
    • 输入正确的账号密码,点击登陆,是否在需求时间内跳转成功
    • 模拟大量用户同时登陆,检查一定压力下能否正常跳转
  4. 安全性测试
    • 用户名或密码是否是通过加密方式,发送给后端服务器
    • 用户名和密码应该在前端和后端做双重验证
    • 防止CSRF攻击,是否存在token
    • 用户名和密码的输入框,应该屏蔽SQL注入攻击
    • 用户名和密码的输入框,应该禁止输入脚本(防止xss攻击)
    • 防止暴力破解,检测是否有错误登陆的次数限制
    • 是否支持多用户在同一机器上登陆
    • 同一用户能否在多台机器上登陆
  5. 可用性测试
    • 是否可以用全键盘操作,是否有快捷键
    • 输入用户名,密码后按回车,是否可以登陆
    • 输入框是否可以Tab切换
  6. 兼容性测试
    • 不同浏览器下能否显示正常,且功能正常(IE,6,7,8,9,10,11,Firefox,Chrome,Safari)等
    • 同种浏览器下不同版本能否显示正常且功能正常
    • 不同的操作系统是否能正常工作(Windows, Mac)
    • 移动设备上是否正常工作(iOS,Android)
  7. 本地化测试
    • 不同语言环境下,页面的显示是否正确

回归测试:

回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。

1、自我介绍;
2、讲一下项目所承担的职责;
3、讲解笔试编程题的思想;
4、讲一下项目里面的测试用例;
5、智力题:25匹马,5个跑道,比赛排出1、2、3名,问最少跑几次;
6、对电梯整体进行设计测试用例;
7、面试官给出一道题,进行设计测试用例;
8、对斐波那契数列进行算法编程;
9、对于1-100找出里面的质数,进行算法编程;
10、了解递归?
11、计算机网络:讲述七层都叫什么,每层的作用;
12、TCP协议的三次握手;
13、对linux了解?都有什么命令;进程的命令等等;
14、对数据库了解?写一个计算每个学生的总成绩的语句;

全部评论

相关推荐

点赞 10 评论
分享
牛客网
牛客企业服务