这里写自定义目录标题
接口基础
单元测试
单元测试是组织代码的最小单元,组织代码的方式有:包、类、模块、函数,最小单元就是函数或者类下面的方法
接口
-
接口的定义:接口是系统各个组件间的一种接口,接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点,测试重点主要是检查数据的交换、传递和控制管理的过程,以及系统间相互逻辑依赖的关系。
-
为什么要做接口测试 :
①底层发现的bug,修复的成本低
② 检查系统的安全性,稳定性,前端传参不可信
③检查系统的异常处理能力
④可以修改请求的参数,突破前端页面输入的限制,如金 额,登录次数,发送短信验证码 -
接口的作用 :实现前后端的交互,实现数据的传输
网络协议
- 协议的定义 :计算机为了实现网络通信而达成的一种约定或者规则
- 接口协议 :
① http协议
② webservice协议
③ webscoket协议
http请求协议
- 定义 :超文本传输协议(Hyper Text Transfer Protocol),是一个简单的请求响应协议
- 特点 :
① 灵活,参数可以支持任意类型:json,form表单,xml,html等
②简单快速,只需要传一个请求的地址和请求的方法,通信速度快,就能给到响应的数据
③无连接,每次连接值处理一个请求,请求完成后,就会断开
④ 无状态:每次都会重新请求 - http请求的内容:
① 请求头:url,请求的方法(get,post).content_type:请求的格式
② 请求体:text、json、 form表单
③ 响应头
Content-type:响应格式
Set-cookie:name=XXX
④ 响应体:text,html,json - http请求的方法:
① post
②get
③put
④patch
⑤delete - get和post的区别:
①get是向服务器请求数据,post是向服务器发送数据,可以创建或者修改服务器上的数据
② get没有请求体,post有请求体
③get可以将请求放在url中,post不仅可以放在url中,也可以放在请求体中
④post的请求没有暴露在外面,get请求一般将请求放在url中,故post请求比get请求稍微安全点 - http请求状态码:
① 100 -客户端可以继续想服务器发送请求
② 200 -请求成功
③201 -请求被创建成功
④202 -处理的请求已被接口,但未处理完成
⑤300 -重定向
⑥ 400 -服务未能理解的请求
⑦ 401 -请求的页面需要用户名和密码
⑧ 403 -请求的页面被禁止
⑨404 -服务器无法找到对应的页面
⑩ 500 -服务器遇到不可未知的错误
11、504 --网关超时
12、505 --服务器 不支持请求中的http协议版本
面试被问到是如何做接口测试的?
- 一般做接口测试,会用到接口测试工具jmeter或者postman任何一种都可以:
- 拿到接口文档,先熟悉接口文档,以及每个接口实现的功能,接口的地址,请求方式,请求参数,参数的约束,熟悉响应的数据,正确的响应码和错误的响应码
- 编写接口测试用例
① 业务功能用例
②边界值分析
③异常情况(重复提交,参数为空的判断)
④安全测试,敏感信息是否加密 - 执行用例
用jmeter建立一个线程组,再添加http请求,填写和请求的地址,请求的方法,参数,设置接口测试数据,设置参数化,添加断言,添加一个查看结果树,运行接口,运行完成后,检查接口是否通过,如果不通过,先定位问题,是否是参数请求有问题,如果参数有问题,修改参数再次运行,如果是接口本身存在问题,提交bug给开发,把服务器上的日志取下来,提交bug给开发 - 编写接口测试报告
接口测试常见的问题?
- 传入参数不正确,导致接口异常:
- 权限未设置,可以访问其他用户的敏感信息
- 状态码不正确
- 逻辑校验不完善
http和https协议的区别:
http是超文本传输协议,客户端与服务端的交互是明文传输的,端口是80
https是http+ssl结合的传输方式,客户端和服务端的交互是加密传输的,比较安全,一般需要安装证书,端口一般是443
接口的参数
url,请求的方法、请求参数,响应体
用户信息认证
cookie、session token的区别:
1.token是开发自定义的,session是http协议定义的标准
2.token不需要存储起来,不需要占用服务器的资源,session需要存储在服务器上,一般会占用服务器的资源
3.cookie和session的共同之处就是都是用来跟踪浏览器用户身份的会话方式
4.Token是可以跨平台的,(手机,电视,盒子),session不能跨域
接口自动化
什么样的项目适合做自动化
- 需求稳定,不会频繁变更的项目:
- 研发和测试周期长,需要频繁的进行回归测试
- 需要在多平台上运行相同的测试场景
- 手工测试成本高
- 被测软件的开发较为规范,能够保障系统的可测性
接口自动化测试的流程
1. **需求分析**
2. 测试计划(什么时候完成,用什么做自动化,优先级)
3. 测试用例的编写(Excel)
4. 用例的评审
5. 编写自动化脚本
6. 用例执行
7. 测试报告输出
接口自动化框架设计
-common:项目通用模块管理,如日志模块,Excel操作模块,数据库操作模块,读取配置文件操作模块
-config:存放配置文件,负责测试报告和测试日志路径的模块
-data:负责测试用例的管理
-logs:负责测试日志的管理
-reports:负责测试报告的管理
-test:负责测试用例的管理
-.gitignore:提交git时需要忽略的文件
-run.py:项目入口,主程序,负责收集用例,运行用例,生成报告
-readme.md:项目说明文件
自动化框架的作用是什么?
1.提高测试效率,降低维护成本
2.减少人工干预,提高测试的准确性,增加代码的重用性
3.不懂代码的人可以拿自动化测试框架去实现自动化测试
你做过的自动化框架主要包含哪些容?
数据驱动、关键字驱动、全局配置文件的封装、日志的封装、Excel的封装、断言、报告邮件,Jenkins持续集成
面试时被问到如何搭建自动化测试框架?
使用的技术:python+pytest+requests+openpyxl+pymysql+logging+yaml+allure+Jenkins
首先创建一个项目,接下来创建项目的目录结构:
-common:项目通用模块管理,如日志模块,Excel操作模块,数据库操作模块,读取配置文件操作模块
-config:存放配置文件,负责测试报告和测试日志路径的模块
-data:负责测试用例的管理
-logs:负责测试日志的管理
-reports:负责测试报告的管理
-test:负责测试用例的管理
-.gitignore:提交git时需要忽略的文件
-run.py:项目入口,主程序,负责收集用例,运行用例,生成报告
-readme.md:项目说明文件
接口自动化如何进行数据驱动?
测试框架pytest中自带数据驱动:是 通 过 @pytest.mark.parametrize(argnames,argvalues) 来实现
接口自动化中遇到接口依赖怎么处理?
①使用pytest框中的conftest.py模块来设置前置条件,使用如下:
import pytest
@pytest.fixture()
def login():
pass
②提取响应结果中的字段值,将请求的一个结果反射到一个类属性(setter(类,属性名,属性值)函数)
自动化测试如何校验结果的正确性?
使用pytest中的assert断言,将响应结果中的code值跟测试用例中的预期结果进行比对
如下代码
assert expected == reps_data['code']