1.熟悉软件测试流程,能够独立完成软件测试相关工作
软件测试流程:首先由公司高层进行立项,产品给出产品说明书,需求人员进行需求分析,接着进行需求评审(参加人员:项目组里的人,产品,需求,研发,测试),开发进行概要设计和详细设计,测试人员根据需求文档编写测试用例,测试用例评审,如果改动较大的话还要进行二次评审。评审完成后开发进行编码,测试进行部署测试环境进行测试,首先进行冒烟测试(主功能),然后进行功能测试,遇到bug利用禅道进行跟踪记录,开发进行修改,测试进行验证,然后进行回归测试,然后进行验收测试,最后将各个文档交给运维人员进行部署上线。(交给运维人员的一般有,需求文档,测试报告,前后端代码包,版本号等等)
2.灵活运用各种方法编写测试用例
等价类划分,边界值,场景法,正交表,错误推测,因果图,判断表。
1)等价类划分:注册密码长度在618位数字字母注册:有效等价类:618数字和字母组成的,无效等价类: 小于6位,大于18位,6~18纯数字,纯字母,特殊符号,空格等。
2)边界值:注册密码长度6~18位可以选取5,6,18,19位进行边界测试。
3)场景法:ATM取款机取钱,梳理流程:插入合法的卡-输入正确密码-输入合法金额-余额充足-ATM金额充 足-取款;插入不合法的卡-退卡;插入合法的卡-输入错误密码-提示输入密码;等。
4)错误推测:手机拨号失败:考虑可能是手机没有卡,手机欠费,手机没有信号,手机通讯服务有问题 等。
5)因果图和正交表:投币买饮料:投入不同的硬币,选择不同的饮料,最终给你返回硬币和饮料。
3.测试用例模板
用例编号,用例模块,用例标题,前置条件,优先级,操作步骤,输入数据,预期结果,实际结果。
4.缺陷报告模板
缺陷编号,缺陷状态,缺陷标题,重现步骤,严重程度,优先级,缺陷类型,测试环境。
5.禅道的缺陷报告
缺陷报告中包含:所属产品,所属模块,所属项目,指派人员,截至日期,bug类型,测试环境,bug标题,严 重程度,优先级,重现步骤。(操作步骤,预期结果和实际结果)
6.测试报告模板
测试目的,测试依据,测试范围,测试环境,实际进度,几轮回归测试 ,遗留缺陷 ,等级,如何解决,测试结论。
7.接口测试模板
用例编号,所属模块,用例功能,请求方式,请求头,请求体,请求路径,请求参数,预期结果,实际结果。
8.测试计划模板
测试背景,测试目的,确定测试范围,制定测试策略,测试资源安排,人员的分配,时间安排,风险评估。
Postman
接口流程
拿到后端开发提供的接口文档,分析接口中的功能,请求方式,请求头,请求参数(参数是否必填,类型,长度,是否唯一等),编写接口测试用例,最后使用postman工具进行接口测试。
1.全局变量
通常情况下,我们共同使用的部分可以存放在全部变量里,调用的时候只需要{{变量名}}即可,适用全部的接 口
2.接口关联
将第一个接口设置断言,拿到返回体内容转成json对象,通过json表达式提取想要的值,将这个值设置全局 变量,在第二个接口中使用{{变量名}}代替,实现接口关联
// 获取响应体的文本内容
var resbody = responseBody;
console.log(resbody)
// 转成json对象
var jsonobj = JSON.parse(responseBody)
// 通过json表达式提取值
var pro = jsonobj.result.province
pm.globals.set("prodes", pro);
3.断言
用于预期结果和实际结果的对比
Tests响应断言的几种方式 :
(1)Status code:code is 200 (校验响应头是否包含某个值)
(2)response body:contains string (校验返回结果中是否包含某个字符串)
(3)response body:Json value check (校验返回结果中某个字段是否等于某个 值)
(4)response header:content-type header check (校验响应头是否包含某个值)
(5)response time is less than200ms (校验响应时间是否少于200ms)
(6)response body:Is equal to string (校验返回结果中是否等于该字符串)使用少
4.用例的批量执行
将测试数据保存本地,一次性进行运行,在参数里面的数据文件值和取全局变量一致,使用{{}},在断言里面 取数据文件的值使用:data.字段名。
5.接口自动化测试
我在公司使用的是postman,newman和jenkins做接口自动化测试 首先将接口填充在postman中调试导出脚本(.json脚本) 安装nodejs和Newman,最近在dos命令中通过newman命令执行生成测试报告(newman命令:newman run 脚本.json -r html --reporter-html-export html路径) 最后在Jenkins中新建项目,设置定时任务时间,在调度任务中添加window 命令(Newman命令),最后定时 执行任务生成测试报告。
协议
Web测试和APP测试相同点:
· 设计测试用例时,依然都是依据边界值分析法、等价类划分等
· 需要检查界面的布局、风格和按钮等是否简洁美观、是否统一等
web和app测试,单从功能界面测试来说,没有什么差异。有差异的主要是以下几点:
· 结构:
web端,是B/S架构的,服务端有修改的话,客户端会同步更新
app,是C/S架构的,如果服务端有修改的话,客户端必须更新,核心版本的客户端都要重新回归测试
· 性能指标:
web端:响应时间、CPU、内存、吞吐量
app:响应时间、CPU、内存、吞吐量、手机流量、手机电量
· 兼容
web端:浏览器兼容;PC端的操作系统(windows、mac、linux)
app:手机操作系统(安卓、ios、windows);手机型号;分辨率(手机屏幕大小)
· 相对于web,app有一些专项测试
中断测试(来电、信息、其他应用)
弱网络测试、网络切换测试
安装、更新、卸载
· 自动化测试工具
app:appium
web:selenium
· 界面操作
web端:屏幕放大缩小等
app:手势、手机横屏竖屏、触控等测试
· 安全测试
web:敏感信息泄露、跨站脚本、sql注入
app:访问通讯录、相册、相机
网络的七层协议
物理层:物理接口规范,传输比特流,网卡是工作在物理层的。
数据层:成帧,保证帧的无误传输,MAC地址,形成EHTHERNET帧
网络层:路由选择,流量控制,IP地址,形成IP包
传输层:端口地址,如HTTP对应80端口。TCP和UDP工作于该层,还有就是差错校验和流量控制。
会话层:组织两个会话进程之间的通信,并管理数据的交换使用NETBIOS和WINSOCK协议。QQ等软件进行通讯因该是工作在会话层的。
表示层:使得不同操作系统之间通信成为可能。
应用层:对应于各个应用软件,应用程序。
三次握手,四次挥手
三次握手
1.客户端向服务端发送请求连接
2.服务端收到请求发出收到请求,可以连接
3.客户端收到请求向服务端发送收到,连接成功
四次挥手
1.客户端向服务端发送请求连接
2.服务端收到请求后发出收到请求,可以连接
……数据传输中
3.数据传输完毕后,服务端请求断开
4.客户端收到请求,发出断开消息。OK
数据库操作
1.数据库分类
关系型数据库:mysql,sql server,oracle,sqlite,db2…
非关系型数据库:redis,mongodb
2.sql的分类
DDL,DML,DQL
3.具体操作
DDL中操作
库操作:
新增库:create database 库名;
查询创建库的语句:show create database 库名;
删除库:drop database 库名;
使用库:use 库名;
表操作:
新增表:create table 表名(字段名 类型(长度),字段名 类型(长度));
查询创建表的语句:show create table 表名;
查询表结构:desc 表名;
删除表:drop table 表名;
表字段的新增:alter table 表名 add 字段名 类型(长度);
表字段的删除:alter table 表名 drop 字段;
表字段的修改:
alter table 表名 MODIFY COLUMN 字段名 类型(长度); ------修改表中字段长度
alter table 表名 change 旧字段名 新字段名 类型 长度-------修改表中字段名
MML中操作
新增数据:
Insert into 表名 values (字段值,字段值,字段值,,,);
Insert into 表名 values (字段值,字段值,字段值,,,),(字段值,字段值,字段
值,,,),(字段值,字段值,字段值,,,)
修改数据:Update 表名 set 字段名= 新值,字段名= 新值 where 条件;
删除数据:
Delete from 表名 where 条件
Delete from 表名
DQL中操作
查询数据:
Select * from 表名 查询全部数据
Select * from 表名 where 条件 查询指定数据
查询在某某之间的数据:SELECT * from 表名 where 字段 BETWEEN X an d XX;
模糊查询:Select * from 表名 where 字段 like ”%数据%”
排序:
Select * from 表名 order by 字段 正序
Select * from 表名 order by 字段 desc 倒序
分组:Select * from 表名 group by 字段 having 条件
统计次数; max() 计算最大值; min() 计算最小值; avg() 计算最小值 ; sum() 求和
分页:Select * from 表名 limit 起始位置,显示个数
两个表联查
Select 表1.字段,表2.字段 from 表1 inner join 表2 on 表1.字段=表2.字段 where 条件
三表联查
Select 表1.字段,表2.字段,表3.字段 from 表1 inner join 表2 on 表1.字段=表2.字段
inner join 表3 on 表1.字段=表3.字段 where 条件
sql优化语句:
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
3.不要写一些没有意义的查询,如需要生成一个空表结构。
4.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,
其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
5.避免使用*,in,not in !=等等,可以较多的使用Count。
Linux
1.Linux命令
目录
新增 mkdir 目录名
修改 mv 目录名 新目录名 剪切 mv 目录名 路径
复制 cp 目录名 路径
删除 rm -rf 目录名
查看 ls ls -a ls -l==ll find / -name ”目录名”
文件
新增 touch 文件名
删除 rm -rf 文件名
修改 vi/vim i/o/a Esc Shift+: wq保存并退出 q! 强制退出
查 cat/more/less/tail/head
查询底部多少行 tail -n 文件名
查看前多少行 head -n 文件名
过滤查询 grep error/exeption 文件名
动态查询日志 tail -f 日志名
打包 tar -zcvf 文件名.tar 目录名/文件名
解压 tar -xvf 文件名.tar 指定解压路径 tar -xvf 文件名.tar -C 路径
进程
全都:ps -ef
某一个 :ps -ef | grep 进程名(tomcat/mysql)
杀:kill -9 pid
端口
全部:netstat -an
某一个 :netstat -an | grep 端口号(3306/8080)
网络
ping www.baidu.com
ping 内网ip
查询ip
ifconfig(linux) ipconfig(window)
查看资源信息
cpu:top
内存:free
磁盘:df -h
权限
su root
chmod 777(rwx) 文件名
2.Linux环境部署
安装jdk,tomcat(配置环境)
1:从公司的工具库中拿到jdk.tar,tomcat.tar包
2:通过远程连接工具(ssh/xshell)连接Linux服务器,将jdk和tomcat上传到服务器上
3:首先解压jdk.tar包(tar -xvf),将解压的之后的jdk路径填写在配置文件中
4:重启配置文件
5:通过Java -version 判断是否安装成功,安装成功则显示jdk的版本信息(1.8.0的版本)
6:jdk配置成功之后,接下来解压tomcat.tar包(tar -xvf )
7:开放8080端口
8:在tomcat中的bin目录在,启动(./startup.sh),
9:在游览器中输入ip:8080,可以检验tomcat是否成功启动(如果tomcat没有启动,可以通过ps -ef | grep tomcat 查看tomcat进程是否开启,如果没有开启,,再次执行启动tomcat命令)
项目部署(web端项目)
1:将开发的压缩包(.tar),解压之后,放到tomcat中的webapps目录下,重启tomcat(./startup.sh)
2:在游览器中输入ip:8080/解压后名称,查看项目
安装MySQL
1:从公司的工具库中拿到mysql.tar包
2:通过远程连接工具(ssh/xshell)连接Linux服务器,将mysql压缩包上传到服务器上
3:解压mysql.tar包(tar -xvf )
4:解压后的rpm文件,分别进行客户端和服务端的安装(rpm -ivh)
5:启动mysql(service mysql start)
6:将mysql加到系统服务中并设置开机启动
7:登录mysql(msyql –u root -p)
8:修改密码(set password = password(”xxx”);)
9:需要设置开启远程登录mysql的权限
10:开放Linux的对外访问的端口3306
11:通过连接MySQL工具(navicat)直接访问
Charles
1.熟练使用Charles进行抓包,断点等操作。
charles原理
客户端向服务器发送请求,被Charles拦截,charles伪装成客户端向服务器发送请求,拿到服务器返回的证书,伪装成服务器返回给客户端,客户端用charles的公钥加密对称密钥发给伪装服务器的Charles,Charles用自己的私钥解密对称密钥,用服务器公钥加密发给服务器,服务器解密对称密钥,发送请求。
证书下载
默认情况下,charles不能解析https协议的接口,里面的请求和响应数据都是乱码格式,所以我们需要下载 ssl证书,来获取里面的数据。
web端证书下载操作步骤
点击help,选中ssl Proxying(ssl代理),点击Install Charles Root Certificate(下载根 证书), 然后按照证书,将证书指定在受新任的根证书颁发机构,提示"导入成功"; 最后在proxy(代理)中设置ssl proxy setting(ssl代理设置),将host和port写入*号,重启 charles即可。
2.如何定位问题
方式一:
通过抓包工具Charles抓取该接口,查看接口中请求和响应的数据,如果请求中的请求头,请求参数,请求 url有问题那么是前端的问题,如果请求没有问题响应有问题,那么是后端的问题。
方式二:
查看日志信息,如果日志中出现:FileNotFoundError(找不到对应的文件),IndexError(下标越界), KeyError(错误的key),ValueError(错误的值),TypeError(类型错误),ZeroDivisionError(逻辑 算术出错)等是后端的报错,找后端的开发进行解决,如果出现类似:undefined。(已声明,未赋值)
一、修改request请求参数值
1. 在接口处鼠标右击 选择breakpoints(断点)
2. 点击proxy(代理)选择Breakpoint settings(断点设置)
3. 选中Enanle Breakpoint,清除已有的接口信息,点击Add,点击选中的接口,复制粘贴回车,自动填充 修改query(参数)为* request勾选 输完值 点击ok保存变量
4. 重新请求接口 在edit request 点击具体值进行修改添加或删除 点击Execute
5. 关掉 break point(断点) 点击 abort(终止)
场景:
注册中密码长度在6~18位,在界面上操作,如果密码小于6位或者大于18位,那么前端会进行约束,注册是置。
灰的,那么需要验证后端是否进行处理。
实现步骤:在前端输入用户名和密码点击注册的时候,我这边打开Charles抓取该接口,通过断点调试修改。
request中密码长度小于6位,发送请求验证后端是否处理,如果后端显示注册成功,那么需要后端进行修改。
二、修改返回值 response
1. 选中接口右击 选择breakpoints(断点)
2. 点击proxy(代理)选择breakpoints settings (设置断点)
3. 选中Enanle Breakpoint,清除已有的接口信息,点击Add,点击选中的接口,复制粘贴回车,自动填充 修改query(参数)为* request勾选 输完值 点击ok保存变量
4. 重新请求接口 点击edit response 返回值所有的字符都可以修改 点击Execute
5. 刷新页面 请求接口 点击abort(终止)
三、修改返回值 response (map local 本地存储)
1. 选中接口点击右键,save response保存为TXT文件 存放到本地 编码的格式为’utf-8’否则可能会出现乱码
2. 选择tools, 选择maplocal功能 query(参数)修改为 *
(map to 下 local path 填TXT文件的绝对路径)
3. 修改TXT文件中 需要修改的字段值
4. 关闭浏览器,重新打开浏览器请求
5. 完毕后 点击 tools(工具) 点击 map local 取消勾选的 enable map local
场景:
品界面详细信息展示,如果超过三行以小数点省略,抓取该接口,修改响应数使商品信息描述超过三行,看看在前端的展示是否正确
四、弱网测试
1. 点击proxy(代理) 选择 throttle settings(节流阀调整) 勾选 enable throttling(使用节流阀) 修改 宽带: 上限值 下限值 带宽的利用率:上限值 下限值 数据传输往返延迟时间值 最大传输字节量 可靠性 网速不稳定性的占比等 点击ok保存。
2. 打开throttle setting 版本3.0是红旗 4.0的是乌龟。
五、模拟 404/403 返回值
1. 点击tools(工具)选择blacklist(黑名单)。
2. 允许启动黑名单功能 选择接口返回值的形式 添加接口地址并保存。
3. 选中需要返回404/403的接口 点击ok再次请求。