你好,我是懂Java的测试
最近辅导简历,有同学向我反馈,自学过接口自动化、没有落地接口自动化项目办?还有很多同学落地实践过自动化,但是仅仅只是停留在会用,没有那种深层次使用,但是面试官往往会问一些细节问题,怎么破?
我给出的建议有两个,一个是速成的方式,多看面试题,理解性的记忆,千万别死记硬背,另一个就是长期落地实践,日积月累。
今天就先说说速成的方式,多看面试题,通过面试题去驱动自己对接口自动化的思考和积累,这是一种很好的方式。
很多小伙伴都问,为什么面试官问的问题都是偏细节的东西?我想说因为现在的测试简历90%都说做过自动化,又加上大环境不行,各大厂几乎都在裁员,竞争压力特别大,你不写接口自动化可能连面试机会都没有。
我面试过很多人,简历上说熟悉接口自动化,面试一问才知道,要么就是纸上谈兵式的自学,要么就是做过,但是做的不深,仅停留在表面,所以说面试官只能通过一些细节问题,去pass掉这些人,留下做过自动化测试的高手。
下面就列举几个接口自动化项目常见的问题。配合价值25k测试工程师面试题及其答案分享 这篇文章里自动化的题目阅读,效果更佳,在此基础之上,我又补充了以下几个经常遇到的相关面试题
1.你们公司没有通用的接口自动化框架吗?为什么还需要你们部门来搭建这套?
答:公司的接口自动化是有的,但是调研过程中,发现比较难上手,而且配置繁多,遇到问题还得自己通过代码层面去定位问题,自己搭建的自动化符合自己业务私有定制开发,上手快,门槛低,效率高。
2.效果和收益? 接口自动化回归过程中有没有发现什么问题?
答:项目组采用的敏捷开发模型,对效率要求很高,原先回归需要2个人半天时间,自动化测试以后,只需要十分钟左右,大大缩减了回归时间。自己编写的自动化case,发现了3个测试bug,有效避免了线上损失,
注意:自动化回归发现的bug一定不能太多,太多了,只能证明集成测试或端到端测试质量太差,发现的bug可以从以下几方面说:开发私自修改代码,没告知测试回归。代码解决冲突导致代码丢失、功能丢失等等。
3.你们持续集成怎么做的?
答:百度看看Jenkins集成自动化项目。
4.你们自动化项目你个人觉得还有哪些不足,怎么去提升?
答:可以使用封装、继承的方式,让代码具备更高的复用率;如果测试用例比较多且相互独立,执行效率低,可以说采用多线程的方式,并发执行,提高执行效率;
如果你对前后端比较熟悉,也可以说,打算做个测试平台,降低学习门槛,让更多不了解代码的小伙伴,快速上手使用。
甚至,你也可以说,做成测试平台以后,打算向其他项目组推广。让公司更多的小伙伴上手自动化项目。
5. 断言这么做的?断言数据库吗?
答:python和java都有天然的断言框架,至于是否要断言数据库,看具体项目,有些插入数据接口,没有查询的接口,这种情况只能做数据库断言。
6.java中的testng 是什么?有哪些注解?执行顺序知道吗?
答:TestNG 是一个测试框架,其灵感来自 JUnit 和 NUnit,但同时引入了一些新的功能,使其功能更强大,使用更方便。TestNG 设计涵盖所有类型的测试:单元,功能,端到端,集成等。
注解执行顺序 @BeforeSuite->@BeforeTest->@BeforeClass->@BeforeMethod->@Test->@AfterMethod->@AfterClass->@AfterTest->@AfterSuite
除此之外,还有 @DataProvider @Parameters 不仅仅得知道名称,要大致知道注解的作用是什么,没办法,只能死记硬背加理解,面试官只能通过这种细节来看面试者,是否真正写过自动化或者做的自动化项目能达到很高程度。
7.集成了allure 报告对吧?那你能告诉我,能看到哪些页面细节?
答:如截图
8.异步接口了解过吗?异步接口断言有遇到过吗?怎么解决?
答:同步需要等待所有步骤执行完了才能继续往下执行,异步只需要发起调用 后就可以继续其他逻辑。
自动化项目中,通过循环+计数器去处理异步返回接口,伪代码如下
import org.apache.commons.lang3.StringUtils;
/**
* @author 懂java的测试
*/
public class AsynInterface {
public static void main(String[] args) throws InterruptedException {
int start = 1;
//具体循环多少次得具体评估
int stop = 100;
//这里伪造一个异步接口调用,实际情况肯定不是这样的,
//只是为了展示这个处理异步接口的方式
AsynInterfaceTest asynInterfaceTest = new AsynInterfaceTest();
//设置数据,返回true,只是代表请求成功,并不表示一定设置成功,具体结果还得需要循环调用getResult,获取最终结果
asynInterfaceTest.setResult("Asyn");
while (start <= stop) {
System.out.println("开启循环" + start + "次");
//这里调用异步接口,查询返回结果,简单做个判断,自动化项目中可以做个断言
String result = asynInterfaceTest.getResult();
if (StringUtils.equals("Asyn", result)) {
break;
} else {
start++;
if (start >= stop) {
throw new RuntimeException("异步接口循环多次未返回最终结果");
}
}
}
System.out.println("异步接口获取最终结果成功!!!");
}
}
这段代码模仿一种循环+计数器方式,获取异步处理结果,获取最终结果就跳出循环,如果没有,继续循环,直到超过规定的循环次数。
开启循环1次
开启循环2次
开启循环3次
开启循环4次
异步接口获取最终结果成功!!!
循环查询打印的日志,
9.前置依赖接口,怎么提高稳定性?
答:重试,但是要限制重试次数和幂等性。
幂等性:就是用户对于同一操作发起一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用,举个反例,电商场景中,用户页面提交一笔订单,因为网速或接口响应慢等原因,用户短时间内没得到下单成功的提示,这时用户重复点击提交按钮,导致数据库产生多笔订单,这个就是不幂等性,当然了现实情况是很多网站都会做幂等性校验,至于怎么去校验,后面我会单独写一篇幂等性的文章,着重介绍,前后端、mq消费保证幂等性的方案。
如果本文对你有帮助的话,欢迎点赞&在看&分享,这对我继续分享&创作优质文章非常重要。感谢
也可加我微信,免费简历指导、面试辅导、学习资料、简历模板获取。