测试常用分类

按阶段划分

  1. 单元测试:针对程序源代码进行测试
  2. 集成测试:又称接口测试,主要针对模块与模块或系统与系统之间的接口进行验证
  3. 系统测试:针对软件全面进行验证(功能,兼容性,文档)
  4. 验收测试:使用内测,公测来实现
    • 内测:公司内部进行验证
    • 公测:让玩家来进行测试

按代码可见度划分

  1. 黑盒测试:看不见源代码,主要对程序功能进行测试

  2. 灰盒测试:看见部分代码,主要对程序接口进行测试

  3. 白盒测试:看见全部代码,主要对程序源代码进行测试

    扩展-总结

    • 系统测试和黑盒测试重点核心是功能测试
    • 集成测试和灰盒测试又称接口测试
    • 单元测试和白盒测试是对代码进行测试
    • 自动化测试归属功能测试
    • 性能测试、安全测试归属专项测试

    扩展-测试策略

    • 冒烟测试:大规模测试之前,针对程序主功能进行测试,保证程序具备可测试性。
    • 面试题:提测试标准时什么? – 冒烟测试通过!测试之前要怎么做?–冒烟测试。

模型

  • 质量模型
  • 测试模型

质量模型

学到了什么?–针对任何软件或硬件,测试要覆盖的方面

重点:功能、兼容、性能、易用性、安全

W模型

学到了什么?–软件开发流程、软件测在开发的作用

开发流程:需求分析、概要测试、详细设计、编码、集成、实施、交付。
测试流程:单元测试、集成测试、系统测试、验收测试。

测试流程

  1. 需求分析

  2. 测试计划

  3. 编写用例

  4. 执行用例

  5. 缺陷管理

  6. 测试报告

    • 需求分析

      前置:阅读需求分析文档,记录不明确之处。

      1. 确定各部门对需求一致。
      2. 站在不同角度对需求进行检查(查漏补缺)。

HTML + CSS

  1. 单选按钮

    1
    2
    3
    4
    <!-- type="text"文本框,placeholder文字内容 -->
    输入框:<input type="text" placeholder="请输入用户名" /><br>
    <!-- type="radio" 单选,name属性,checked="checked"选择 -->
    <input type="radio" name="name" id="baomi" checked="checked"><label for="baomi">保密</label>

    type=”radio”

    注:如果想文字可以点击切换,那么加 label 标签,并且设置 for 属性和对应的单选按钮的 id 属性值一致,必须给这一组单选框添加 name 值,才可以实现单选效果,设置默认选中状态,要给单选框按钮添加 checked="checked"

  2. 下拉菜单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    地址:<select name="" id="">
    <optgroup label="---分类一---">
    <option value="">1</option>
    <option value="">2</option>
    <option value="">3</option>
    </optgroup>
    <optgroup label="---分类二---">
    <option value="">1</option>
    <option value="" selected="selected">默认选择</option>
    <option value="">3</option>
    </optgroup>

    selectoption 的组合:

    注:如果想设置多组下拉菜单,需要添加一个optgroup 标签,并设置 label 属性做为提示文字,如果没有默认选中状态,需要给对应的 option 添加 selected 属性。

面试理论

面试基础

用例用什么软件工具好?

testlink,禅道(比较多)

测试环境怎么搭建?

测试管理工具的搭建(禅道)、项目(tomcatappache),LR,jmeter

怎么介绍项目比较?

项目环境(软件+硬件)

项目业务(一个直播系统。主要功能:在线直播,在线考试,在线交流,咨询等功能)

测试流程

特色:性能很好,稳定性好

你在里面角色,设计用例,提交bug

软件测试的流程?

考察目的:软件测试基础

参考:需求分析(需求是否合理、需求是否可测试)->测试计划(人、时间、业务点、资源)->测试设计(写标题,测试用例)->冒烟测试(准入测试)->全面开展测试(测试执行:测试环境搭建)->bug提交->新版本发布(bug有没有验证、新功能测试、回归测试)->测试报告总结。

