一)selenium4和junit5回顾
1)我专门之前使用的是selenium4自动化测试工具和junit5单元测试框架
2)@SelectClasses({类名.class,类名.class,类名.class),@SelectClasses不光给我们制定了我们的测试套件中包含了那些类,还包含了测试套件中的类的执行顺序;
3)@Suite表示类是一个测试套件,如果使用@SelectClass来指定我们所使用的类的时候,那么类的执行顺序就是按照我们在@SelectClass中手动指定的类的顺序来进行执行的
4)不是说每一个用例都必须添加屏幕截图操作,需要考察用例本身的复杂程度和问题定位的难度,以及用例的核心程度来进行考察;
5)我们可以根据面试官给的用例来想象一下我们在使用该物品的时候或者是软件场景的情况下可能会涉及到的需求,利用具体设计测试用例的方法来进行讲解
一)通过selenium4自动化测试工具和junit5单元测试框架来结合实现自动化测试有哪些亮点呢?
1)使用注解:@Test和@AfterAll和@BeforeAll,避免再去创建程序执行入口,进行调用函数,避免资源的浪费,同时也会让自动化测试用例执行速度提高;
2)通过static修饰静态变量,全局只创建一次驱动对象,避免重复创建驱动对象造成时间和资源的浪费,下面的@Test方法就不需要重复的创建驱动对象了,销毁driver对象了,从而会提高程序运行的速度;
public class JavaTest { private static ChromeDriver driver; @BeforeAll public void start(){ if(driver==null){ driver=new ChromeDriver(); //添加隐式等待 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); } } @AfterAll public void quit(){ driver.quit(); } }
3)使用参数化,可以保持用例的简洁,提高了代码的可读性;
4)使用junit套件
只需要通过一个类就可以一次性执行所有我们需要进行运行的自动化测试用例;
5)使用隐式等待,强制等待,来提高自动化运行的稳定性,屏幕稳定之后再来运行;
5.1)显示等待写法太麻烦
5.2)对于提示框来说,显示等待不能用;
6)使用屏幕截图:方便于问题的追溯和问题的解决;
在项目中做出了那些测试动作,以及单元测试
性能测试是一个比较独立的测试工作,现在我们先来复习一下性能测试基础:
1)功能测试和性能测试的区别
2)性能好和性能不好的表现
3)性能测试指标以及名称解释
4)性能测试分类
一)功能测试和性能测试的区别:
功能测试:验证产品功能有没有做到
性能测试:验证产品功能有没有做好
二)性能好和性能不好的区别:
1)当微博上有明星结婚或者一些重大新闻就会出现软件APP崩了的情况
2)佩罗西老妖婆登台,微博退出重进,连首页都刷不出来
3)转战到抖音之后,点击抖音热搜,点进去之后提示网络错误,让我自己检查网络状态
12306为什么要设置这样的一个验证码呢?
原因就是为了拖延时间,因为像春运,学校放学售票的一个高峰期,购买票的人数非常的多,会对12306系统造成非常大的压力,所以我们可以通过降低平台的易用性来增加系统的性能,通过降低用户的易用性来降低并发用户数来提高系统性能
1)系统创建订单,提交支付,生成订单;
2)系统压力巨大,但是在双11可以承受住这些压力,通过提高系统性能,可以有效的提高用户的使用,还可以提高系统的营收;
三)如何衡量性能性能好坏:通过数据来进行展示,通常通过借助工具所监控和收集的各项指标来分析系统的性能
性能指标以及名词展示:
1)并发和并发用户数:
并发:强调的是大量用户的涌入同时性的操作,但是他们所做的各个操作都不一样;
并发用户数:一个向服务器发送带有压力的请求或者对服务有影响的操作的用户数量
系统用户数:某个系统的用户注册量
在线用户数:登陆了系统或者说正在使用系统的用户数量
2)系统响应时间/系统平均响应时间/请求响应时间
对于用户来说,从请求发出直到看到响应结果这段时间就叫做响应时间
响应时间和多个方面都有关系
3.1)用户运营商网速,多个服务器的处理,浏览器渲染页面
3.2)针对用户来说:右上角提示当前用户的网速,好的时候是绿色网速慢的时候是黄色或者是红色,软件运行内存,内存/磁盘空间,CPU内存的占用率
平均响应时间:单位时间内请求的响应时间
如果说响应时间比较平均,那么平均响应时间才有意义
如果说响应时间波动范围比较大,那么平均响应时间就没有什么意义
请求响应时间:服务器收到用户请求并且把响应内容发送出去
3)事务响应时间:处理请求对应的事务的时间
加入想要购买一件商品,在商城订单的过程中可能会涉及多个功能
比如说进入到商品详情页,购买页,支付功能,以及购买成功的订单页面
4)每秒事务通过数:TRansaction per second,也就是TPS,就是指每一秒也就是单位时间内事务的通过数量
TPS是指每一秒系统能够处理的事务数量,它是衡量系统处理能力的重要指标,当压力增大的时候,TPS曲线如果变化缓慢或者是有平坦的趋势,很有可能是服务器出现瓶颈了,如果说环境没有发生大的变化,对于同一个系统会存在一个最大事务处理能力,他并不会随着并发用户的增减而改变;
如果说TPS比较小,那么系统的性能就一定不好吗?
在性能测试里面,每一秒的事务通过数越多,那么这个系统的性能就会越好,但是要有一个批判性思维,有的系统事务比较复杂高,一个事务可能对应着很多操作,比如说订单提交,每一秒订单提交的数量作为每一秒事务通过数的一个标准
5)点击率:代表用户每一秒向web服务器提交的HTTP请求的数量,不是点击一个链接就叫做1个点击率,而是点击一个百度首页链接向服务器发送了多个HTTP请求,比如说请求图片信息,JS信息,CSS信息,点击率并不是鼠标的一次点击,有可能一次鼠标点击发送了多个HTTP请求;
6)吞吐量:系统在某段时间内处理的客户请求资源的数量,吞吐量越高,性能越好
7)吞吐率:吞吐量/时间,表示单位时间内处理的HTTP请求的数量
吞吐量和吞吐率主要是为了体现软件系统的性能承载能力
单位通常使用byte/sg
8)思考时间:两次HTTP请求的间隔时间,和用户的反应时间有关
9)资源利用率:包含CPU资源,内存资源,硬盘资源,网络资源等等,运营商带宽资源
功能相同的两款产品,如果其中一个产品的资源利用率越高,说明它的性能要更差一些
假设有一款软件,占用的CPU资源比较高,那么就说它的性能比较差一些
当我们打开百度的官网的时候:要进行加载一些资源比如说CSSHTML图片资源还有一些JS
服务器在将数据传递给客户端的时候:百度服务器部署在云上,带宽是1M
四)性能测试的分类:
1)一般性能测试:验证软件在正常情况和系统条件,验证系统是否满足性能指标,系统性能的波动性比较小,下面是正常情况下一个页面的并发数:
2)负载测试:假设我们要实施性能测试,系统通常能够接受的并发范围在8以下
我们让并发量的变化是 2 2 2 2,系统就会出现一些波动,在8范围内让他运行一段时间看看系统的性能是否会出现一些拐点;
3)压力测试:验证系统在已经处于极限负载状态下或者某一项指标已经处于饱和状态下系统性能的表现,压力测试往往会把系统搞崩溃,就是想找最大极限;
4)稳定性测试: 指系统在进行连续运行的情况下,检查系统的各项指标是否正常
就是类似于举杠铃一样,举重运动员需要拿起杠铃之后需要停留三秒之后放下才算成功,如果三S之内放下了,则认为挑战失败
稳定性测试怎么测,功能测试常用6种方法 (pbcedu.net)
代码题型:在面试的时候我们会进行手撕代码,写完代码之后面试官可能会问,请对你自己进行编写的代码设计测试用例:
有效等价类:针对产品规格说明书来说,有效且有意义的数据
1)从参数上进行设计测试用例:
有效等价类:int类型的变量,int类型的数组
无效等价类:
类型:String类型的数组,Float类型的数组
非数组:传递一个字符串,传递一个具体类型的数字,传递一个集合
长度:过长,过短,NULL,不传递参数
2)从代码逻辑上进行设计:
第一层循环(a),第二层循环(b),if语句(c)
组合:
ab(连b的条件都不满足)
abc
ab否c(进入到了c语句的判断条件但是没有进入到c的语句块里面)
3)从代码性能进行分析:
时间复杂度:
空间复杂度:
数组过大的时候对时间复杂度和空间复杂度进行分析
4)异常情况考虑:
循环计算过程中,时间过长的话程序是否会出现故障,要不要加上try catch进行处理
硬件资源和软件资源是否够用
设计自动化测试的思路:
一)首先要进行明确个人项目里面哪些页面要进行WEB自动化测试?
衡量标准:前面已经说过+访问量比较大的页面+重要页面+使用频率比较高的页面,比如说登录页面,首页
二)如何实施自动化测试用例?
1)针对确定的页面来进行设计测试用例
2)写代码之前,搭建自动化测试框架,使用junit5+selenium,只创建一次驱动对象,类似于测试套件;
3)根据手工测试用例编写自动化测试用例,使用参数化来模拟不同用户的输入
4)每一次代码增加新的功能或者是前端页面增加新的功能
可以手动执行自动化测试脚本来进行测试
屏幕截图有助于出现错误的时候的一个定位追踪,便于排查问题和发现问题