- 测试开发面经(二)
- 1. 用最少的修改次数将数组一半的数值改为可以开方的数。
- 2.聊一聊UI自动化测试任务?
- 2.1 监听器配置
- 2.2 Freemarker工具类
- 2.3 Selenium的使用问题
- 2.4 怎么组织小组组员进行测试的?
- 2.5 遇到的问题,解决方式?
- 3.聊一聊接口测试平台项目?
- 3.1 设计的平台后端怎么分层(项目骨架,有哪些包,作用是什么)
- 3.2 遇到的问题,解决方式?
- 4. List、Set、Map 的理解使用
- 5. Javascript怎么定义DOM对象?
- 6. Java程序请求超时怎么办?
- 7.Spring
- 7.1 谈谈你对AOP的理解 ?
- 7.2 AOP的环绕通知?
- 7.3 其他基础知识要掌握
- 8.如果你认为是个bug,但是找开发,对方说不是,咋办?
- 9. 反问
测试开发面经(二)岁月难留,现在的每一天,都是余生最年轻的一天,把握好当下。
阿里巴巴的笔试有一定的难度。
1. 用最少的修改次数将数组一半的数值改为可以开方的数。 给一个长度为n的数组,可以用修改券对数组内的某个值进行+1或-1操作。要求用最少的修改券,将数组一半的数值改为可以开平方数。
package DataTest;
import java.util.Arrays;
public class PowTest {
public int powToCharge(int[] nums){
int res =0;
int[] record = new int[nums.length];
for (int i = 0;i
2.聊一聊UI自动化测试任务?
首先我的团队针对《剑鱼论坛》划分了不同的模块,然后对细分的模块的不同功能进行了测试用例的设计,之后使用自动化测试框架auto2021+TestNG+JavaMail+FreeMarker+Ant对论坛进行了UI自动化测试。
2.1 监听器配置
public class WebTestListener extends TestListenerAdapter {
public static void sendEmail(String email,String subject) throws MessagingException, IOException {
String info=ReadHTML.reMailString();
// String from="test2014123@126.com";
// String auth_code="FWXQWTJMGXLJJBLX";
// 获取属文件中发件人和授权码的相关信息
String from = ReadProperties.getPropertyValue("from");
String auth_code =ReadProperties.getPropertyValue("auth_code");
// 设置SMTP服务
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "smtp.126.com");
props.put("mail.smtp.auth", true);
// 1.创建session对象
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, auth_code);
}
});
// 2、创建邮件
Message message = new MimeMessage(session);
// 设置发件人
message.setFrom(new InternetAddress(from));
// 设置收件人.
email=ReadProperties.getPropertyValue("tomail");
String[] address = email.split(",");
InternetAddress[] address_list = new InternetAddress[address.length];
for (int i = 0; i < address.length; i++) {
address_list[i] = new InternetAddress(address[i]);
}
message.addRecipients(Message.RecipientType.TO, address_list);
// 设置主题
message.setSubject(subject);
// MimeMultipart类是容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
//创建包含HTML内容的MimeBodyPart
BodyPart body1=new MimeBodyPart();
//设置html内容
body1.setContent(info,"text/html;charset=utf-8");
//将MimeMultipart设置为邮件内容
mainPart.addBodyPart(body1);
message.setContent(mainPart);
// 3、发送邮件
Transport.send(message);
System.out.println("发送成功");
}
@Override
public void onFinish(ITestContext testContext) {
// TODO Auto-generated method stub
super.onFinish(testContext);
// 调用Freemarker工具
FreemarkerTest ft = new FreemarkerTest();
ITestNGMethod[] methods=this.getAllTestMethods();
List successList=this.getPassedTests();
List failList=this.getFailedTests();
List success_list=new ArrayList();
List fail_list=new ArrayList();
// 将成功用例导入freemarker
for(int i=0;i
2.2 Freemarker工具类
public class FreemarkerTest {
private static final String TEMPLATE_PATH = "src/templates";
private static final String CLASS_PATH = "src/com/freemark/hello";
Configuration configuration = new Configuration();
Writer out = null;
Map dataMap = new HashMap();
List caseList = new ArrayList<>();
public void setDetails(String testFormwork,String testPerson,String testType){
try {
// step2 获取模版路径
configuration.setDirectoryForTemplateLoading(new File(TEMPLATE_PATH));
// step3 创建数据模型
dataMap.put("caseList",caseList);
dataMap.put("testPerson",testPerson);
dataMap.put("testType",testType);
dataMap.put("testFormwork",testFormwork);
// step4 加载模版文件
Template template = configuration.getTemplate("report.ftl");
// step5 生成数据
File docFile = new File("src" + "/" + "report.html");
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
// step6 输出文件
template.process(dataMap, out);
System.out.println("report.html 文件创建成功 !");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != out) {
out.flush();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
public void setCase(String testMethod,String result,String failReason){
caseList.add(new Case(testMethod,result,failReason));
// caseList.add(new Case("12345","12345","1234"));
}
2.3 Selenium的使用问题
// 元素找不到需要滑动窗口
webtest.runJs("window.scrollTo(0,document.body.scrollHeight)");
//侧边框滑动窗口
webtest.runJs("document.getElementById("jianyuluntansidebar").scrollTop=10000");
2.4 怎么组织小组组员进行测试的?
首先我对论坛划分了细分的模块,然后为每个组员分配模块,组员根据不同模块的功能设计测试用例。
2.5 遇到的问题,解决方式?
测试用例集成到框架是部分组员的测试用例出现了编码问题,出现中文乱码,解决方式是小组内的编码方式统一设置为UTF-8。
JavaMail 发送的内容为HTML代码,不是html页面。将邮件内容设置为html格式
// MimeMultipart类是容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
//创建包含HTML内容的MimeBodyPart
BodyPart body1=new MimeBodyPart();
//设置html内容
body1.setContent(info,"text/html;charset=utf-8");
//将MimeMultipart设置为邮件内容
mainPart.addBodyPart(body1);
message.setContent(mainPart);
3.聊一聊接口测试平台项目?
《POSTTEAM》接口测试平台
3.1 设计的平台后端怎么分层(项目骨架,有哪些包,作用是什么)
后端采用了MVC三层架构,包分为存放控制器类的controller,存放实体类的domian,存放业务处理代码的Service包,存放Mybatis的实现数据库查询的接口的Mapper包,vo包存放CommonResult类,便于前后端的连接。
CommonResult类code 的值0和1代表了成功和失败,msg是后端传输的信息,data是后端传递的数据,这样操作使后台开发更加灵活和规范。
获取Token功能利用了正则表达式,连续使用了两次正则表达式,第一次获取前端用户输入的模板,第二次在HttpClient方法中获取token。
3.2 遇到的问题,解决方式?
前后端连接的问题。
如何解决@RequestParam无法接收vue+axios传递json数据
4. List、Set、Map 的理解使用
- List存储一组不唯一有序的对象。
- Set是不允许重复的集合,不会有多个引用相同对象的元素。
- Map 采用键值对存储,两个key可以引用相同的对象,但key不能重复。比如key为String类型,也可以是其他对象。
5. Javascript怎么定义DOM对象?
- 通过属性id获取 ( document.getElementById() )
- 通过类名(class)获取 ( document.getElementsByClassName() )
- 通过name属性获取 ( document.getElementsByName() )
- 通过标签名获取 ( document.getElementsByTagName() )
- 通过选择器获取( document.querySelector() )
- 通过选择器获取一组元素;( document.querySelectorAll() )
6. Java程序请求超时怎么办?
设置网络超时设置后,请求在设定时间能未完成将被强制终止,保证程序不出现无限制的线程阻塞情况,有效的提高了应用的可用性。
- HttpClient 超时设置(可以在Spring bean中 还有在代码中设置)
- WebService超时设置
ConnectionTimeout 连接超时
ReceiveTimeout 读取超时
7.Spring
7.1 谈谈你对AOP的理解 ?
Spring详解(二)AOP面向切面编程
在源代码中,业务方法中增加功能源代码改动比较多,比较难维护,AOP可以给某些方法增加相同的一些功能。可以不修改源代码给业务方法增加非业务功能。
7.2 AOP的环绕通知?
环绕通知方法的定义
-
方法是public
-
方法名称是自定义
-
方法名称自定义
-
方法必须有ProceedingJoinPoint参数
特点:
- 在目标方法的前和后都能增强功能。
- 控制目标方法是否执行。
- 修改目标方法的执行结果。
7.3 其他基础知识要掌握
Spring详解
8.如果你认为是个bug,但是找开发,对方说不是,咋办?
- 优先确认需求情况,不符合需求的就是BUG,如果开发认为需求有问题,让开发去找产品经理改需求。如果是需求优先级较低,则保持open状态,测试报告写明原因,抄送测试leader和开发leader。
- bug重现,在开发面前重新操作一遍。确定看到的是统一现象。确定是不是环境配置的问题。
- 说明导致的后果。
9. 反问
1. 我可以帮我的应聘团队做什么?
2. 你们期待我可以在哪些日常工作中体现价值?
实习的终极目标:
- 通过实习感受行业的兴衰
- 感受公司的文化
- 感受团队的氛围
- 感受自身和专业间的距离,最终做出最佳的职业选择。



