java ——— 测试

软件测试定义

软件测试就是验证软件产品特性是否满足用户的需求。

优秀的软件测试人员具备的素质

1)综合能力(沟通能力,学习能力,开发能力,文字能力)

2)掌握自动化测试技术(软件更新测试历史功能)

3)测试用例的设计能力

4)探索性思维

概念篇

用户需求:没有经过合理的评估的需求

软件需求:有具体步骤的合理的需求

开发模型

软件的生命周期就是软件的开发模型

需求分析——计划——设计——编码——测试——运行维护 

瀑布模型

start——>需求分析——>计划——>设计——>编码——>测试——>End

特点:每个流程只执行一次,线性的开发流程,运行的产品很迟才能看到

适用场景:需求固定的小需求场景

螺旋模型

06bb62bcb6684310bde7025ef0bb7944.png

螺旋模型中各个阶段都引入了风险分析+原型

3f947ce373ce4bc19b0358d0f3ef9ad5.png

适用场景:规模庞大,复杂度高,风险大的项目

缺点:额外增加了成本

增量模型,迭代模型 

增量模型:将大需求拆分成小需求,每个小需求独立开发上线

迭代模型:在基础版本上层层优化

敏捷模型

 敏捷宣言:

个体与交互重于过程和工具

可用的软件重于完备的文案

客户协作重于合同谈判

响应变化重于遵循计划

总结敏捷模型的四个特点:轻文档,轻流程,重目标,重产出

Scrum

三个角色和五个重要会议

三个角色:产品经理,项目经理,研发团队

五个会议:发布计划会议,迭代计划会议,每日例会,演示会议,回顾会议

测试模型

V模型

dbf1822daad24fd585fb89662bbf3ba7.png

未将测试前置      

 W模型(双V模型)

56e60d50ff8a4c039affa831a29fcace.png

开发V模型并不是单单指编码阶段,而是 为产品开发流程而实施的各个阶段

特点:测试的对象不仅是程序,需求和设计同样要测试,测试与开发是同步进行的

缺点:

需求,设计,编码等活动被视为串行的;

测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束才能开始进行下一个阶段

重流程,无法自持敏捷开发模式

BUG篇

bug 等级:崩溃,严重,一般,次要

软件测试贯穿于软件的整个生命周期

当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是错误

当程序没有实现其最终用户合理预期的功能要求时,就是软件错误

如何避免和开发产生争吵

1:先检查自身,bug是否描述的不清楚(先反省自己)

2:站在用户角度考虑并抛出问题

3:BUG定级要有理有据(拿出bug定级描述文档,然后将bug的表现和bug定级描述文档进行匹配,说服程序员)

4:提高自己技术和业务水平,做到不仅能提出问题,最好也能给出解决方案

测试用例

笔试的时候编写测试用例题,需要按照Excel表格的方式来答题

面试的时候回答测试用例题,按照思维导图的方式来

常规思考+逆向思维+发散性思维

设计测试用例的万能公式

功能测试+界面测试+性能测试+兼容性测试+易用性测试+安全测试

功能测试:从产品功能角度出发,验证功能是否是正确的

界面测试:界面所有的元素都需要测试(大小,颜色,形状,材质)

性能测试:通常为一些极端情况

兼容性测试:

易用性测试:具备简单易上手的属性(引导教程)

安全测试:保证产品的安全性

特殊测试:弱网测试,安装卸载测试

软件的生命周期

需求分析——计划——设计——编码——测试——运行维护

软件测试贯穿于软件的生命周期

软件测试的生命周期

需求分析——测试计划——测试设计——测试执行——测试评估——上线——运行维护

如何进行弱网测试

抓包工具:fiddler

基于需求的设计方法

设计等价类

确定有效等价类和无效等价类

编写测试用例,设计具体的测试数据

边界值

边界值+次边界值

有效的边界值选无效的次边界值

无效的边界值选有效的次边界值

正交法

正交法的目的是为了减少用例数目,用尽量少的用例覆盖输入的两两组合

L4(2³)

L:正交表

4:行数

2:水平数

³:因素数

正交表的性质:

每一列中不同的数字出现的次数相等

任意两列数字的排列方式齐全而且均衡

借助工具来实现正交表:allpairs

判定表法

faabd521f8364c4080b1783f3cd47e4c.png7c5c0909e03446c39cdf1125b498b033.png

错误猜测法

对被测试软件设计的理解,过往经验以及个人直觉,推测出软件可能存在的缺陷

测试文档

1.项目背景

2.项目功能

3.对项目进行测试

     3.1编写测试用例

     (用例截图)

     3.2执行测试

      (选取几个用例的步骤截图)  

4.测试总结

(覆盖了多少个页面,用例是否全部执行通过,发现了多少bug)

打开开发者界面

ctrl+shift+i

对接口进行测试

请求方法,URL,请求参数,响应

接口测试工具:postman

Cookie:当前用户的登录状态

测试分类

按照测试目标分类

1:界面测试

