你好 我是懂 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.前置依赖接口,怎么提高稳定性?

答:重试,但是要限制重试次数和幂等性。

日常还有很多关于「测试」技术、薪资、面试套路方面的交流,如果你也有一个「加薪」梦,欢迎加入我的公众号 懂 java 的测试,大家一起升职加薪。免费简历修改和面试指导。


↙↙↙阅读原文可查看相关链接,并与作者交流