测试基础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 抓包使用教程 - 木木文 - 博客园]
连接代理
-
手机连接代理
-
proxy settings
-
设置端口号8888
-
查看本地IP地址:help-ssl proxying- install root
-
手机打开wifi-HTTP代理- 配置代理 - 手动
-
填写 服务器ip和端口号port
-
对应Charles 显示是否支持抓取
-
安装证书
-
输入网址 chls.pro/ssl 下载安装
-
信任证书
-
-
过滤请求
-
filter填写关键字过滤
-
在 Charles 的菜单栏选择 “Proxy”–>“Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了
-
在请求右击,点击focus
修改服务器返回内容
-
MAP功能适合长期地将某一些请求重定向到另一个网络地址或本地文件
-
Map remote 将指定的网络请求重定向到另一个网址请求地址
- 填写网络重定向的源地址和目的地址,
-
Map Local 将指定的网络请求重定向到本地文件
- 填写重定向的源地址和本地的目标文件
-
-
Rewrite功能适合对网络请求进行一些正则替换
- 修改网络返回值,查看端上显示
-
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使用文档
-
填写名称、URL、选择method、填写参数、设置环境变量
-
预执行脚本
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
-
后执行脚本
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"');
-
mock数据
-
填写mock url相对地址
-
利用apipost发送mock url
-
将生成的mock url 发送给前端
-
-
示例
-
解决参数依赖、接口之间传递数据
- 将A接口返回的数据通过后执行脚本赋值给一个全局变量或者环境变量
-
解决一个需要登录才能访问的接口(基于cookie)
-
方案一:开启全局cookie的功能
-
请求登录接口
-
访问其他接口
-
方案二:利用环境变量,先请求登录接口,再请求后续接口
-
-