一、测试概论
1.软件的生命周期(SDLC),也是指软件的生存周期。
计划:确认软件的总目标,软件的实现不能存在任何的技术故障,明确开发周期和推向市场。
如果是一个新项目:这个时候是不需要软件测试工程师的参与。 如果是一个集团公司:需要开辟一个新的项目,就有这个团队,这个时软件测试工程师参与 可以明确一些风险问题和建设性的意见。
需求分析:需求是一个专业词,需求就是指软件要做的功能。
-----需要明确本次需要做什么功能,并形成SRS-----软件需求规格说明书
设计: 主要是指文档设计和界面设计;
文档设计(开发文档):概要设计(HLD),把软件定义各个模块。 详细设计(LLD), 定义每个模块的详细内容。 界面设计:---像图纸。 定义软件的效果图,交互图,原型图、
编码: 开发人员编码---实现软件的产品功能。
测试: 测试软件是否达到客户的要求。。 测试项目中的所有任务。
运维: 将软件产品发布至用户环境,让用户使用到最新的软件。。。
2.项目组的架构:项目组中的成员组成。
项目经理:管理整个项目,按时按质量的完成项目的开发任务,确保软件产品正常的上线。。
产品经理:把控每次版本的迭代需求,规划产品的发展方向。
开发人员:实现软件产品的需求功能。
前端:--->一般是指客户端,看得见的摸的着的。Web前端,ios端,app端
后端:--->一般是指服务端,---服务器。 后台管理是管理前端的。
测试人员:项目组中的所有需要上线的任务都需要测试。。----全栈测试。。
运维人员:主要是查看产品在用户市场使用的情况,发现问题反馈并解决相关问题。
Ui设计师:需要设计所有的软件界面图,包含原型图,效果图。
3.结合项目组流程和项目组的成员来明确一次迭代需要做的事情
一次迭代就是指的一次更新,常规的软件一般是两周(11天)迭代一次
4.软件测试的概念:
由IEEE组织定义:使用人工和自动的手段来运行或测试某系统的过程,其目的是检测是否满足规定的需求,或是弄清期望结果和实际结果之间的差异。
概念中存在很多关键字:
人工:就是指手工测试,测试活动由人工来完成。
自动:是指自动化测试,利用自动化技术来帮助人工进行测试,来提高测试效率。
过程:软件测试是指整个项目环节都需要进行测试。
满足规定的需求: 测试产品和需求之间的差异。
5.软件测试过程中三个比较重要的评审:
(评审:主要是通过会议评审)
需求评审: 谁组织:项目/产品经理。 谁参与:项目组全员。
评审目的:评审出需求中不明确的,存在问题的,需要完善的内容,最后需要形成一个标准的SRS。 用例评审: 测试用例本身就是包含所有的测试路径。
谁组织:测试人员
谁参与:项目组
评审目的:评审用例是否覆盖所有的测试路径,是否需要完善。
Bug评审: 你认为一切不爽的都是bug。
谁组织:测试人员
谁参与:项目组成员
评审目的:明确哪些bug必须要修复,哪些bug可以推迟修复,哪些bug可以不用修复。
哪些bug可以推迟修复:当手机短信超过5000条后,再删除短信会出现概率性(50%)的奔溃;
哪些bug可以不修复:opshop电商项目不能在UC浏览器进行支付。 国外几乎不用UC。 (例如: CF中,卡箱子)
工作原则: 软件测试的重点就是指------异常测试
对于登录模块而言:
正常测试:输入正确的账户和密码登录。 ------------正常一条;
异常测试:输入错误的账户登录,输入冻结的账户登录,输入密码为空登录-----异常多条。
异常测试:需要特别强调--测试思维,尽可能考虑软件的所有操作行为。
6软件测试阶段的划分:
一般定为四个阶段:
单元测试:测试系统的单个模块,测试代码----属于白盒测试,依据是详细设计文档LLD。
集成测试:测试模块和模块之间的数据通讯,----属于灰盒测试也叫做接口测试,依据HLD。
系统测试:测试软件在系统上的综合表现。-----属于黑盒测试,依据是SRS。
------我们认为的软件测试----就是指的系统测试。
系统测试是在实际的运行环境下进行的测试;
1.做app测试-----必须在手机上进行app测试,不能在模拟器上进行测试,因为模拟器很多功能没有(电话,短信,视频,语音等等。。)。
2.做web测试-----电脑上的web网页端。
3.做手机web网页测试-------->就可以在电脑上进行测试。 但是网址m.xx.com
验收测试:包含项目组验收,内测和公测。-------整个验收测试的目的:为了提高产品质量;
项目组验收: 由项目组成员进行验收。
项目经理:需要验收产品的所有功能。
产品经理:因为本次版本迭代的需求是产品提出的,所以产品经理验收产品的最新功能。
开发和测试:验收产品的基本功能和核心业务。
UI设计师: 验收产品的基本规格是否符合效果图。
阿尔法测试:---->指的内测。 是指在开发者环境进行测试,环境是可控的,用户比较少,时间比较集中。------内测一般是指小范围。 贝塔测试:----->指的公测。 贝塔测试是环境不可控的,用户比较多,时间不集中。 --------------公测一般是大范围的测试。
7.系统测试:
系统测试的依据是:SRS------->软件需求说明书。 ------标准情况。
实际情况:
1.如果需求文档清晰明确-----------系统测试的依据。------最好的情况。
2.如果没有需求文档。------系统测试的依据是软件的常规操作习惯。 ------结合行业标准。
重点:系统测试类型;
1.功能测试:验证产品的功能是否符合需求,也需要验证软件产品是否符合软件的常规操作习惯。
案例:测试乐鲜的前端,来提出一些功能上的bug。
Bug1:购物车超过100个,显示界面的数字会超出购物车边界。
Bug2:注册账户时没有手机号的限制,但是登录时存在限制。
Bug3:个人中心的姓名不能为emoji表情,姓名为15位时提示参数错误。
Bug4:支付价格为8.88元,100个商品时显示结算金额小数点8位。
Bug5:待付款的订单,不能再次支付。
Bug6:已经确认后的订单可以再次确认收货。
Bug7:搜索价格区间,不能从0开始。
Bug8:个人中心修改图形保存后,不能及时显示,需要账户登录才能显示
一个项目中,主要是指这些功能测试的bug。 我们测试人员提bug也是提功能测试中的bug。
2.性能测试:
性能测试包含:客户端的性能,也会包含服务器的性能。
如果单独指性能测试-----这是服务器的性能
如果指客户端的性能测试--------这个就是指客户端的性能。
客户端的性能测试:测试客户端CPU的占用,内存占用,启动app的时间,切换时间。。
服务器的性能测试:响应时间,并发用户,吞吐率,查看服务器cpu,内存,磁盘占用等。。。
服务器的性能测试必须要有工具支持:如loadrunner和jmeter ---->这两个工具肯定是可以产生大量用户的。
3.安全测试: 项目的保护机制是否能够保证项目不受到非法的入侵。
1.没有口令是否可以登录至系统中。 在宝贝计划中,不想登录账户,直接进入系统。
修改url:http://172.30.63.23:8080/BabyPlan/index.jsp 进入到系统。
2.密码是否加密传输。
2.1在宝贝计划的登录,打开“开发者模式”/按F12。
2.2选择开发者模式中的network,勾选presever log。
2.3 再输入账户和密码,点击登录。。 开发者模式自动记录数据的请求和响应。
2.4 查看network下面的数据,选择name中名字为login的数据。
3.各级的用户权限是否划分合理。
4.xss攻击。-----脚本攻击。 在网页上输入一些脚本代码。
<input type="button" value="恭喜中奖iPhone13" onclick="prompt('为了确保正常的发货,请在下面卡号转380元','66667778888')" >
如果网页中输入脚本代码能够生效:那就说明这个网站是一个钓鱼网站。
简单的判断这个网站是否正规? 主要是根据网站有没有在公安备号。
百度
以后在项目中web测试,项目中遇到的问题:
1.项目平台是国外的,输入正确的账户和错误的密码,提示泰文。 需要检查泰文是否正确。
-----目的:为了复制这句话。
怎么解决?
1.打开开发者模式/F12;
2.选择sources,----登录后,立马直接暂停。(暂停页面数据:暂停弹框的页面)
3.选择开发者模式中的“鼠标”按键,选择后,页面处于选中的状态。。
4.鼠标处于选中状态,选中弹框的消息数据即可。。
5.在下面elements就可以直接复制这句话。
8系统测试执行的活动
也是指系统测试我们需要做什么事情也是指系统测试我们需要做什么事情
1.搭建系统测试环境。 如:需要测试宝贝计划,先要部署宝贝计划的项目环境,部署完成后,测试人员就可以直接使用宝贝计划,---测试需要在这个环境中测试,将发现的bug提交指bug管理工具。
2.系统测试预测试(冒烟测试)
系统预测试---也叫做冒烟测试----也叫做开发中的自检。
目的:是为了确保软件能够正常的运行和测试。
案例:如登录模块,登录模块的冒烟测试就是指:输入正确的账户和密码能够登录成功。
如果这一条用例执行失败了,就说明冒烟没通过,那就没有必要执行大规模的测试。
冒烟测试就是指测试软件中的基本功能。
3.执行系统测试;
通过测试的手段来发现这个软件中的bug,需要将这个bug提交至bug管理工具。
在系统中:需要不断的执行测试----也需要不断的进行回归测试。
在测试的后期:开发人员修复的bug>测试人员提交的bug。------正常的。
4.提交缺陷报告并反馈和跟踪缺陷解决,进行缺陷管理
5.编写并评审系统测试报告
二、禅道的使用
1.将ftp的禅道安装包,拷贝至本地非中文目录/非空格目录的文件夹。
2.双击解压禅道安装包。----形成一个xampp的文件夹。
3.运行xampp文件夹下的start.exe。
4.第一次运行禅道,需要立即暂停配置数据。
只有第一次启动需要配置:后续的使用就不需要配置了。
1.去掉启用Apache用户访问验证的勾选项。
2.在服务中----配置端口:将Apache的端口改为81,将mysql的端口改成3307.
修改完上述两个操作后,就可以再次启动禅道了。
提示如下截图就说明禅道已经部署成功了。
禅道具体的使用:
1.直接通过url来访问禅道;http://127.0.0.1:81/index.php
2.使用开源版的禅道。
3.首次使用默认的管理员账户和密码:admin和123456
------------->第一次使用需要修改密码: 将密码统一修改为admin123456
4.通过admin来添加项目组成员的账户。----在工作中是真实的姓名。
在项目组中:需要创建四种身份,
项目经理:
产品经理:
开发人员:
测试人员:
原则上admin管理员创建完账户后------admin就不能干扰这些业务操作。
完善禅道
1.修改项目组的名字; 在组织中修改公司。
2.项目中没有模块的名字。 在产品中---模块进行修改。
3.影响的版本。 在项目中的---版本进行修改。
4.修改操作系统和浏览器。 后台---自定义---bug中修改。
bug的属性:
1.bug的ID ----id一般是自动生成的,能够统计bug的数量,通过bug的id进行跟踪和管理的。
2.bug的标题:这个是最最最最重要。 一句话来介绍这个bug。(通过一句话来描述这个bug)
一句话中,尽量不要有两个逗号。
3.缺陷的严重程度: 主要是指对用户造成的影响有多大。 致命,严重,一般,轻微(建议)。
4.缺陷的优先级: 一般情况优先级和严重程度是对应的。
不是绝对的:如,opshop在UC浏览器不能支付。 bug是致命的,但是优先级非常低。
5.bug的类型:简单的判断即可,从字面上的意思来判断。
6.缺陷的重现步骤: 把发现bug的步骤描述出来,用1.xxx 2.xxx 3..x 尽量不要超过5步。
-------------怎么发现这个bug的,就怎么描述即可。
7.附件:截图,视频,文件,log日志(任何操作都会有日志记录的)。
三、Linun操作系统
1.认识操作系统和Linux
1.1为什么要学Linux:
Linux是企业服务器常用的操作系统,作为测试人员,工作中会和服务器打交道,所以测试人员需要能 够懂得操作Linux服务器
操作系统: 是一个特殊的系统软件 特殊: 操作系统可以直接运行在“裸机”上,为普通的软件和硬件提供中间平台
普通软件运行在对应的操作系统,操作系统又直接运行在计算机硬件上
普通软件
操作系统
计算机硬件
常见的操作系统:
PC端:
Windows:
面向消费者市场: Windows xp/7/8/10/11
面向企业服务器市场: Windows Server系列
服务器: 就是计算机
MacOS X: 苹果电脑的操作系统,是基于Unix的操作系统
Unix: 也是一个操作系统,macos是在Unix的基础上去进行二次开发的
移动端:
Android: 基于Linux做二次开发
iOS: 基于Unix进行二次开发的操作系统 塞班 鸿蒙HarmonyOS
1.2Linux操作系统介绍:
广义上: Linux是基于Unix内核的操作系统
狭义上: Linux是由众多发行版共同构成的操作系统
发行版
Windows是闭源的(封闭源代码),所以Windows的各种版本都是由微软自己在研发维护
Linux是开源(开发源代码): 部分有实力的厂商,获取到Linux源码后,能够在这基础上,进行二次开发,不同的厂商,会各 自维护不同的
Linux版本:
国际上的Linux发行版:
centos:
Linux的发行版之一
Ubuntu: Linux的发行版之一
Android: 也是Linux发行版之一
国产Linux发行版:
deepin: 国产LInux系统之一
2.准备工作
2.1 卸载VMware 12
2.2 安装vmware 15 VMware: 是一个虚拟机: 虚拟计算机,可以用软件来模拟计算机
2.3解压centos,并用vmare打开
3.Linux的哲学三问
企业里的LInux是没有界面的,需要掌握Linux的各种命令来操作Linux系统
终端: 用于LInux命令的程序
终端界面介绍:
[tian@localhost ~]$
tian: 代表终端当前登录的用户名
@: 可以理解为是分割符,没有实际意义
localhost: 本机 ~
-
我是谁: whoami 作用: 查看终端当前登录的用户
-
我在哪里:pwd 作用: 相当于Windows文件管理器的地址栏,能够查看当前所处的路径
-
我做了什么事情: history 作用:记录当前用户执行过哪些命令
4.Linux的文件和目录操作
目录 == 就是文件夹
一、 Linux的基本目录操作
查看/切换/新建/删除/复制/移动/重命名
1. 查看目录: ls ===》 查看的是当前目录
蓝色: 代表目录
黑色: 代表普通文件,可以用于写一些文字
天蓝色: 代表链接文件,相当于是Windows内的快捷方式
常用选项:
-a: 查看目录下的所有内容(包括隐藏的)
-l : 以列表的方式,查看目录 ====》 可以缩写为:ll
drwxr-xr-x. 2 tian liaocong 6 5月 24 2020 Desktop
每一行的第一个字符,代表文件的类型:
d: 代表目录
l: 代表链接文件
-: 代表普通文件
-la: 以列表的方式,查看目录下的所有内容(包括隐藏的)
2. 切换目录:cd
- cd 目录名
- cd 完整的路径 ~: 代表当前用户的主目录
. : 代表当前目录
.. : 代表当前目录的上一级
/ : 代表根目录,相当于是WIndows的cde盘,是LInux最上层的目录,不能再往上
3. 新建目录:
mkdir 目录名
4. 删除目录:
- 删除空目录: rmdir 空目录名
- 删除非空目录: rm -rf 目录名 ==》 这种方式,可以用来删任意目录 -r : 迭代删除
-f: 强制删除,忽略提示
5. 复制目录: cp
- 复制到当前目录: cp -r 要复制的目录 新目录名
- 复制到其他目录: cp -r 要复制的目录 复制到哪里
6. 移动目录: mv
mv 要移动的目录 移动到哪里
7. 重命名:
mv 要重命名的目录 新目录名
移动和重命名的区别:
如果第2个参数是已经存在的目录,则是移动(因为目录不能重名)
如果第2个参数是不存在的目录,则是重命名
两个快速敲命令的技巧:
- tab键能够快速补全文件或者目录名
- 上下键能够在历史输入的命令中切换
二、Linux的基本文件操作
新建/查看/删除/复制/移动/重命名/编辑
1. 新建文件:
- 新建空文件: touch 文件名
- 新建非空文件: echo "文件内容">文件名 r" >: 定向符
追加文件内容:echo "文件内容">>文件名
2. 查看文件:
-
cat 文件名: 正向查看文件内容
-
tac 文件名: 逆向查看文件内容
-
tail -f 文件名 : 动态查看文件的变化 ctrl + c : 退出动态查看
-
tail -n 文件名 : 查看文件的倒数n行
-
more 文件名: 分页查看文件
-
less 文件名: 打开新的临时窗口查看文件
q: 退出临时窗口
3. 删除文件:
- 删除文件: rm 文件名
- 删除任意文件或目录: rm -rf 文件名/目录名
4. 复制文件:
- 复制到当前目录: cp 要复制的文件 新文件名
- 复制到其他目录: cp 要复制的文件 复制到哪里
5. 移动:
mv 要移动的文件 移动到哪里
移动目录和移动文件基本一致
6. 重命名:
mv 要重命名的文件 新文件名
移动和重命名的区别:
- 如果第2个参数是已存在的目录,则是移动
- 如果第2个参数是不存在的文件,则是重命名
- 如果第2个参数是已存在的文件,则是重命名并覆盖旧的同名文件
7. 编辑:
vi 文件名
三种模式:
- 一般模式(命令模式): 在这种模式下,不允许修改文件 i : 切换到编辑模式,光标在当前位置插入
I: 光标跳转到行首插入
a: 光标往后退一个插入 A:光标跳转到行尾插入
o: 光标往下插入空行并切换到编辑模式
O:光标往上插入空行并切换到编辑模式
一般模式下的常见命令:
dd : 删除光标所在行
yy : 复制光标所在行,nyy复制n行
p: 粘贴 u : 撤销 shift+4: 跳转到光标所在行的行尾
u: 撤销
0:跳转到光标所在行的行首
shift + g : 光标跳转到文件的最后一行
shift + 9: 光标跳转到文件的第一行
shift+4: 跳转到光标当前所在行的行尾
- 编辑模式(插入模式):
在这种模式下,可以任意修改文件
在一般模式下,按i/a/A/o/O可以切换到编辑模式
在编辑模式下,按esc,可以切换到一般模式
- 末行模式: 在这种模式下,可以保存退出文件
在一般模式下,输入:,可以切换到末行模式
w: 保存
q: 退出
!: 强制
/关键字: 查找关键字
注意: 在Linux内,如果要敲数字,不要用小键盘,所有数字统一用上面横排的数字键
一般模式 ==按i/I/a/A/o/O==》 编辑模式====按esc===》 切换回一般模式=== :==》末行 模式
vi不单可以用于编辑文件,还可以查看文件,如果文件名不存在,还可以用于新增文件
5.常用的Linux命令
1. 查找文件: find
1. 根据文件名来查找文件:
文件名精准查找: find 在哪个位置查找 -name "要查找的文件名"
查找test开头的文件: find 在哪个位置查找 -name "test*"
查找包含test的文件: find 在哪个位置查找 -name "test"
查找test结尾的文件: find 在哪个位置查找 -name "*test"
r' * : 可以代表任意0个或多个字符串
test* :test123 testabc test1234126451advasdgawef test
2. 根据文件类型来查找文件:
find 在哪个路径查找 -type 文件类型
文件类型:
d : 代表目录
f : 代表普通文件
l : 代表链接文件
2. 查找文本内容:
作用: 类似于vi末行模式下的: /关键字,可以用于查找文件的指定关键字
grep 关键字 要查找的文件
3. 链接文件: 链接文件:
相当于是WIndows的快捷方式
ln -s 源文件 快捷方式名/链接文件名
示例: ln -s test30 test30_1
4. | : 管道符
作用: 连接两个命令,把上一个命令的输出结果,作为下一个命令的输入参数 ls -l | grep test
ls -l : 输出了一堆东西
| : 管道符连接了前后两个命令
grep test : 在ls -l的输出结果内,查找test关键字
6.Linux的压缩包管理
压缩:
linux的压缩文件类型:
.tar.gz
.tar
.gz
.bz
.bz2
zip
tar -czvf 压缩包名 要压缩的文件目录
-c : create : 创建压缩文件
-z:gzip的压缩指令
-v: verbose : 显示压缩的过程
-f : file : 用于指定要压缩的文件
解压:
tar -xzvf
要解压的压缩包名
-x: extract :解压
红色: 代表压缩文件
7.Linux的用户管理
Linux是支持多用户的操作系统
root用户: 超级管理员,Linux最高权限的用户
root用户的主目录: /root
其他用户的主目录: /home
- 切换用户:
su 用户名
- 新建用户: useradd
useradd用户名
注意: Linux的用户管理属于管理员操作,如果是普通用户, 需要在命令之前加上sudo 新建用户时,如果没有指定组,则会自动创建一个同名组:
比如新建:user1用户,会自动创建一个user1的组
如何判断用户是否新增成功:
- 查看系统配置文件:cat /etc/passwd
注意: 不要通过查看/home的内容,来判断用户是否新增
- 修改/设置用户密码:
sudo passwd 用户名
- 删除用户:
userdel -r 用户名 -r: 删除用户的同时,删除该用户的主目录
8.Linux的权限管理
权限: 某个用户对某个文件或者目录的操作权限
rwx r-x r-x:
第一组权限: rwx : 主属用户(文件的拥有者/创建者): 主属用户拥有读,写,执行的权限
第二组权限: r-x : 组内用户的权限: 组内用户拥有读和执行的权限,没有写的权限 第三组权限: r-x:
其他组用户的权限: 组外用户/其他组用户 拥有读和执行的权限,没有写的权限
操作权限:
r : read : 读
w: write : 写
x: excute : 执行
- : 没有权限
修改文件权限: chmod
1. chmod ugo-rwx 文件名
u :主属用户
g : 组内用户
o : 组外用户
a: 所有用户
r + : 增加权限
r - : 去掉权限
=: 覆盖权限
r: 读
w:写
x:执行
-:没有
绿色: 有执行权限的文件: 可执行文件
2. chmod 八进制权限码 文件名:
八进制: 0,1,2,3,4,5,6,7 4:
读 2:
写 1:
执行 0:
没有权限 chmod 751 文件名:
7: 4+2+1: 读+写+执行
5: 4+1 : 读 +执行
1: 执行
rwx :4+2+1=7
r-x:4+0+1=5
--x:0+0+1=1
9.Linux的进程管理
(进程: 进行中的程序)
对于Windows来说,查看进程用任务管理器
1. 查看进程
- ps -ef: 查看所有进程(关注Pid)
pid : 进程号(每一个进程,在启动的时候,操作系统都会随机生成一个id给到这个进程)
ppid: 父进程号 CMD: 命令/进程名
- ps -aux: 查看所有进程(关注进程的资源占用)
pid: 进程号
%CPU: cpu的占用率
%MEM: 内存的占用率
Command: 命令/进程名
- 查看指定进程
ps -ef | grep 进程名
ps -aux | grep 进程名
2. 动态查看进程:
top: 会根据CPU的占用来降序排序
按q退出
pid
%CPU
%MEM
COMMAND
1Gb=1024Mb
1mb=1024kb
3. 终止进程: kill -9 pid
-9: 彻底终止进程
终止某个进程的思路:
-
获取对应的进程号: ps -ef | grep 进程的关键字 ===》 得到一个pid
-
kill -9 pid
9.Linux的网络管理
10.Linux测试环境搭建
10.1 搭建一个windows项目环境
自己在自己的电脑上部署一个项目,自己可以使用自己的服务器。
1.需要安装JDK。------所有的java环境都需要安装jdk。
1.1将ftp中的jdk的安装包----拷贝至本地电脑。
1.2直接安装在默认的目录,默认的目录就是c盘。 是要默认安装jdk和jre。
Windows软件都是下一步下一步-----直接完成。
1.3把jdk文件安装至C盘。 形成如下的目录。
1.4安装完jdk后,还需要配置jdk环境。 ----就是指path环境。
打开环境变量:
1.4.1打开我的电脑。 在我的电脑硬盘区域 ---查看我的属性
1.4.2 点击高级系统设置。 高级中存在环境变量。
1.4.3 打开环境变量后,在系统变量中,新建JAVA_HOME,添加JAVA_HOME的变量值。
确认完成后,会显示在系统变量中,如下面截图;
1.4.4 修改系统变量中的path。
在path中,添加%JAVA_HOME%\bin ;号是用来隔开。
注意:千万不要把path中前面的数据删除。
Ok后,全部确认;
1.4.5 怎么验证jdk安装成功。
打开dos命令窗口/cmd命令窗口。 在这个窗口中分别输入java和javac。 能够提示出如下的截图就说明部署成功。 如果提示:javac不是一个内部或者外部的命令---就是失败的
最后:如果重新修改了path变量,需要重新打开dos命令窗口/cmd命令窗口。
配置path的原理:将java.exe和javac.exe的文件路径配置在path中。
2.需要安装服务器软件Tomcat。
2.1先下载Tomcat,我下载发给大家。 这个Tomcat是一个压缩包。
2.2压缩包是直接解压就可以使用。
Tomcat的目录,需要了解三个目录。
2.2.1 bin目录:存放一些启动文件,如startup启动,shutdown就是关闭。
Conf:通过server.xml来修改端口port。
Webapps:存放我们的项目文件。
2.3直接在webapps手动添加目录。
Html的文件内容为:
2.4启动服务器, 就是启动bin目录下的startup.bat文件。
启动完成:提示服务已经启动了。 通过网址url来访问项目;
网址URL:
可以通过Tomcat来访问:html网页,jpg图片和视频文件。。。
10.2搭建Linux系统平台:
inux本身是没有界面的,意味着没有界面,如果需要操作都是使用命令来进行操作的。 我们以后在公司中,使用的Linux系统平台不是VMware。 会直接购买一个Linux平台(从阿里云上购买)。 买完以后:分配你一个ip,账户root和密码。
需要远程工具来进行连接:xshell(安装版)和SecureCRT(解压版),这两个工具的使用方式一样的。
1.先使用 SecureCRT,直接启动。
2.新建一个会话。
3.协议是SSH2----这是通讯协议。
4.填写主机是指Linux服务器的主机IP。 怎么查看主机ip:ifconfig、
5.直接输入密码保存即可。
1.使用xshell来连接Linux系统。
2.先安装xshell。
3.配置ip,账户和密码已经完成连接和上述的secureCRT完全一样。
Linux服务器的搭建:
准备材料:
OA,MYSQL,TOMCAT,JDK secureCRT:
Centos网络配置:如果ip冲突就手动配置;
手动配置: 重启网络设置:
\
一:把安装文件传输至Linux服务器:
通过远程登陆工具secureCRT上传:
避免CRT乱码:设置为utf-8格式:
在/usr/local 目录新建dir-software: 将所有文件上传至该目录:
上述显示代表全部上传成功;
二:Linux环境安装JDK;
直接解压jdk压缩包 生存jdk文件夹 tar -xvzf jdk1.8.0_201
解压完成后,配置path环境变量
通过vi去修改/etc/profile,修改之前备份profile(cp /etc/profile /home/)
中间这行可以不写;
添加完成后,更新path目录 :source /etc/profile
验证jdk是否安装成功:直接输入java和javac 看日志信息~
三:安装mysql
1.查询Linux系统中已安装的MySQL
rpm -qa 代表查询出所有的安装的文件
rpm -qa | grep mysql 查询是否安装mysql
rpm -qa | grep mar 查询
2.卸载 原始的mysql 5.5
Ps:在窗口中鼠标左键单机选中,按右击则是复制命令
rpm -e 包名
如果存在依赖:
rpm -e --nodeps 包名
删除完成后界面如下:
3.安装MySQL
解压mysql文件,unzip xx.zip文件
解压完后进入Mysql目录:安装三个文件client devel server 一个个安装:
rpm -ivh MySQL-client-5.6.39-1.el6.x86_64.rpm
rpm -ivh MySQL-devel-5.6.39-1.el6.x86_64.rpm
rpm -ivh MySQL-server-5.6.39-1.el6.x86_64.rpm
4.启动Mysql服务(必须做)
service mysql start/stop/restart 分别为开始,停止,重启。
5.查看MySQL的默认密码:
6.修改密码: 修改为123456 进入数据库中修改:
登陆mysql:mysql -uroot -p 密码(复制原始密码)
set password=password("123456"); 把密码改为123456; exit退出
8.开启远程访问
9.刷新权限
四:导入OA网站,执行sql文件;
1.先解压tomcat:tar -xvzf xxx文件
2.解压oa: unzip oa.zip
3.将oa文件夹移至 webapps文件夹:mv oa xxx/webapps/
4.导入sql数据:
mysql -uroot -p <rexxx.sql 再输入密码
mysql -uroot -p <cxx.sql 再输入密码
成功后进入数据库查看是否存在:show databases;
5.关闭模块间自带数据库认证
vi /usr/my.cnf 修改该文件:
新增框框两句代码:
6.重启数据库:
五:OA网站部署:
进入cd WEB-INF/ 修改proxool.xml文件 vi查看
将默认的密码改为123456
修改日志文件:
在当前的目录: vi log4j.properties
启动Tomcat;
进入Tomcat中apache-tomcat-8.0.38中的bin目录。
访问oa文件;
四、软件需求
在禅道上,bug的生命周期。
禅道上明确几个问题:
1.测试人员不能删除bug,但是测试主管可以。
配置本身就是让测试人员不能随意的删除bug。 但是在工作中一般都是编辑,
因为关闭bug会有记录。
2.项目组成员都可以提bug吗?
在禅道中,项目组成员肯定是都可以提bug的。 但是工作中一般情况,项目组成员发现了bug都会让测试来提交。
1、bug首先是由测试人员提交的。-----站在测试的视角。。
确认:-----该操作一般是开发做的。
指派:------原则也是开发处理的。 但是测试人员提交bug的指派人错误,可以自己修改。
解决:----- 作为测试人员解决的方案-----就是你bug提交重复了,或者bug不存在了。
建用例:------禅道可以新建测试用例。
2、开发人员来解决bug。 ---------站在开发的视角。
确认:明确这个已经存在了, 进一步明确这个bug的类型。
指派:这个bug不是我修复,或者我名下bug太多需要同事帮忙修复。。
解决:就是指这个在项目已经修复了,在禅道中设置解决中的状态。
3、开发人员在解决bug,存在几种方案;
设计如此:说明这个bug的现象是对的,本来就是这样设计的,所以不是bug。
案例:12年时,在手机app的主界面点击返回键,直接退出程序。
--------期望结果:点击返回键,弹出是否退出的提示框。
开发就不会处理的。
重复bug: 就说明这个bug已经提交过了,当前这个bug才是重复的,不需要修复的。
外部原因: 外部的原因导致这个bug产生,这不是产品本身的问题。
如:手机摄像头坏了,不能直播。
已解决: 开发和测试是最和谐的方式。
自研公司:开发和测试一般会比较和谐的。
外包公司:可能会存在不和谐的地方。 ----容易进,薪资高一点,没有公司氛围。
无法重现:----就是指概率性的bug。 对于web项目和app项目,概率性的bug主要是体现在app项目上,web项目几乎没有概率性的bug。
案例:项目产品,概率性的闪退? ------这容易扯皮的。
从两个维度来考虑: 1.bug的严重程度 2.bug出现的具体概率。
-----探讨的主要是:bug很严重,概率很低。
作为老塞:心里面要有决策。
如果本次版本迭代总共你才发现了一次闪退。。------不修复。---误操作。
如果本次版本迭代每天都发现一两次闪退。-------修复。
延期处理:----bug评审后,该bug可以不需要立即修复,可以后续再修复。。
不予解决:----这种现象是开发和测试最不和谐的。----------问题最大的。--尽量避免。
4、开发人员修复bug后,bug转给测试人员进行验证。-----站在测试的视角。
指派:指派给其它人员验证。 可能是手头bug太多,也可能是交叉测试的目的。
关闭:就说明这个bug已经修复了,可以关闭了。
激活:就是重新打开,就说明这个bug仍然存在,需要再次打开。--------再次打开的bug严重程度加一级。
如果某项目比较大,这时bug比较多,---------测试人员可能会存在专门的bug管理员(SQA)。
测试概论存在两个PPT;
关于对软件测试的理解:
初中级:设计测试用例,尽可能的找出软件中存在的bug,并进行跟踪和反馈。
中高级:保证软件产品的质量,把控软件测试流程,引用自动化技术来提升测试效率。
质量模型: 关于软件测试的管理模式;
需求评审:
需求评审过程:
谁组织:产品经理/项目经理。
谁参与:项目组成员
评审目的:评审需求中存在的问题,不明确的点或者不完善的内容,并形成标准是SRS。
演练:
评审功能一:点赞数。
作为测试,需要提出需求中的测试点。****
1.过千过万后怎么显示。 如1w+ 还是10000。。。 --需要显示后一位小数。
2.点赞次数是否存在限制,如一个用户是否可以点赞两次。
3.用户是否可以取消点赞。
4.点赞是否和账户相关,是否需要登录,是否和你的身份存在关系。
5.明确点赞后,是否存在特效。。
6.需要测试点赞是否能及时刷新。。。
评审功能二:搜索。
提出搜索中的测试点。****
1.搜索内容没有边界值的限定。
2.搜索内容结果为空时,需要怎么显示。
3.热门标签的长度显示
4.是否支持模糊搜索、
5.搜索的结果是怎么排序显示。
6.搜索的内容依据是:标题,简介还是标签?
7.搜索中全部,资讯和课程是怎么归类的。
实际中:需求管理 ======把每一个需求分配对应的开发人员和测试人员即可。
五、测试用例设计方法
灵魂三问:我是谁? 我来自哪里? 我要干什么?
测试用例是什么? 用例是指导测试人员如何开展测试执行工作的一份指导性文件(xls文档)。 ---也可以在禅道中实施。
为什么要写测试用例? 避免漏测,提高测试效率。
怎么写测试用例? 通过黑盒测试用例方法来设计(等价类,边界值,场景法等方法。。。)
我们不管怎么写用例:都是为了用少量的用例来覆盖更多的路径-----发现更多的bug 设计的重点:就是指测试用例的八大要素;
设计测试用例的依据:--------是根据需求文档。
八大要素:
1.用例编号。 编号主要是体现唯一性和易识别性,方便统计用例的条数。
命名规则:test_业务的英文_001 统一按这个规则(因为自动化测试就是按照这个规则)。
2.测试模块: 指这条用例所在的模块名称。
3.用例名: 描述测试的出发点和关注点,需要简单的描述过程。
4.重要级别: 主要是指这条用例使用的频率和核心程度。-----测试人员的主观判断。
5.预制条件:前置条件/前提条件: 必须要满足这个条件,这条用例才能执行。
网络正常和服务器稳定:-----尽可能的要写上的。
6.输入数据: 执行这条用例所需要的数据。 如果没有数据直接写无;
7.操作步骤: 当前测试需要经过的操作步骤。 通过每一步来进行描述:1.xx 2.xx 3.xx
直接描述操作路径的步骤。 尽可能的再5步以内。
8. 预期结果:就是指期望的结果----也是指需求中的结果。
测试用例设计方法:
等价类: 将无限的测试用例-----转换成有限的测试用例。保证测试用例具有完整性和代表性。
概念:在某个输入域的集合,在这个集合中的数据都是等效的。
在这个集合中任意的一个数据能够发现其bug,那么其它的数据也能够发现其bug。
等价类中有两个概念:有效等价和无效等价。
总结等价类: 考虑数据的范围和类型;----凡是涉及到输入数据都要考虑等价类。
边界值法:对于等价类而言,边界上的数据,稍微高于其边界和稍微低于其边界上的数据。 ------边界值法是黑盒测试中最容易发现bug的手段。
边界中:
如果输入数据是有序:测试第一个元素和最后一个元素; 地址,时间。 数据太大的一般都是有序。。****
如果输入数据是无序:测试所有的元素。
因果图法和判定表法。 :
因果图法在以后的项目用例设计中几乎不用,但是因果图最适合面试考试要求。
特点: 因---输入条件 果:输出结果
输入条件存在各种组合关系和相互制约关系。
输出结果对输入数据有依赖关系。。
因果图法比较适合存在两个条件的情况下。 如登录模块:只需要账户和密码的登录最适合因果图法。
场景法:
模拟用户使用软件时的场景。 设计用例时,尽可能的考虑所有的用户场景。。
场景法中有两个重要概念:
1.基本流 ---- 模拟正常的操作。
2.备选流 ------- 模拟异常的操作。 很显然---测试的重点就是测试各种各样的异常情况。。。
场景法几乎才是以后设计测试用例中的主要设计方法。。。
流程分析法: 特别适合有先后顺序的测试,主要是测试业务。
错误推测法:利用测试人员的直觉和经验来猜测出错误的类型。 一些之前出现过的错误,或者运行缓慢的操作以及一些异常的操作。。------经验。
正交排列法: 这个和因果图一样的。
正交排列法都是通过工具来实施:allpairs。
敏捷测试
MYSQL
一、数据库的概率和术语
为什么要学习数据库
- 90%以上的软件都需要操作数据,⽐如游戏、社交、新闻、商城、财务等,这些软件都在不停的展 示、存储数据,它们的数据都存储在数据库,数据库是软件的基础。
- 测试⼯程师在测试软件的过程中,不仅需要在界⾯上操作,还需要检查数据库中的数据是否正确。 从⽽在软件出问题时,测出更深层的问题。
二、数据库的安装
三、数据库及表的操作
1.语法:
SQL语句以分号“;”结尾
单行注释:可以使用--(两个连字符+空格,空格后是注释内容)或#(#后是注释内容)
多行注释:使用/* */,它们之间的内容都是注释
MySQL标识符的命名规则:(MySQL大小写不敏感) 由字母、数字、下划线所组成,且第一个字符必须是字母或下划线,不 使用中文,不能是MySQL的关键字,且名称要有含义
2.数据库的操作:
1. 创建数据库: create database
create database database_name;
2. 查看数据库: show databases;
3.切换/选择/使用数据库: use
use database_name;
4.查看正在使用的数据库:select database
select database();
5.删除数据库:drop database
drop database database_name;
3.表的操作
1. 建表:create table
create table 表名(
字段名 类型,
字段名 类型,
...
字段名 类型
);
2.MySQL常用的数据类型
整数:int,范围(-2147483648 ~2147483647)。
小数:decimal(m,n),decimal(5,3),整体长度最多5位,小数后最多3位,整数最多2位
字符串:
- varchar(n),长度代表能存多少个字符,一个中文或一个字母或一个数字或一个字符都 占一个字符
- enum 枚举类型,提供一个可选数据的集合,让此类型的字段只能从该集合选值,如: enum('男','女')
日期时间:
-
datetime,格式如下:2019-02-14 14:51:12
-
date 年月日 以YYYY-MM-DD格式显示 2020-08-14
-
time 时分秒 格式:HH:MM:SS 例如:14:51:12
四、数据的插入和查询
五、数据的更新和删除
六、数据汇总和分组
七、子查询
八、表连接
九、高级特效
六、APP测试
认识APP的网络架构
web端:是B/S架构
B:浏览器端:指的是运行在浏览器上的网页
S:服务器:Tomcat/nginx,mysql,网址的源代码,接口
APP端:C/S架构
C:Client客户端:安装在手机上的应用
S:Server服务端:Tomcat/nginx,mysql,网址的源代码,接口
认识Android的四大开发组件
Android:是一个基于Linux的操作系统,Linux发行版之一
Activity:界面(可以理解为是界面的姓名)
比如:淘宝app的首页
Broadcast Receiver:广播接受Broadcast(广播)Receiver(接受)
比如:微信断网时的断网提示,就是一个广播
Cont ent Provider:内容提供
用于app之间获取数据
比如:支付宝要获取通讯录的数据,支付宝和通讯录是两个APP是互相独立的,不能直接获取,需要通过该组件
Service:后台服务
后台服务可以常驻在后台,通常由于接收app的通知
问题:为什么以前的Android安卓手机越用越卡
andorid的弊端:以前国内的安卓手机的每一个app都会有对应的一个后台服务常驻后台用于接收通知
为了解决该问题,中国信通院和各大国内手机厂商共同组建了:统一推送联盟
android在国外也有统一推送服务,由于Andorid是谷歌推出的,它的统一推送服务需要依赖谷歌服务
ios的推送:
苹果自建了统一推送服务
app和web测试的相同点
1.两者功能测试基本一致,都是依照需求文档,编写测试用例,并执行测试
2.两者的测试流程基本一致:
web端测试流程:
1.需求阶段:熟悉需求,提取测试点
2.计划阶段/编码设计阶段:编写测试计划,测试方案,测试用例
3.执行测试:前置:搭建测试环境
1.执行冒烟测试
2.按轮次执行测试
3.验收测试(通常是有产品经理或客户来做验收)
4.编写测试报告
5.上线发布,并根据线上运行情况
web端上线,只需要更新服务器即可
app端的测试流程:
1.需求阶段:熟悉需求,提取测试点
2.计划阶段/编码设计阶段:编写测试计划,测试方案,测试用例
3.执行测试:前置:搭建测试环境
1.执行冒烟测试
2.按轮次执行测试
3.验收测试(通常是有产品经理或客户来做验收)
4.编写测试报告
5.上线发布,并根据线上运行情况
app的上线:
服务端:更新服务器
客户端:
1.测试通过以后,开发人员提交客户端的安装包到各大应用市场的开发者平台
2.应用市场需要对APP进行审核:
审核通过:用户可以在应用市场更新最新版本
不通过:根据不通过的原因进行修改,并重新测试,然后在重新上传应用市场
用户如何更新客户端:
1.应用市场更新
2.应用内更新
3.自己下载最新的app包来更新
app和web测试的区别
一、app和web端的网络架构不一样:
web端是BS架构,没有客户端,不需要进行安装卸载测试
app端是CS架构,需要对客户端进行安装,卸载,升级测试
1.安装测试:
.apk 文件:Android的安装包
安装方式:(常见安装方式)
1.应用市场安装
2.下载安装包安装
3.电脑上的手机助手,也可以给手机安装app(需要数据线连接电脑和手机)
4.使用adb命令进行安装
测试点:
基本流:1.使用不同的安装方式,能否正常安装app,并能正常启动app
备选流:
1.存储空间不足导致安装失败时,能够重新安装
2.安装过程中突然中断(手机关机,手机中止安装进程)导致安装失败,能够再次进行安装
3.覆盖安装,能否安装成功
覆盖安装,可能会覆盖低版本的APP,也有可能会覆盖高版本的APP,两者都要能正常安装。
4.卸载后,能够重新正常安装
5.安装过程中是否会被杀毒软件拦截
6.安装过程中把安装界面退到后台,能够正常安装
7.安装过程中,手机占用cpu内存较大,(如果安装失败,需要能再次安装)能够正常安装
8.使用损坏的安装包导致安装失败时,再次使用正常的安装包,能够正常重新安装
9.有多个安装包同时在进行安装,能够正常安装
2.卸载测试:
卸载的方式:
1.桌面长按卸载
2.应用市场卸载
3.使用市场卸载
4.adb命名卸载
5.电脑上的助手卸载
6.系统设置-应用管理-卸载
卸载的测试点:
基本流:1.使用不同的卸载方式,能够正常卸载
备选流:
1.卸载是否干净
2.卸载后是否能够重新安装
3.能否多次卸载安装
4.卸载过程中(断电,cpu占用过高),后续还能够重新进行卸载
5.卸载有残留文件,是否能够再次安装
6.卸载过程中进行安装,是否能正常卸载(实际工作不用考虑)
3.升级测试:
客户端的升级方式:
1.应用市场升级
2.应用内升级
3.高版本安装覆盖安装升级
4.电脑上的手机助手,能否进行升级
升级的测试点:
基本流: 1.使用不同的方式,能够正常升级
备选流:
1.升级弹框提示:
1.有新版本时,能够弹出升级提示
2.没有新版本时,不会弹出升级提示
3.升级的提示内容是否正确
4.强制升级,能否正常升级
5.升级以后,客户端的版本是否正常
6.新升级的工作是否正常
7.取消升级,后续是否还能够继续升级
8.下载app后,如果退出app,下一次启动APP要能够正常弹窗提示用户是否升级(更新)
二、web端和app的兼容性测试也不一样
兼容性测试: 验证软件在不同环境下的依赖程度
web端的兼容性:
1.不同的浏览
2.同一浏览器的不同版本
3.操作系统
4.分辨率
app的兼容性:
1.硬件环境:
机型品牌(cpu)
屏幕(分辨率):挖孔屏,刘海屏,折叠屏,卷轴屏,曲面屏,屏幕会直接影响到app界面的展示,甚至可能遮挡app的某些功能按钮
2.软件环境:
1.操作系统:Andorid,ios,Har monyOS
2.UI系统及版本:MIUI,EMUI,ColorOS
3.和第三方软件的兼容:主要是指有数据交互的软件的兼容,杀毒软件
3.网络环境:
不同运营商(移动,联通,电信)的2、3、4、5G网络,WIFI
如何执行APP的兼容性测试?
1.挑选市场上主流热销的机型和用户主流的操作系统及版本
1.可以参考各大电商网站的销售数据
2.大数据统计网站:百度移动统计
(https://tongji.baidu.com/research/app)
注意:实际测试的时候,禁止使用模拟器进行测试
2.云测网站(https://www.testin.cn/)
3.云真机:腾讯wetest
4.自动化脚本:appium
三、app的push测试:
push:推送通知
push测试主要测试通知
通知的测试点:
1.基本流:通知能够正常推送到用户的的通知栏,通知内容正确
2.备选流:
1.通知的应用图标,通知的标题,通知的跳转是否正常
2.通知推送的逻辑:
1.什么时候推送:推送时间的校验
2.个性化推送:是否把通知推送给对应的用户群体
个性化:指的是不同的用户群体,喜好不一样,根据用户的喜好,来进行推送
3.条件推送:满足特定条件时,会触发推送
3.推送失败的重试机制是否正常
4.免打扰时间段:在用户设置的免打扰时间段内,不推送通知给用户
通知屏蔽:
本质上不属于推送失败,只是操作系统把通知给隐藏了
四、权限测试:
权限:是由操作系统管理的,不同的操作系统,权限机制可能不太一样
权限分为两大类:
一般权限:该类权限不涉及到用户隐私数据,系统会自动授权
(比如:联网,震动等等)
危险权限:该类权限涉及到用户隐私数据,需要用户手动授权
比如:
位置信息
摄像头
麦克风
存储
电话:移动网络信息(可以理解成自己的手机号)
短信
通讯录
传感器:(和平精英的螺旋操作)
运行健康
权限操作:
运行权限
拒绝权限
仅在运行期间允许
拒绝后不再提示
仅本次允许
权限测试的测试点:
1.允许权限后,依赖权限的功能能够正常运行
2.拒绝权限后,依赖权限的功能不会出现闪退崩溃等异常,是否能够提示对应的授权操作
3.拒绝权限后,再次允许权限,APP依赖权限的功能 能够正常运行
4.设置仅在运行期间允许,关注软件在运行的时候,依赖权限的功能能够正常运行
5.拒绝权限并勾选不再提示,依赖权限的功能不会闪退崩溃,并能够引导用户授权
6.仅本次允许,本次运动时依赖权限的功能能够正常运行,并且下一次运行,会提示用户是否授权
7.多次运行,拒绝权限,再次允许权限后,依赖权限的功能能够正常运行
五、 交叉事件测试(中断事件)
某个功能正在运行时,出现的会影响该功能运行的时间
比如:正在支付的时候,突然有一个来电,会导致手机自动切换到2G网络,可能会导致支付失败
手机的运行场景相对复杂,手机上正在运行的功能,可能会受到一些突发的交叉中断事件的影响
常见的交叉事件:
来电
短信
弹框提示
前后台切换
低电量提示
关机重启
麦克风:
比如 正在录音时,来了一个电话,两者功能都需要用到麦克风,可能会冲突
摄像头:
比如 正在拍照时,来了一个视频电话,两者都需要用到摄像头,可能会冲突
物理按键: 音量键,电源键
播放器(音频播放)
蓝牙传输
六、用户体验测试
web端的用户操作更关注鼠标键盘操作
app操作更注重手机滑屏操作
回顾:
给你一个app项目,如何进行测试?
app项目测试主要分为两个方面:业务功能测试和非业务功能测试
业务功能测试:对照需求进行测试,与web项目测试方法一样
非业务功能测试:
安装,卸载,升级测试
安装测试:
不同方式是否能够安装(应用商场,apk安装包,电脑手机助手);
安装成功版本号及功能是否正确;
是否能覆盖安装:
安装过程中出现中断事件;
安装过程中出现意外情况(关机,内存不足,安装包损坏等);
安装手动取消,能否再次正常安装
卸载测试:
不同方式是否能够卸载(应用商场,桌面长按,设置);
卸载后是否存在文件遗留;
卸载后能否再次安装;
卸载过程中出现中断事件;
卸载过程中出现意外情况(关机,等);
卸载手动取消,能否正常使用
升级测试:
不同升级方式(应用商场,app内部升级)
app是否有升级提示(应该能够直接升级,设置强制升级);
升级后版本号及功能正常;
app跨版本升级;
升级过程中出现意外情况(关机,等);
升级手动取消,能否正常使用;
兼容性测试:
1)硬件:不同手机品牌,不同型号,不同屏幕,不同分辨率
2)软件:不同操作系统,不同版本
3)不同运营商(中国联通,移动,电销)及网络环境:2、3、4、5g,wifi
与web兼容性区别:
web兼容性:不同的浏览器,不同版本,不同操作系统,不同分辨率;
权限测试:
手机中部分危险权限需要授权才能获取(摄像头,麦克风,相机,定位,相册,文件系统,通讯录等等)
在进行app权限测试时,实际是测试依赖这些危险权限的功能使用情况。
当给app不同的权限时app的使用情况,以及是否能够正常使用。
push测试(消息推送):
是否能够正常收到推送的消息;
推送的消息内容正确;
查看推送的消息能够跳转到app对应的页面查看;
依据app当前运行情况,推送的位置是否正确;
推送接收设置,如果不接收推送,不收到推送消息,再次打开 ,能够再次收到推送消息;
交叉事件测试:
在app正常使用过程中出现中断事件,app还能不能正常使用(来电,短信,关机,低电量,断网,插入耳机,插入usb)
用户体验:
易用性测试:是否易于手机操作,滑动
app常见的报错:
1. crash:崩溃
2. ANR:
adb工具
adb(Android debug bridge 安卓调试桥)是一个命令行工具,作用是用于pc连接安卓设备(安卓模拟器,真机),通过abd命令,对设备进行操作,并且监控设备运行情况,比如app安装,卸载,查看电池情况,上传/下载等
1.安装jdk
(1)安装软件:jkd-8u231-windows-x64.exe
(2)配置Java环境变量:
windows进入环境变量:我的电脑——右键(属性)——高级系统设置——高级(环境变量)——系统变量
1)在系统变量,新建一个JAVA_HOME变量,值为jdk的安装目录
2)在系统变量,编辑path变量,在值的最前面加上以下内容:
%java_home%\bin;%java_home%\jre\bin;
3)在系统变量,新建一个classpath变量,值为:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
(3)验证环境变量是否配置成功,在cmd输入命令
Java -version
java
javac
2.安装SDK
SDK(software Development Kit安卓软件开发组件),作用:是对安装开发程序进行编译,调试,打包等
sdk中包括adb工具,aapt工具,uiautomatorviewer工具,ddms等
1)首先在d盘新建一个Android文件夹;
2)将adt-bundle-Windows-x86.rar解压到Android文件夹
3)配置Android环境变量:
(1)在系统变量中,新建一个ANDROID_HOME的变量,值就是D:\Android\sdk
(2)在系统变量中,编辑path,在最前面加上以下值:
%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\buildtools\android-4.3;
4)验证Android环境变量是否配置成功。重新打开cmd,输入命令:
abd
aapt
ddms
3.安装安装模拟器(逍遥模拟器)
双击安装XYAZSetup6.1.0.exe
abd常用命令
在Windows中,直接打开cmd,输入adb命名
在实际工作中,通常都是用真机来进行测试,
电脑连接真机的方式有两种:
(1)有线连接:
1.真机和电脑在同个局域网
2.打开手机开发者选择(usb调试也要打开)
3.将手机和电脑使用usb连接
(2)无线连接:
1.真机和电脑在同个局域网
2.打开手机开发者选择(usb调试也要打开)
3.打开5555端口===第一次打开端口是,先要用有线先连接上,然后开启端口
adb tcpip 5555
4.连接设备
adb connet 设备ip:5555
pc如何连接真机?
电脑连接手机,需要手机打开开发者选择(两个需要勾选,usb调试也要勾选)。如果没有找到开发者选择,可以找到手机的版本号,连续点击7次就可以打开开发者选项。
注意:电脑与手机连接同一个局域网;连接usb线。
1)查看当前连接设备
adb devices
可以查看当前连接了几个设备,连接几个设备,就会显示多少记录
如果是模拟器,显示的是ip:端口
如果是真机,显示的是真机序列号,是一串字符串,有数字和英文字母组成
注意:如果需要使用电脑操作设备,都需要先连接上设备,所以先用此命名查看设备是否连接上
2)查看adb版本号
adb version
3) 安装app
adb install apk文件路径
(1)重复安装
对于已安装的设备 再次安装app时会失败,提示已经存在
-r表述覆盖安装(adb install -r apk文件路径)
(2)当启动多个模拟器,多个设备
如果有多个设备连接电脑,使用adb命名操作设备时,需要指定希望操作哪台设备
-s表述指定设备(adb -s 127.0.0.1:21503 install apk文件路径 )
4)卸载app
adb uninstall app包名
app包名如何获取?
(1)问开发;
(2d)有apk文件,可以通过apk文件获取
aapt dump badging apk文件路径
package:name= 后面就是包名
红框中com.tal.kaoyan就是包名;
lauchable-activity就是app启动后的启动页
activity就是指app的页面
(3)没有apk文件时
adb shell pm list packages
此命名会将设备中所有已安装的app的所有包名都列出来
5、进入设备操作系统
由于Android系统是基于linux内核进行界面化二次开发,所以可以支持部分Linux命名
adb shell
6、推送文件==将电脑上的文件传输到设备
adb push 电脑上文件的路径 设备上的存储文件的目录
7、拉取文件==将设备上的文件传输到电脑
adb pull 设备上的文件 电脑上存储文件的目录
8、设备截图
adb shell screencap 截图文件保存的路径
9、查看设备电池情况
adb shell dumpsys battery
10、查看当前包名和activity
abd shell dumpsys window |findstr mCurrentFocus
以后工作中都是用真机来测试: 电脑连接真机的方式有两种:
(1)有线连接:
1.真机和电脑在同个局域网;
2.打开手机的开发者选项(usb调试也要打开);
3.将手机和 电脑使用usb线连接
(2)无线连接:
1)真机和电脑在同个局域网;
2)打开开发者选项
3)打开5555端口 ===第一次打开端口时,先要有有线先连接上,然后开启端口。
adb tcpip 555
4)连接设备
adb connet 设备ip:5555
11、抓取客户端日志
adb logcat
1)根据日志级别抓取日志
日志级别:
W===warning警告
E===error错误
F===Fatal严重错误
V===明细(最详细)
D===debug调试
adb logcat *:W
2)根据日志时间
adb logcat -v time
3)根据日志级别和时间过滤
adb logcat -v time *:W
4)导出日志到文件
adb logcat >d:\log28.txt
按ctrl+c 停止
5)根据关键字过滤日志
adb logcat -v time *:W |findstr kaoyan >d:\log28.txt
12、ddms工具
在命令行输入,ddms命令,打开ddms工具。
一、Android开发环境的搭建:
1. adt: Android Development Tools: 安卓开发者工具集
adb: Android Debug Bridge: 安卓调试桥
ddms
aapt
uiautomatorviewer: 用于定位app的元素
2. 模拟器
3. jdk: 是java程序的运行环境,Android客户端是用java编写,需要jdk才能运行
二、 adb命令:
安装: adb install apk文件
卸载: adb uninstall 包名
获取包名:
1. aapt dump badging apk文件
2. adb shell pm list packages
查日志:
1. adb logcat
2. ddms 获取当前页面的activity:
adb shell dumpsys window | findstr mCurrentFocused
一、 app抓包
一、fiddler抓取HTTP协议的网络请求:
1.手机和电脑要在同一个局域网(手机和电脑连接同一个wifi)
2.手机wifi配置代理:
配置代理之前:手机网络请求通过wifi - 发送到外围
配置代理之后:手机网络请求通过wifi - 发送到电脑上的抓包工具 - 流向外围
手机把网络请求发送到电脑,需要手机连接电脑:
ip协议规定,网络上互相通信的计算机,必须要有ip地址
1.获取电脑ip:
cmd输入:ipconfig
2.手机wifi设置-高级-代理-手动配置:
主机名:电脑ip
端口号:fiddler抓包工具默认8888
3.可以进行app抓包
http协议
基于请求响应模型的:
请求:
1.请求URL
2.请求方式
3.请求头
4.请求参数
响应:
1.响应数据
2.状态码
3.响应头
二、使用Charles抓取app包
1.手机和电脑要在同一个局域网
2.手机配置wifi代理
3.进行抓包
三、抓取https请求:
1.Charles设置:proxy-ssl proxay setting:
1.勾选enable ssl proxying
2.add:
host:*
port:443
https协议的端口号
2.需要在手机上安装https证书:
手机输入浏览器输入:chls。pro/ssl
根据提示安装证书
fiddler:
1.fiddler设置:
tooles -optins-https:
勾选前三个选项
2.手机输入浏览器输入:电脑ip:8888
3.点击页面最下方的蓝色拦截,根据提示安装证书
fiddler和charles抓取app网络请求:
1.手机和电脑要在同一个局域网
2.手机wifi配置电脑的ip和端口号:这一步配好,就可以抓取http包
3.如果要抓取https,还要需要安装证书
二、app的弱网模拟
弱网:低速率,高延迟
弱网测试关注的是,出现弱网时,app不会出现闪退,白屏等,会有良好的用户体验
如何进行弱网模拟:
1.路由器管家,wifi管理助手等等,可以用于限制网络速度
2.通过网络抓包工具进行限速
一、Charles弱网模拟:
1.手机和电脑连在同一个局域网
2.手机wifi要配置电脑ip和抓包工具的端口号
3.Charles弱网配置:
Proxy - Throttle Setting:
1. 勾选:Enable Throttling
2. 配置Bandwidth(带宽):Download(下载),upload(上传)
4. 弱网模拟的开关:主界面的绿毛乌龟,亮起则开启弱网,置灰说明弱网未开启
二、fiddler弱网模拟:
1. 手机和电脑在同一局域网
2. 手机wifi要配置电脑的ip和抓包工具的端口号
3. fiddler弱网配置:
// Delay sends by 50ms per KB uploaded. 每1KB数据延迟50毫秒上传
oSession["request-trickle-delay"] = "50";
1KB/0.3s=====> 3.3KB/1s
// Delay receives by 150ms per KB downloaded. 每1KB数据延迟150毫秒
下载
oSession["request-trickle-delay"] = "150";
1KB/150ms ===》 6.6KB/1S
4. 开启fiddler弱网开关:
勾选:Rules - Performance - Simulate Moderm speeds
抓包的原理:
请求: C(配置了电脑ip和抓包工具的端口) ====抓包工具===》 S
如果关闭了抓包工具,需要同步把手机的wifi代理配置给取消
响应: C <======抓包工具======S
三、app客户端的性能测试
一、Monkey测试:
1.什么是Monkey:
猴子喜欢上蹿下跳,动作毫无规律
Monkey测试:随机压力测试,主要用于测试app客户端的稳定性
目的是为了验证客户端的稳定性(是否崩溃闪退(crash),无响应(ANR))
优点:
1.随机的操作:能够发现一些人为测试难以发现的bug
缺点:
1.无法针对单一模块进行精准测试
2.如何使用Monkey命令:
Monkey命令:adb shell monkey
常用参数:
-p :指定包名
-v :日志的详细程度
数字:Monkey事件次数
-s :随机seed值,如果多次Monkey指定相同的seed值,则会执行相同的Monkey动作
该参数通常用于复现bug
3.Monkey运行结果:
正常运行:
会显示:
1.Monkey Finish
2.会显示Monkey运行的时间
错误运行:
1.不会显示Monkey Finish,并且不会显示Monkey运行的时间
2.出错以后,需要把错误日志截图给开发:
如果是app闪退崩溃等:日志中会有Crash关键字
如果是app卡顿无响应:日志中会有ANR
其他异常:Exception
Monkey日志写入文件:
adb shell monkey -p 包名 -v 次数>日志文件路径
二、腾讯GT客户端性能监控工具:
客户端性能测试:
客户端性能的体现在那些方面:
CPU:cpu通常占用不能超过80%
内存:内存占用不能超过
流量:
帧数(画面的流畅度):
帧数越高,画面越流畅
每秒更新的刷新的画面
游戏,直播和视频类应用比较关注帧数
电量:可以使用手机自带的电量统计工具
腾讯GT是腾讯开源的客户端性能测试工具,主要用于客户端的性能监控
cpu和内存占用越低,手机越流畅,手机耗电电量越低
七、App自动化测试
一、App自动化测试框架的了解
一、Appium的介绍
APPium是一个开源测试自动化框架,可用于原生,混合和移动web应用程序测试。它使用WebDriver协议确定IOS,Android应用程序。
Appium很多脚本都是参考的selenium操作,实际上很多自动化测试都是参考selenium。
原生app:纯java语音开发
混合app:java和html语言组合开发————app的一些页面,直接使用H5开发
移动web app:纯html前台语言开发
Appium的优势:
可以跨平台同时支持Android、Ios
支持多种语言,java、python、php、Ruby等等
二、Appium自动化原理
Appium是在手机操作系统自带的测试框架基础上实现的,Android和ios的系统上使用的
工具分别如下:
Android(版本>4.3):UIAutomator,Android4.3之后系统自带的UI自动化测试工具
Android(版本<=4.3):Selendroid,基于Android Instrumentation 框架实现的自动化测试工具。
ios:UIAutomation(instruments框架里面的一个模板)。ios系统自带的UI自动画测试工具
PYCHARM写脚本------>appium服务器------->手机
Appium的工作原理:
客户端编写相关的代码自动化脚本,通过appium server提供的端口4723,
接受客户端相关的命令,并解析成UIAutomator认识的命令。
Appium server解析完命令,就发送给手机端,手机端中有一个Bootstrap.jar 处理appium server的命令,
命令整理完后,发给手机中的UIAutomator库,UIAutomator 实
现页面操作。
通过pycharm运行python代码---脚本代码发送----appium服务器---appium服务器来驱动设备
三、Appium自动化测试环境搭建
一、windows10环境,安装jdk:
1.配置JAVA_HOME
2配置PATH
3.配置完成后在dos命令窗口输入java和javac提示相关命令信息
则表示安装成功,主要是javac得成功
二、Android-sdk环境变量的安装
直接解压adt-bundle-windows-x86文件
1.在系统变量中新建ANDROID_HOME
2.将文件中的platform-tools、build-tools\android-4.3和tools添加至path中
3. 输入adb查看,提示如下信息说明安装成功;
三、安装模拟器(有真机可以使用真机,模拟器只是方便教学)
1.直接默认安装逍遥游模拟器;
2.安装完成后把逍遥游设置为手机模式
3.逍遥游模拟默认的端口连接:adb connect 127.0.0.1:21503
四:安装python
将python安装在比较简洁的目录,方便配置,需要将python文件夹和python/script放在path目录
五:安装node.js
安装完成后在dos命令窗口输入:node -v查看版本号,然后输入npm
六:安装appium
appium desktop下载地址:https://github.com/appium/appium-desktop/releases
appium历史版本下载地址:https://bitbucket.org/appium/appium.app/downloads/
直接双击 appium-desktop-setup-1.4.16.1.exe安装,安装完成会生存桌面图标;
七:安装Appium-Python-Client
命令:pip install Appium-Python-Client
八、这步不是必须的,只是检测appium的环境是否安装成功
这样添加至path后,在cmd命令窗口可以直接运行appium-doctor;
运行后成功的界面如下:
四、appium的快速体验
1、导入包:
from appium import webdriver
2、声明手机驱动对象
driver=webdriver.Remote(“http://127.0.0.1:4723/wd/hub”,desc_cap)
3、手机启动参数
# 创建一个空的字典
desc_cap={}
#声明设备的系统
desc_cap['platformName']='Android'
#声明设备的系统版本
desc_cap['platformVersion']='5.1.1'
#声明设备编号,可以用adb devices获取
desc_cap['deviceName']='127.0.0.1:21503'
#应用的路径(不是必须的)
# desc_cap['app']=r'C:\Users\Administrator\Desktop\tools\kaoyan3.1.0.apk'
#声明要操作的app的包名
desc_cap['appPackage']='com.android.settings'
#声明app的启动界面
desc_cap['appActivity']='com.android.settings.Settings'
#字符设置: 如果设备需要输入中文,则需要加上这个配置(不是必须的)
desc_cap['unicodeKeyboard']='True'
#在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态(不是必须的)
desc_cap['resetKeyboard']='True'
#清除缓存设置,True为不清除缓存,False为清除缓存(如果设置为false,就必须有app的键值,才会起作用)
desc_cap['noReset']='True'
# 创建一个会话
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desc_cap)
# 关闭会话
driver.quit()
五、appium的基本定位:
元素定位:元素的基本定位基于当前屏幕范围内展示的可见元素。
可以通过属性元素定位:类似于selenium
借助于Android-sdk中的另外一款工具:uiautomatorviewer来查看app界面元素的属性;
(1)appium的id属性也就是通过-----> resource-id属性
(2)accessibility_id定位就是通过---->content-desc属性
(3)class定位就是通过----->class属性
一般页面上的class属性不唯一,元素不唯一的话定位就会错了
# elements=driver.find_elements_by_class_name('android.widget.TextView')
#
# for i in elements:
# print(i.text)
#
# elements[4].click()
(4)name定位 ---->text属性
(5)xpath定位
二、APPium基础API
一、appium基础操作
1、在脚本内启动其他app
appPackage:要打开的程序的包名
appActivity:要打开的程序的界面名
# driver.start_activity('com.tal.kaoyan','com.tal.kaoyan.ui.activity.SplashActivity')
2、获取app的界面名
获取界面名:driver.current_activity
aapt:获取包名和activity,前提能够拿到那个apk包。
adb中:adb shell dumpsys window | findstr mCurrentFocus
可以直接获取当前的包名和activity名
# driver.find_element_by_name('蓝牙').click()
# print(driver.current_activity)
3、关闭app和驱动对象
关闭当前操作的app,不会关闭驱动对象:
driver.close_app()
关闭驱动对象,同时关闭所有关联的app:
driver.quit()
4、安装和卸载以及是否安装app
安装app:(app_path是指安装包apk的路径)
driver.install_app(app_path)
卸载app:(app_id是指包名)
driver.remove_app(app_id)
判断app是否已经安装:(app_id是指包名)
driver.is_app_installed(app_id)
5、应用置于后台(seconds是指设置的时间)
drvier.backgroud_app(seconds)
二、appium对元素操作
1、获取元素的文本内容
方法: text
print(driver.find_element_by_name('蓝牙').text)
2、获取元素在屏幕上的坐标
方法:location
print(driver.find_element_by_name('蓝牙').location)
print(driver.find_element_by_name('蓝牙').location['x'])
print(driver.find_element_by_name('蓝牙').location['y'])
3、获取屏幕分辨率
方法:get_window_size
window_size=driver.get_window_size()
print("屏幕的横坐标为:{}".format(window_size['width']))
print("屏幕的纵坐标为:{}".format(window_size['height']))
4、根据属性名获取属性值
方法:get_attribute
rint(driver.find_element_by_name('蓝牙').get_attribute('text'))
5、点击/输入内容/清空
方法:click,send_keys,clear
三、滑动和拖拽事件
1、swipe滑动事件
从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动
方法:swipe(start_x, start_y, end_x, end_y, duration=None)
参数:
x:起点X轴坐标
y:起点Y轴坐标
x1:终点X轴坐标
y2:终点Y轴坐标
duration: 滑动这个操作一共持续的时间长度,单位:ms
# x=driver.get_window_size()['width']
# y=driver.get_window_size()['height']
# x1=x*0.5
# y1=y*0.8
# x2=x*0.5
# y2=y*0.2
# driver.swipe(x1,y1,x2,y2,duration=500)
2、drag_and_drop拖拽事件
从一个元素滑动到另一个元素,第二个元素替代第一个元素原本屏幕上的位置
方法:drag_and_drop(origin_el, destination_el)
参数:
1.origin_el:滑动开始的元素
2.destination_el:滑动结束的元素
# origin_el=driver.find_element_by_name('电池')
# destination_el=driver.find_element_by_name('更多')
#
# driver.drag_and_drop(origin_el,destination_el)
四、高级手势
1、长按
方法:TouchAction中的long_press
示例:
先导包:
from appium.webdriver.common.touch_action import TouchAction
TouchAction(driver).long_press(driver.find_element_by_xpath( **'//android.widget.TextView[@text="逍遥向导"]'** ),duration=2000).perform()
五、手机操作
1、截图
1)截图保存到文件夹
方法:get_screenshot_as_file(self, filename)
将截图保留到指定文件路径
driver.get_screenshot_as_file('d:\\login.png')
2)截图保存在脚本所在文件夹
方法:save_screenshot() 该方法直接保存当前屏幕截图到当前脚本所在文件位置。\
driver.save_screenshot('login.png')
2、发送按键
方法:keyevent
发送home键driver.keyevent(3)
# driver.find_element_by_name('蓝牙').click()
# driver.keyevent(4)
3、操作通知栏
方法:open_notifications
driver.open_notifications()
三、Pytest的介绍和PO模式
问:之前使用过seleium框架,框架是什么?能不能不用,能够带来什么作用
答:框架是一个结构,已经封装好的一个结构,遵循框架的模式能够高效解决代码中问题,减少工作量
框架必须要解决部分问题
1.批量执行大量脚本
2.收集jiaob执行后的结果
3.将结果写入测试报告中
4.框架是能够接收和处理测试用例的一些异常操作
八、接口测试
一、认识接口
背景:
1.前后端:
前端:浏览器端/app客户端
假设前段是一个登陆页面,用户需要在页面上输入账户密码,并点击登录
请求过程:前端点击登录=====传递请求信息=======》后端
后端接收到请求后,需要对请求进行处理,并把处理后的结果返回给前端
请求信息:
1.请求URL:决定了请求会发送到哪一个服务器
2.请求头:
一部分是浏览器自带
一部分是开发人员自定义的
3.请求参数:对于登录请求,可能会有账户密码
请求参数是有开发人员自定义
问题:开发人员根据什么来定义请求参数?
开发人员根据业务功能来定义请求参数
4.请求方式:
Get/Post
后端:服务端
前段《=======响应信息(后端处理后的结果)========后端
比如:后端对登录请求的参数处理后,会去数据库校验账户密码是否正确
如果账户密码正确,则会返回登录成功的结果
如果账户密码错误,则会返回登录失败的提示
前段接收到后端的返回数据后,会根据返回数据,进行不同的页面展示:
如果后端返回登录失败,则前端会提示登录失败,请检查账户密码
响应信息:
1.响应数据
2.状态码
3.响应头
问题:前端点击登录后,通过什么来传递请求信息给后端?
答:接口
问题:接口属于前端还是后端?
答:后端
假如有一台电脑和一台手机:
手机需要通过usb数据线连接到电脑的接口:
连接成功后,手机可以向电脑传输数据
前端通过网络连接到服务器的接口:
连接成功后,前端可以向服务端传输数据
请求和响应的过程,其实就是数据传输和数据处理的过程
接口测试的核心就是验证数据的交互:
请求参数和响应数据是否符合预期:
什么样的请求参数,会有什么样的响应数据
数据:
请求:请求URL,请求方式,请求头,请求参数
响应:响应头,响应数据,状态码
为什么要做接口测试?
1.用户可以绕过前端,直接调用接口,接口需要测试人员去校验是否正确
2.前后端代码是分离的,前端只负责页面,后端负责接口
前端可以对页面输入做限制,比如限制输入框长度是10位
但是技术人员可以通过接口,直接绕过前端的输入限制,
所以为了保证前后端校验的一致性,后端同样需要对请求参数做限制
二、接口测试工具:Postman
使用步骤:
1.fiddler抓包获取请求信息
2.Postman填写请求信息:请求URL,请求方式,请求参数,请求头,并点击send发送请求
3.查询响应数据
三、接口文档
作用:用于查看接口的请求和 响应
由谁编写:开发通过一些接口文档生成工具,自动生成,比如:swagger
swagger:
1.开发可以把swagger集成在代码内,编译时可以自动生成接口文档
2.生成接口文档,不单可以用于看,还可以用于发送请求
showdoc:(https://www.showdoc.com.cn/)
可以用于编写接口文档
做接口测试,抓包时,有很多RRL,哪个才是我们需要的?
1.可以通过接口文档对比
2.问开发
3.查看URL,请求参数和响应数据,结合业务功能来判断是不是要用的接口
除了postman可以发送请求,还有什么可以发送请求?
1.postman,JMeter等接口测试工具
2.Python,JS,Java等等编程语言都可以发送请求
四、接口测试用例
接口测试用例设计时,需要关注那些:
一、正常功能:
请求参数和响应数据是否符合预期
二、异常:
phone:13925134306
请求参数有哪些情况:
1.请求参数的长度:
大于11位,小于11位,为空;
2.请求参数的数据类型:是否符合接口文档的定义
3.请求参数的格式:比如特殊符号,空号等等
4.请求参数漏传,错传
响应数据:
主要是验证响应数据是否符合预期
预期结果如何定义:
1.根据业务功能需要文档
2.根据接口文档(请求参数和响应数据)
五、接口测试流程
1.熟悉需求文档和接口文档
2.编写测试计划,测试方案,接口测试用例
3.使用Postman等接口测试工具,执行接口用例
4.提交BUG,并验证
5.执行页面功能测试,提交功能测试产生的BUG,编写测试报告
6.验收测试
7.上线发布
测试过程:
单元测试:开发编写单元测试代码
集成测试(Sit测试): 接口测试:
系统测试:主要是做功能测试,性能测试,回归测试等等
验收测试:协助产品经理或客户进行验证
互联网的访问过程:
问题1:如果访问某页面出现了404----要不要提bug?
响应码404是指找不到对象。
如果:url地址输入错误或者资源找不到---------我们自己的问题--就不能提bug。
如果某文件必须存在,但是访问时却没有-------这种情况就要提bug
问题2: 301和302有什么区别?
301是指永久性重定向,302是指临时性重定向。
案例:男生A喜欢某女生B,女生B把闺蜜C介绍A,A和C在一起了----这就是重定向。
关于服务器:
服务器就是一台电脑,一台提供用户服务的电脑,部署服务器软件后,就可以直接提供用户服务。
买服务器/租服务器:制定一个ip(公网ip),分配你一个账户(root)和密码(私发)。
买/租需要买:地区,CPU,内存,系统,磁盘,带宽,时长。(项目的情况来选配置)
通过远程工具:xshell,CRT进行连接访问即可
服务器软件:Tomcat(Tom猫)
1.使用Tomcat解压就可以使用。
2.要求环境配置JDK;
Bin目录:存放一些启动的文件。
Conf目录:主要是配置项目的端口port。
Webapps目录:主要是存放项目文件目录,项目文件一般是.war包
URL:<http://172.30.50.125:8080/liaocong/hg.jpg>
URL的组成:协议+ip+port+路径+具体的文件
接口的URL是由系统框架配置的,接口的URL一般是没有后缀的
日志:
日志就是指用户行为的一些记录。
1.纯客户端log日志
Ddms:抓取一些概率性非常高的bug中的日志。 也可以抓取一些按钮/动作的一些常规日志;
可以在logcat中对日志进行过滤:一般是根据包名来过滤。
如果是对于一些概率性的bug:只能通过adb logcat > d:\\1.log
再对1.log文件进行分析。
2.服务器日志
远程到服务器----来查看对应的日志。 远程工具:xshell和CRT
奔溃的具体原因
得到原因:表情----数据库不支持。 更新sql语句就报错了。
接口日志
查看请求(请求头部head和body数据)和响应。
头部head:
POST http://172.30.63.23:8080/LexianMall/user/remLogin.do HTTP/1.1
请求方式 接口的URL http协议版本。(接口测试和接口测试的工具版本无关)
Host: 172.30.63.23:8080
主机 ip和port
Ip中存在两个特殊的ip:localhost和127.0.0.1------这两个都是指的本机ip;(只有服务器在本机才能用这个ip)
Connection: keep-alive
连接方式:http默认是短连接----加keep-alive就是长链接。
Content-Length: 75
内容长度。-----就是指请求的内容为75个字节。
Accept: application/json, text/javascript, /; q=0.01
X-Requested-With: XMLHttpRequest
--------------同步的操作;----什么时候登录就是什么时候出结果。
--------------异步,不登录也能看到结果。----注册时输入完账户就看到账户ok/已注册。 ajax;
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
面试问题:post请求有几种方式? 4种。
application/x-www-form-urlencoded-----原生表单形式提交。
Application/json==============比较友好,提交数据是按照json的形式提交。(json可以当做Python中的字典)============也是键值一一对应的。
Form-data的形式:----主要是指提交一些文件/图片的上传。 text/xml的格式:这种情况比较少,主要是返回的数据json+xml的格式。
Origin: http://172.30.63.23:8080
Referer: http://172.30.63.23:8080/LexianMall/sc/login.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,th;q=0.8
Body:
phone=13800138000&passwd=123456&os=pc&platformCode=2&unixtime=1640159278132
请求参数:存在必填参数和可填参数;
对于上述的操作:必填参数phone和passwd,可填参数os,platformcode.
-------在设计测试用例时---唯一的维度----考虑参数的各种类型。
接口测试流程。
1.获取接口文档
rest接口就是指http来模拟get和post请求
soap接口----webservice协议,使用的工具是soapui-----就是http+xml格式的类型
2.设计接口测试用例。-----和参数有关;
3.执行测试: 需要通过接口测试工具======**通过接口测试工具来模拟浏览器操作。
Postman:开发和测试都会用。 属于谷歌的一个插件。。---情敌postwoman;
Httprequseter:属于火狐的插件------发送请求和接收数据。
JMeter:纯java开发的-----------测试工具中最重要的,没有之一。
Fiddler保留了接口测试工具,利用composer属性来做。
4.接口自动化:
利用Python+requests来完成。 利用requests来模拟get和post请求;
先安装:pip install requests (fiddler一般存在干扰)
怎么检验安装成功:pip list
打开pycharm
把上述的代码-----加入框架(unittest还是pytest)-----都可以直接实现;
龙戈贷款管理系统
一、贷款公司的业务岗位
业务部内勤
财务部人员
法务部人员
风控部人员
总经理
贷款的模式:
贷款涉及到:出借方和借款方
p2p:个人对个人
p2c:个人对机构(企业)
还款方式:
等额本息:每个月偿还相同的本金和利息
等额本金:每个月偿还相同的本机,利息会逐渐降低
先息后本:每个月先还利息,还完利息后,才开始每个月归还本金
末期清偿:到期一次性还本付息
提前还款:用户在贷款到期日之前,提前还钱
贷款逾期:过了贷款到期日,用户还是未还钱,逾期记录会被上传至央行的征信中心
延期还款:用户未在规定的时间还款,但是后续手续还了钱,但还是会被上报至央行征信中心
贷款展期:用户未在规定的时间还款,但是用户事先和贷款机构达成协议,取得贷款机构同意后,可以按照展期另外约定的时间进行还款,视为正常还款
二、龙戈贷款管理系统的贷款流程
龙戈贷款管理系统:
作用:用于管理和审批贷款的各个流程
贷款流程:
1.用户申请贷款:
1.线上申请:比如某个贷款app或贷款小程序
2.线下网点申请:用户填写贷款申请资料,业务员录入这些资料
2.贷款调查:
调查借款方提供的各种资料信息是否真实
3.贷款流程:
贷款项目评审:
1.贷款初审:业务部主管
2.风控审核:风控部主管
3.合规性审查:法务部主管
4.总经理审核:总经理
4.合同生成及贷后监管设定
5.放款审核:
1. 风控放款审核
2.财务放款审核
财务放款如果审核通过,意味着财务会把钱转给用户
6.放款复核:
财务人员确认用户有没有收到钱,网银转账
7.客户资料归档:
由业务部人员对客户的资料归档统一存放,并审批确认资料是否完整
8.贷后监管:
监控客户贷款的资金用途
9.贷款到期:
展示贷款到期,即将到期,以及贷款预期的一些贷款业务,方便运营人员及时掌握贷款还款的信息
10.贷款结清
JMeter接口测试
一、认识JMeter
JMeter是一个基于Java的接口和性能测试工具
JMeter和Loadrunner
JMeter优点:
1.开源免费:源代码公开,可以在源代码的基础上,做二次开发,添加新的功能
2.轻量简洁
3.跨平台运行
缺点:
1.不支持页面测试,只支持接口层面的测试
Loadrunner优点:
1.功能强大
缺点:
1.价格昂贵
2.安装复杂
3.商业付费工具,源代码不公开
二、JMetet安装
1.安装jdk:版本要求大于>=1.8;
cmd:
1.java
2.javac
3.java -version
2.jmeter配置环境变量:
1.新建系统变量:JMETET_HOME
值为:D:\apache-jmeter-5.0
2.修改系统变量path:
%JMETER_HOME%\bin
3.验证jmeter是否安装成功:
cmd: jmeter
JMeter的启动方式:
1.cmd输入:jmeter
2.bin目录的:ApacheJMeter.jar
3.bin目前的:jmeter.bat
三、JMeter怎么进行接口测试
1.Testplan:测试计划,对应一个测试脚本
2.在测试计划内,新建一个thread Group(线程组)
添加方式:右键测试计划-add-threads(Users)-thread Group(线程组)
作用:用于模拟用户
配置:
1.number of threads(user):线程数(用户数)
2.Ramp-Up period(in seconds):多少秒内启动多少用户(需要配合线程数)
3.Loop count:循环次数,每一个线程会循环运行多少次
勾选Forever:代表死循环,每个线程都会一直运行
4.scheduler:调动器
1.Duration:持续时间(过了持续时间后,脚本会停止运行)
注意:该配置需要勾选Forever才会生效
3.在线程组内,添加一个Sampler(取样器)-HTTP Requests(http请求)
添加方式:右键线程组-add-Sampler(取样器)-Http请求
作用:用于填写http请求的相关信息(请求url,请求参数等)
配置:
protocol[http]:协议(支持http和https)
sever name or ip :域名或ip
port number:端口号
path:路径
parameters:请求参数
4.添加一个请求头(Http Header Manager):
添加方式:右键线程组-add-config element(配置元件)-Http header manager
5.添加一个cookies管理器(Http Cookie Manager)
添加方式:右键线程组-add-config element(配置元件)-Http Cookie manager
作用:用于自动存储Cookies
6.在线程组内,添加一个View Result Tree(查看结果树)
添加方式:右键线程组-add -Listener(监听器)-View Result Tree
7.在取样器内,添加一个响应断言:
添加方式:右键Http Requests - add - Assertions(断言器) - Responce Assertion
8.运行脚本,发送请求
四、JMeter的元件,组件和作用域
元件:是具有相似功能的组件的集合
组件:JMeter是最小功能单元
作用域:
JMeter组件能够直接作用在父级和同级上
五、JMeter的参数化
什么是参数化:
在接口测试中,指的是不用写死的数据,动态的去读取某一个变量
(把接口测试的数据,存放在变量中,然后在进行动态的读取)
为什么要进行参数化:
1.业务功能的需要:
比如:
1.注册功能,账户不能重复
2.支付订单,订单号不能多次重复支付
3.被买的票,不能再重复被购买
2.测试数据多样性的需要
比如:注册的账户要求11位手机号
测试数据可能需要考虑10位,12位11位,中英文,特殊符号等等
JMeter如何实现参数化:
一、CSV Data Set config: CSV数据集
添加方式:右键线程
组 -add -config element -csv data set config
用法:
1.创建一个csv文件,并写入数据,然后保存到JMeter脚本所在目录
注意:文件类型必须要csv或者txt
2.在线程组内,添加CSV Data Set Config
配置函数:
filename:文件名
fileencoding:utf—8
variable name:变量名:${}
3.在对应的htto requests内,读取变量
二、函数助手
打开函数助手:Options-Function Helper Dialog
1.__Random:
作用:用于生成指定范围内的随机数
用法:
1 配置函数:
The minimum value allowed for a range of values
随机数的最小值
The maximum value allowed for a range of values
随机数的最大值
2.把函数公式复制到请求参数内
2.__RandomString:
作用:用于生成随机字符串
用法:
1.配置函数:
Random string length
随机字符串的长度
Chars to use for random string generation
用于生成随机字符串的源
2.把函数公式复制到请求参数内
3.__RandomDate:
作用:用于生成随机日期
用法:
1.配置函数:
Format string for DateTimeFormatter (optional) (default yyyy-MM-dd)
时间的格式,默认值是:yyyy-MM-dd),为空则使用默认值
Start date (optional) (default: now)
开始日期,默认是当前日期,为空则使用默认值
End date
结束日期,注意:取不到结束日期当天
2.把函数公式复制到请求参数内
4.随机变量:
作用:用于随机读取多个变量
方法:
1.创建多个User Defined Variables(用户自定义变量):
右键线程组-add-config element-User Defined Variables
2.配置函数助手:__RandomFromMultipleVars
Source Variable(s) (use | as separator):
变量的集合,多个变量之间用|分割
3.把函数公式复制到请求参数内
七、接口的关联
什么是接口的关联:
把前面接口的响应数据,作为后续接口的请求参数
首页的接口:返回了很多商品编号
添加商品到购物车:请求参数需要一个商品编号
接口关联的步骤:
1.提前前面接口的响应数据:
在对应的接口内,添加:Regular Expression Extractor正则表达式提取器
添加方式:
1.右键对应的接口:add-post pressors(后置处理器)-Regular Expression Extractor
正则表达式:用于匹配具体某种规则的文本
配置:
1.Name of create Variable
2.Regular Expression:正则表达式
左边界(.*?)右边界
3.Template:模板
取第几个正则的值:
$1$: 取第一个正则的值
4.Match No:取正则匹配到的第几个值
O for random:O表述比随机
5.default value:默认值
如果正则表达式未提取到结果,则会使用默认值
Use Empty defauly value:使用空值作为默认值
2.
八、Badboy脚本录制工具和JMeter脚本录制工具
HTTP(S) Test Script Recorder:http测试脚本录制组件
作用:用于录制http协议的JMeter脚本
使用步骤:
1.新建一个测试计划
2.添加一个Non-test elements (非测试元件)
- HTTP(S) Test Script Recorder(脚本录制器)
HTTP(S) Test Script Recorder配置:
1.post:端口号,注意不要和抓包工具同时使用避免冲突
2.关闭其他抓包工具(fiddler,Charles)
3.Target Controller:用于设置脚本存放在哪个控制器
3.在测试计划内,添加一个线程组
4.在线程组内,添加一个Logic Controller(逻辑控制器)
-Recording-Controller(录制控制器)
5.打开谷歌浏览器-设置-打开代理设置-局域网设置:
填写地址:127.0.0.1
填写端口号:8888 注意:要和http测试脚本录制组件配置的端口号保存一致
6.点击start,启动http测试脚本录制组件
7.在浏览器上进行正常的操作,生成脚本
8.关闭windows的代理设置
如果要录制https协议的请求,需要安装JMeter的安全证书(在JMeter的bin目录内) 1.打开浏览器-设置-搜索证书管理-管理证书:受信任的根证书颁发机构 2.点击左下角的导入-选中JMeter bin目录内的安全证书,根据提示安装
九、JMeter数据库测试
步骤:
1.复制mysql-connector-java-5.1.28.jar到JMeret的ilb目录
2. 新建测试计划,在测试计划内导入mysql的jar包
3.在测试计划内,添加一个config element-jdbc connection configration(jdbc连接配置组件)
作用:用于配置数据库的主机地址,数据库账户和密码
配置:
varaible name:变量
Database URL:数据库连接地址
JDBC Driver class:选择mysql数据连接类型
Username:用户名
Password:密码
4.在线程组内,添加取样器:JDBC Requests:
1.填写定义在JDBC连接配置组件内的变量名
2.sql query:填写sql语句
5. 如果要填写多个sql语句,需要修改以下配置:
1.修改jdbc connection configration(jdbc连接配置组件):
1. dabase url修改:后面叫?allowMultiQueries=true
allowMultiQueries=true:允许多个查询
2.修改jdbc requests:
1.Query Type:
修改Callable Statement
十、Jmeter+ant+jenkins接口自动化测试
apache-jmeter:用于编写接口测试脚本 apache-ant:用于指定运行配置 jenkins:用于构建运行脚本
apache:开源软件基金会
一、JMeter安装配置环境变量
二、ANT:
1.解压安装到D盘
2.配置环境变量:
1.新建系统变量: ANT_HOME
值为:D:\apacheAnt
2.修改系统变量Path:
%ANT_HOME%\bin
3.验证安装:
cmd: ant -version
三、 建立接口自动化项目:
1.在D盘新建目录:auto_jmeter_38
2.把JMerer脚本目录(JMeter_38)移动到auto_jmeter_38nei1
并重命名为testscripts
testscripts:用于存放Jmeter测试脚本
3.在auto_jmeter_38内,新建目录: result
4.在result目录内新建两个目录:report和jtl
report: 用于存放jmeter接口测试报告
jtl: 用于存放jmeter的运行日志
四、配置build.xml
1. 把build.xml文件复制到auto_jmeter_38目录内
2. 修改build.xml文件:
1. 修改第2行:basedir="D:\auto_jmeter_38"
2. 修改第7行,value修改为jmeter的安装目录
value="D:\apache-jmeter-5.0"
3. 修改第9行,value修改为自动化项目的jtl目录
value="D:\auto_jmeter_38\result\jtl"
4. 修改第11行,value修改为自动化项目的report目录
value="D:\auto_jmeter_38\result\report"
5. 修改第29行,dir修改为自动化项目的testscripts目录:
dir="D:\auto_jmeter_38\testscripts"
6. 保存文件:ctrl + s
五、 修改jmeter的配置文件:jmeter.properties
1. 打开jmeter的bin目录内的jmeter.properties文件
2. 修改477行:jmeter.save.saveservice.output_format=xml
注意去掉#
3. 保存文件:ctrl+s
六、 安装jenkins:
1. 在d盘新建jenkins目录,并复制jenkins.war到该目录内
2. 打开cmd:
1. 切换到d盘: d:
2. 切换到Jenkins目录: cd jenkins
3. 运行jenkins.war:
java -jar jenkins.war --httpPort=8086
4. 在浏览器上输入:
127.0.0.1:8086
七、 创建jenkins任务,用于运行jmeter脚本
1. iterm名称:auto_jemter_38
2. 勾选:构建一个自由风格的软件项目
3. 构建:
1. 增加构建步骤:Invoke ANT
2. 填写all和build.xml文件的路径
性能测试
性能测试的理论
为什么要学性能测试
测试:
功能测试
性能测试
安全性测试
兼容性测试
易用性测试