web测试和app测试的区别?

考察目的:你对webapp的认识

参考:网页(PC,手机),app(手机),web,app(混合APP,纯APP)

共同点:兼容性,客户端

不同点:app手机,耗电量,网络差

如何提交高质量的缺陷报告单?

考察目的:软件bug

参考:

  1. bug可读性(把复现步骤写清晰,发现bug的环境记录详细)

  2. 深层次

    • 学习人家的bug

    • 竞争条件的地方,经常出现问题的地方

web如何进行性能测试?

考察目的:web性能评估

考察目的:

  1. web系统性能指标是什么(性能测试评估)
  2. 我们项目web系统,httpjmeterLR;jmeter
  3. 我们要测试哪些业务(业务建模)
  4. 监控
  5. 记录并且调试

你们是如何编写测试用例,根据什么来编写的?如何保证用例的覆盖度?

考察目的:测试用例编写和方法,工具,对业务需求的把握

参考:我们根据需求(需求说明书、之前的产品、同品,软件规范、经验值)编写用例(UI、功能、兼容性、安全、性能、稳定性、易用性),用到什么方法(测试用例设计方法)

工具:1.表格 2.freemind 思维编写 3testlink,禅道

覆盖度:需求分析(需求是否合理、需求是否可测试)->测试计划(人、时间、业务点、资源)->测试设计(写标题,测试用例)->冒烟测试(准入测试)->全面开展测试(测试执行:测试环境搭建)->bug提交->新版本发布(bug有没有验证、新功能测试、回归测试)->测试报告总结。

例子:设计一个电梯的测试用例

  1. 需求(用途,用在什么场合)
  2. 功能
  3. 容量(容错,安全,解除,红外线感应,提示,告警)
  4. 稳定性
  5. 通风,速度

接口测试

一、接口测试用例设计需要考虑哪些方面?(理论)

  1. 考虑输入的合法性:参数必填,默认值,参数长度或类型效验,边界等(例:图片上传考虑图片的大小和格式,查询考虑数据排序,分页考虑数据分页显示等)。
  2. 链路接口考虑业务逻辑。
  3. 数据库效验。
  4. 兼容性(APP多个版本)。
  5. 安全性(鉴权,敏感信息加密)
  6. 性能(TPS,响应时间)。
  7. 幕等性(调用1次和10000次结果一样)。

