• 测试基础2022


    计算机基础

    1、网络协议

    2、TCP/IP

    测试基础

    • alpha测试和beta测试

      • alpha测试,内部测试,开发人员在场,接近完成时的测试

      • beta测试,完全用户测试,发布前的一个版本,灰度测试

    • Android和ios测试的区别 Android和ios的APP测试区别 - 木木文 - 博客园

      • 功能按键,尤其返回键

        • Android,3个物理按键

        • ios测试,页面功能实现

      • 安装,

        • 生产环境:and应用市场、手机助手;ios app store和itunes

        • 测试环境:and打包成apk文件;ios testflight

      • 系统兼容性、分辨率兼容性

        • and:版本多,手机型号多

        • ios:版本少

      • 原生技术支持

      • 支付方式

      • 程序后台运行

      • 消息推送

    • 你认为做好测试应该具备哪些素质?

      • 较好的技术能力

      • 对业务逻辑的理解

      • 良好的沟通能力

      • 解决和分析事情的能力

    • 测试结束的标准?

      • 测试超过了预定时间

      • 执行了所有测试用例,回归测试完成,未发现bug,

      • 测试设计方案作为测试停止的基础

    • 测试用例要素?

      • 索引、环境、输入、操作、预期结果、评价标准
    • 测试兴趣?

      • 行业前景、面临挑战、可提高自身能力、性格外向开朗
    • 输入三个整数,判断是否构成有效的三角形

      • A、B、C>0,A+B>C,A+C>B,B+C>A
    • 有广告的杯子,设计测试用例?

      • 功能性:是否漏水;水能喝到吗、大小、硬度、形状、广告图案掉色、模糊、

      • 安全性:毒、细菌、环保;

      • 可靠性:不同高度落下,

      • 可移植性:不用地方、温度下是否正常;容纳果汁、白水、酒精、汽油;

      • 易用性:烫手、防滑、方便饮用、携带是否方便

      • 用户文档:使用对用法、限制、使用条件描述是否详细

    • 身份证号码输入框,设计测试用例

      • 有效性:地址码、生日码、顺序码、长度

      • 未位是X的情况

      • 必填/非必填的提示、提交

    • 登录功能?

      • 功能测试

        • 正确账号密码、提交、成功、跳转页面是否正常

        • 错误账号密码、提交、错误码和提示返回、不能记住密码

        • 账号、密码长度、规则显示提示

        • 特殊字符:空格等是否过滤、前后空格处理

        • 记住账号

        • 密码加密

        • 验证码:文字扭曲、辨认难度、颜色(色盲)、刷新按钮

        • 注册、忘记密码、切换账号登录

        • 非空检查

      • 界面测试

        • 输入框对齐、按钮对齐

        • 长度、高度

        • 设计风格

      • 性能测试

        • 打开,需要几秒

        • 跳转新网页,需要几秒

        • 账号密码接口是否加密、验证通过服务器

        • 输入框的SQL注入、XSS攻击

        • 错误登录次数

        • 多用户同一设备登录

        • 一用户多设备登录

      • 可用性测试

        • 全用键盘、快捷键

        • 输入账号、密码,回车键是否可以登录

      • 兼容性测试

        • 不同浏览器

        • 不同平台、分辨率

    Charles

    链接:[Charles 抓包使用教程 - 木木文 - 博客园]

    连接代理

    1. 手机连接代理

      1. proxy settings

      2. 设置端口号8888

      3. 查看本地IP地址:help-ssl proxying- install root

      4. 手机打开wifi-HTTP代理- 配置代理 - 手动

        1. 填写 服务器ip和端口号port

        2. 对应Charles 显示是否支持抓取

        3. 安装证书

        4. 输入网址 chls.pro/ssl 下载安装

        5. 信任证书

    过滤请求

    1. filter填写关键字过滤

    2. 在 Charles 的菜单栏选择 “Proxy”–>“Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了

    3. 在请求右击,点击focus

    修改服务器返回内容

    1. MAP功能适合长期地将某一些请求重定向到另一个网络地址或本地文件

      1. Map remote 将指定的网络请求重定向到另一个网址请求地址

        1. 填写网络重定向的源地址目的地址
      2. Map Local 将指定的网络请求重定向到本地文件

        1. 填写重定向的源地址和本地的目标文件
    2. Rewrite功能适合对网络请求进行一些正则替换

      1. 修改网络返回值,查看端上显示
    3. Breakpoints功能适合做一些临时性的修改

    弱网测试

    在 Charles 的菜单上,选择 “Proxy”–>“Throttle Setting” 项,在之后弹出的对话框中,我们可以勾选上 “Enable Throttling”,并且可以设置 Throttle Preset 的类型。如下图所示:

    只想模拟指定网站的慢速网络?

    可以再勾选上图中的 “Only for selected hosts” 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。

    无接口文档时测接口

    • 在linux中find和grep的区别?

      • grep正则表达式搜索文本,匹配条件的行

      • find 目录结构中搜索文件,并执行指定操作 ,匹配条件的文件;

    • 数据库的三大范式

      • 第一范式:每个列都不可以再分

      • 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能依赖主键的一部分

      • 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖其他非主键。

    • 什么是索引?

      • 一种数据结构。排序,以协助快速查询、更新数据库表中数据,通俗的说,索引相当于目录,为了方便查找书中的内容

      • 类型

        • 主键索引、唯一索引(unique)、普通索引(index)、全文索引(fulltext)
      • 创建索引的原则?

        • 最左前缀原则,

        • 较频繁作为查询条件的字段才去创建索引

        • 更新频繁的字段不适合创建索引

        • 若是不能有效区分数据的列不适合做索引列(如性别,选项较少区分度低)

        • 尽量扩展索引,不要新增索引 a——>(a,b)

        • 定义有外键的列一定要建立索引

        • 定义位text、image、bit的数据类型的列不要建立索引

      • 创建方式

        • 在执行create table时创建索引

        • 使用alter table命令去增加索引

        • 使用create index命令创建

      • 删除索引:alter table 表名 drop key 索引名

    • 百万级别或以上的数据如何删除

      • 先删除索引(大概耗时三分钟),然后删除无用数据(不到两分钟),重新创建索引(约十分钟)
    • B树和B+树

      • B树:键和值存放在内部节点和叶子节点,各自独立,大大提高查询效率,在特定数据重复多次查询的场景中更加高效

      • B+树:内部节点都是键没有值,叶子节点同时存放键和值有一条链相连,更快缩小查询范围

    BUG跟踪

    1、平台(jira)

    2、填写字段

    3、流程

    接口测试

    介绍

    • 接口测试:针对软件对外提供服务的接口输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能和接口描述文档的一致性。

    • 好处:系统测试更加彻底,更高的保障产品质量,更早发现底层问题,修改和维护代价小

    • 怎么测:接口测试时主要通过工具或代码模拟http请求的发送与接收。工具如:postman、apitest等。也可以用接口自动化来实现,发送请求用断言来判断。

    • 流程:

      • 获取接口信息:接口文档、抓包获取接口的基本调用方式和返回

      • 测试用例设计:根据测试方法设计参数和预期返回接口

        • 单一接口:参数(数量、必填、长度、格式、为空、错误参数)、权限、返回值、异常值、断言、错误码测试(code、提示、通用、业务错误)

        • 业务接口:新增、删除、查询、编辑后的参数变化、前置函数、后置函数

        • 兼容性测试:新接口、旧的调用方式

        • 性能测试:响应时间、并非用户数

        • 安全性测试:信息加密、必要参数校验、SQL注入

      • 接口发包:用工具或者变成向接口传递参数

      • 返回参数验证:获取接口返回结果,进行解析和验证

    • 关注点

      • URL地址

      • Method方法

      • 请求头

      • 请求参数

        • form-data:键值对、文件参数传递

        • x-www-from-urlencoded:键值对形式发送表单参数

        • raw:请求体格式,Content-type类型

        • binary:可上传二进制文件内容

    • 手工接口测试或自动化接口测试的过程中,上下游接口有效数据依赖怎么处理?

      • 用一个全局变量来处理依赖的数据,比如登录之后返回的token,其他接口需要则用全变量来传递token参数
    • 常见的接口测试的bug?

      • 接口未显示,没按约定返回结构,边界值处理出错等。

      • 输入异常值(空值、特殊字符、超过约定长度等)、接口抛错,没做封装处理;

      • 输入错误的参数、多输入、少输入参数、接口可能出现错误;

      • 安全性问题,明文传输、返回结果有敏感信息,没做用户身份校验、没做恶意请求拦截;

      • 性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈;

    • 依赖登录状态的接口如何测试?

      • 每次需要带上seesion或者cookie才能发送成功,在构建POST请求时添加必要的seesion或者cookie。
    • 当一个接口出现异常时,你是如果分析异常的?

      • 先抓包,或者浏览器F12调试工具;手机设置代理抓包。

      • 查看后端日志,如linux系统通过xhell连上服务器,查看接口日志,查看是否有报错信息(tail -f 日志文件)

    • 分析bug是前端还是后端?

      • 请求报文,是前端

      • 请求返回,是后端

    • HTTP与HTTPS协议的区别?

      • HTTPS协议需要到CA申请证书,免费证书较少;

      • http是超文本传输协议,信息是明文传输,端口80;

      • https是由ssl+https协议构建的可进行加密传输、身份认证的网络协议,比http安全,端口443;

    • cookie和seesion的区别

      • cookie数据存放在客户的浏览器上,不是很安全,单个不能超过4k,最多保存20个

      • seesion数据放在服务器上,有一定时间保存、访问增多,占用服务器性能,一般登录使用

    • 什么是DNS?

      • 域名系统,用来做域名解析的,输入网址后把它转换成IP,然后去访问服务器;
    • 你们是怎么做接口测试的?

      • 时间

      • 流程

      • 用例

      • bug跟踪

    工具的使用

    链接:请求一个需要登录才能访问的接口(基于COOKIE) - APIPOST使用文档

    1. 填写名称、URL、选择method、填写参数、设置环境变量

    2. 预执行脚本

      apt.globals.set("key", "value"); 设置全局变量
      apt.globals.get("key");
      apt.globals.delete("key");
      apt.globals.clear(); 
      apt.variables.delete("key");    设置环境变量
      apt.variables.clear();
      apt.setRequestQuery("key", "value");  设置一个请求query
      apt.setRequestHeader("key", "value");
      apt.setRequestBody("key", "value");//只针对 form-data、urlencode有效
      发送一个请求
      $.ajax({
      "url":"https://echo.apipost.cn/token.php",
      "method":"POST",
      "async":false,
      "content-type":"appicateion-json",
      "data":JSON.stringify({
      "email":"[admin@admin.com](mailto:admin@admin.com)", 
      "password":"密码"
      }),
      "success":function(response){
      console.log(response);
      apt.variables.set("token", response.token);
      }
      });
      
      MD5加密
      CryptoJS.MD5('待加密字符串').toString()
      base64加密
      CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse('待加密字符串'))
      base64解密
      CryptoJS.enc.Base64.parse("待解密字符串").toString(CryptoJS.enc
    3. 后执行脚本

      apt.assert('response.raw.responseText=="test"'); 响应内容是否为test
      apt.assert('response.raw.status==200'); 响应码是否为200
      apt.assert('response.raw.type=="json"'); 响应内容格式是否为json
      apt.assert('response.raw.responseTime>=100'); 响应时间是否>100ms
      apt.assert('response.json.errcode==1'); 响应json对象的errcode是否为1
      apt.assert('response.headers["server"] == "nginx"');
      apt.globals.set("key", "value");
      apt.assert('response.headers["content-encoding"] == "gzip"');
    4. mock数据

      1. 填写mock url相对地址

      2. 利用apipost发送mock url

      3. 将生成的mock url 发送给前端

    5. 示例

      1. 解决参数依赖、接口之间传递数据

        1. 将A接口返回的数据通过后执行脚本赋值给一个全局变量或者环境变量
      2. 解决一个需要登录才能访问的接口(基于cookie)

        1. 方案一:开启全局cookie的功能

        2. 请求登录接口

        3. 访问其他接口

        4. 方案二:利用环境变量,先请求登录接口,再请求后续接口

  • 相关阅读:
    sql查询原理和Select执行顺序(sql优化)
    SQL Server如何清除连接过的服务器名称历史?
    SQL Server DATEDIFF()
    oracle 创建用户、表空间
    IDEA 快捷键
    (Reflection)反射
    ClassLoader
    简单代码// 求质数
    简单代码 //输入三个数求最大值.
    简单代码 //输入两个数加减乘除。
  • 原文地址:https://www.cnblogs.com/huilianglog/p/16007238.html
Copyright © 2020-2023  润新知