栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

测试开发面经(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

测试开发面经(二)

文章目录
  • 测试开发面经(二)
    • 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 的理解使用
  1. List存储一组不唯一有序的对象。
  2. Set是不允许重复的集合,不会有多个引用相同对象的元素。
  3. Map 采用键值对存储,两个key可以引用相同的对象,但key不能重复。比如key为String类型,也可以是其他对象。
5. Javascript怎么定义DOM对象?
  1. 通过属性id获取 ( document.getElementById() )
  2. 通过类名(class)获取 ( document.getElementsByClassName() )
  3. 通过name属性获取 ( document.getElementsByName() )
  4. 通过标签名获取 ( document.getElementsByTagName() )
  5. 通过选择器获取( document.querySelector() )
  6. 通过选择器获取一组元素;( document.querySelectorAll() )
6. Java程序请求超时怎么办?

​ 设置网络超时设置后,请求在设定时间能未完成将被强制终止,保证程序不出现无限制的线程阻塞情况,有效的提高了应用的可用性。

  1. HttpClient 超时设置(可以在Spring bean中 还有在代码中设置)
  2. WebService超时设置

ConnectionTimeout 连接超时

ReceiveTimeout 读取超时

  
       

7.Spring 7.1 谈谈你对AOP的理解 ?

Spring详解(二)AOP面向切面编程

​ 在源代码中,业务方法中增加功能源代码改动比较多,比较难维护,AOP可以给某些方法增加相同的一些功能。可以不修改源代码给业务方法增加非业务功能。

7.2 AOP的环绕通知?

环绕通知方法的定义

  1. 方法是public

  2. 方法名称是自定义

  3. 方法名称自定义

  4. 方法必须有ProceedingJoinPoint参数

特点:

  1. 在目标方法的前和后都能增强功能。
  2. 控制目标方法是否执行。
  3. 修改目标方法的执行结果。
7.3 其他基础知识要掌握

Spring详解

8.如果你认为是个bug,但是找开发,对方说不是,咋办?
  1. 优先确认需求情况,不符合需求的就是BUG,如果开发认为需求有问题,让开发去找产品经理改需求。如果是需求优先级较低,则保持open状态,测试报告写明原因,抄送测试leader和开发leader。
  2. bug重现,在开发面前重新操作一遍。确定看到的是统一现象。确定是不是环境配置的问题。
  3. 说明导致的后果。
9. 反问
1. 我可以帮我的应聘团队做什么?
2. 你们期待我可以在哪些日常工作中体现价值?

实习的终极目标:

  1. 通过实习感受行业的兴衰
  2. 感受公司的文化
  3. 感受团队的氛围
  4. 感受自身和专业间的距离,最终做出最佳的职业选择。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/672429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号