二、你们是怎么做接口测试的?(接口测试流程)

  1. 获取接口文档。熟悉单接口和链路接口,包括地址,方式,鉴权,入参,出参,错误码等。

  2. 编写接口测试用例以及评审(三方会审)。

    正例:单接口是返回成功,链路接口返回成功。

    反例:

    1. 鉴权反例:鉴权码必填,错误,已过期。。。(鉴权:鉴定是否有访问接口的权限)。
    2. 参数反例:必填,类型异常,长度异常。。。
    3. 错误码反例:根据接口文档而定
    4. 其它反例:接口黑名单,接口次数限制,分页场景(当前页,每页条数)。
      • 分页:查询订单接口,99条数据,currpage=10,pagenum=10
    5. 兼容性:(一个接口对应多个版本的APP
  3. 使用接口工具(jmeterpostmanapifoxsuopUI)等工具实施接口测试,有bugbug

    考虑:关联,加密,动态参数,签名等。

  4. 持续集成(自动的获取脚本并且子的执行,自动的生成报告,自动发送报告)

    • jmeter+ant+jenkins+git
    • postman+newman+jenkins+git

三、cookiesessiontoken有什么相同点和不同点。

相同点:

三者都是为了实现鉴权,并且都是由服务器生成的。

不同点:

生成时间:cookie是第一次访问服务器生成,session每一个登录生成,token一般是由一个单独的接口生成。

保存位置:cookie保存包客户端,session保存在服务器内存(默认30分钟的生命周期),token保存在服务器的硬盘(生命周期为2小时比较多)

安全方面:cookie不安全,session相对安全,token比较安全。

长度安全:cookie最大4k,sessionid没有限制,token没有限制。

四、你平常做接口测试的过程中发现过哪些bug?多吗?

接口测试发现的bug,一般都是接口没有按约定返回数据,参数必填,参数长度,类型没有校验,包括边界值,代码逻辑,数据错误,或没有返回合理的错误提示,没有鉴权。

前后端联调阶段接口的bug非常多。

例:

查询商品列表接口:前端调用的是mock的三条数据,前端调后端接口时分页是否又问题。

下订单的接口:商品价格应该0以上,接口测试时改成负数,发现余额增加了。

修改商品接口:按需求只有卖家才可以修改,我们传入一个普通用户可以修改。

在接口冒烟测试和回归测试阶段发现的 bug 就很少。

五、你在接口测试中是怎么效验接口返回结果是否正确?

我们这么做的,接口用例中一般又两种断言:1.状态断言(一个)。2.就业断言(多个)

  1. 验证接口返回码为200。
  2. 当接口返回的报文比较少的情况下,那么就会使用相等断言。
  3. 当接口返回的报文比较多的情况下,那么就会使用包含核心的业务关键字。
  4. 我们返回的是JSON格式的数据,一般会使用响应断言和JSON断言。
  5. 像我们有数据驱动的接口,那么一般会使用BeanShell断言。
  6. 针对一些接口的业务流,就会去调查数据库校验最核心的业务流完成的标识段。

六、一个接口请求不通过该如何排查?

  1. 检查请求四要素:请求方式,请求路径,请求路径,请求头。
  2. 客户端和服务器之间的网络是否通(ping),甚至服务器的项目都没有部署好。中间件服务没有启动。
  3. 检查服务器的防火墙。
  4. 确定鉴权码是否有效。
  5. 左手打开Fidder,右手打开Jmeter做接口测试。
  6. 绑定hosts(本机上)。

七、接口测试中的加密或签名的接口如何处理?

  1. 首先了解接口的接口的加密方式(加密一般是参数,签名一般是请求头)
    • base64,md5,sha系,rsa
  2. 查看接口测试工具是否支持当前加密方式,如果支持的话,直接使用对应的加密方法对参数进行加密传输即可,如果加密方式工具不支持(内部的算法,自定义的算法),我们开发会给我们一个jar包,我们只需要在jmeterbeanshell里面调用这个jar里面的加密算法实现加密算法实现参数加密即可。
    • 接口内部代码:admin md5 WRWETWETWETWETEwer
    • 前端接口工具:admin admin WRWETWETWETWETEwer

八、工作中常用的jmeter自带函数有哪些?

__random

__randomstring()

__time()

__md5()

__setpropty() 跨线程组保存属性

__propty() 跨线程组获取或者设置属性的值

__p() 跨线程组获取属性的值

  1. 获得鉴权码(只执行一次) 线程组1
  2. N个接口(执行N次) 线程组2

九、Postman中常见的POST提交数据方式有哪些?有什么区别?

  1. application/x-www-form-urlencoded 表单
  2. multipart/form-data 表单+文件上传
  3. application//json(text/plain,text/xml) json,text,xml,js,html
  4. binary 二进制

十、抓包如何定位前后端的BUG

抓包看请求报文和响应报文,如果请求报文有问题就是前后端的bug,如果请求报文没有问题,然后返回报文有问题就是后端问题。

参照物是页面数据。

  1. 你是不是要在页面提交数据。
  2. 抓包。
  3. 重点是返回报文(也是页面数据)。

为什么做接口测试?

前后端开发架构:前端的数据来自Mock

功能测试:界面。仅仅只是测试界面远远不够。

全面的功能测试之前保证接口没有问题。

面试:

  1. 实战
  2. 技能