2:功能测试

黑盒设计测试

3:可靠性测试

可靠性=正常运行时间/总运行时间

按照执行方式分类

静态测试:不实际运行的被测软件,静态的检查程序代码,界面或文档

动态测试:实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符

4:按照测试方法

4.1白盒测试

动态测试方法主要分为六种测试方法:

语句覆盖:每个语句至少执行一次

判定覆盖:既要测试T的情况,也要测试F的情况

条件覆盖:

判定条件覆盖:结合判定覆盖和条件覆盖来设计测试用例,用例既可以覆盖到条件,也可以覆盖到判定

条件组合覆盖:

路径覆盖:

4.2 黑盒测试

黑盒测试有:等价类,边界值,因果图,场景法,错误猜测法

4.3 灰盒测试

5.按照测试阶段分类

5.1单元测试

5.2集成测试 

5.3系统测试

冒烟测试:检查主流程是否能走通

5.4回归测试

所有的页面所有功能测试完成之后整体再回归一遍

7.按照实施组织划分

α测试(内测)

β测试(公测)

自动化测试

自动化测试能够取代人工测试吗?

自动化测试是测试人员手工编写 ,后续如果有功能的变更自动化也需要进行不定期的维护和更新

自动化测试可以大幅度降低工作量?

错误,自动化测试只是测试工作种的一小部分测试行为

自动化测试金字塔

10f710d88b0241fa9627f95fbcae97ca.png

UI:界面,精力较多,回报较少

API:接口测试,精力较少,回报较高

单元测试:对程序最小单元执行测试,精力很少,回报很高

web自动化测试

创建驱动

不同浏览器有不同的驱动

1.元素定位

打开页面的开发者工具

Ctrl+shift+i

选中箭头

bb9e9980eca04a1cbfe1cc808bccf625.png

cssSelector

选择器

copy——》copy select

XPath

bc4a45ae17a6435f81d275bd4b83131a.png

如果是动态元素怎么办?

选择到他的上一层标签,然后手动加上直接子集,加上下一个标签

75b7634312b74bd28f8ecdad3c234dd3.png

注意:登录状态下和非登录状态下,自动化打开的页面不相同,要注意一致性

findElement(By) 在页面查找元素,返回值 WebElement

findElements(By) 在页面查找元素,返回值是List<WebElement>

2.操作测试对象

点击:

click()

看每个标签的样式,除了hidden,绝大多数都能点击

模拟按键输入: 

sendKeys(" ")

e3b14c1f78dd4c6cbbb099dce62ee319.png

清除文本内容

clear();

获取文本信息

getText()

e72de1b0e88c4773b5a600fb77f74294.png

获取属性值

getAttribute()

获取当前页面标题

getTitle()

获取当前页面URL

getcurrentUrl()

cfb8c11385a54d0ab410273abbf32639.png

报错了找Exception

窗口

窗口大小的设置

75d06634f1df42e7aa8dd3a4e09facf7.png

窗口切换

5546555e7caf455d8f1decfa2ef72517.png

返回值是String

切换句柄

08f470115d794e05bbf86aedf1cc2b65.png

屏幕截图

能够把当时执行的场景保存下来

0af6aa9913c34a6aad1a62024b4cfe00.png

59ac0a632efa422990859298c9306dba.png

关闭

driver.close()关闭当前标签页

driver.quit()关闭浏览器,释放 driver 对象

等待

Thread.sleep();

假如写自动化代码出现NoSuchElement错误

第一步:在报错的代码前添加Thread.sleep(秒),设置的时间长一点

第二步:执行自动化,在自动化打开的页面里打开前端开发者工具,手动检查元素是否真的不存在

(1)自动化打开的页面确实不存在该元素

——手动打开的页面和自动化打开的页面不一样(登录和未登录状态下页面不一样)

——元素为动态元素(解决办法:先定位动态元素的前一级标签,再增加要定位的元素标签)

(2)自动化打开的页面确实存在该元素

——代码执行的速度比页面渲染的速度快(解决方法:等待)

强制等待

直接添加Thread.sleep(秒)

优点:写法简单       缺点:极大的增加了自动化执行的时间

隐式等待

可以规定查找元素时,在指定时间内不断查找元素,如果找到了代码继续执行,没找到,直到超时才会报错

implicitlyWait()   参数:Duration类中提供的毫秒,秒,分钟等方法

优点:智能等待,作用于全局

缺点:只能查找元素,不能确定元素是否是要找

显试等待

智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码

显式等待只作用在当前的条件上

混合使用等待了话等待时间不可预测

浏览器导航

打开网站

浏览器的前进,后退,刷新

弹窗

警告弹窗,确认弹窗,确认弹窗

弹窗特殊点:不能通过元素定位

输入文本信息

alert.sendKeys(" ");

文件上传

把文件路径上传到该元素

sendKeys( ); 

浏览器参数设置

设置无头模式(默认为有头模式)

不用打开浏览器,后台执行

浏览器加载策略

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值