代码改变世界

大厂面试测试开发岗,需要准备的100道题型

2021-06-28 11:14  zouhui  阅读(389)  评论(0编辑  收藏  举报

1-50题、《大厂测试开发面试50题,你能答出几道?》

51、Web View 怎么测试?

首先要在代码中开启webview debug
然后输入Chrome://inspect
然后切换driver
获取元素控件
如果想要在继续测试原生,则需要将driver切换回来

52、请问你的定位策略是什么?
web:css
app:id

53、请问如何实现用例失败或者异常时候需要截图?
使用webdriver中的截图类,WebDriver有提供用于截图的TakesScreenshot类
driver.getScreenshotAs

54、请问如何分布式执行webdriver用例?
方式一:利用jenkins分布式Master-slave来解决,selenium脚本不需要修改,环境部署好,可以直接跑
方式二:利用selenium grid分布式处理,这个有介绍过点击打开链接,剩下就是把selenium grid放到jenkins里面,让jenkins去管理,这个后续一篇介绍,这种方式,driver的url要改成hud的,脚本需要稍加修改

55、如何在脚本中执行 JavaScript 代码?
方式一:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String scriptContent = "function multiply(a,b) {return a*b;}";
//注册脚本
engine.eval(scriptContent);
Invocable invocable = (Invocable) engine;
//调用注册函数
System.out.println(invocable.invokeFunction("multiply", 2, 3));

方式二:

//使用管道流,将输出流转为输入流
PipedReader prd = new PipedReader();
PipedWriter pwt = new PipedWriter(prd);
//设置执行结果内容的输出流
engine.getContext().setWriter(pwt);
//js文件的路径
String strFile = Thread.currentThread().getClass().getResource("/").getPath() + "/abc.js";
Reader reader = new FileReader(new File(strFile));
engine.eval(reader);
BufferedReader br = new BufferedReader(prd);
//开始读执行结果数据
String str = null;
while ((str = br.readLine()) != null && str.length() > 0) {
     System.out.println(str);
}
br.close();
pwt.close();
prd.close();

56、Appium 的定位策略有哪些?
android的定位方式:
1.通过元素的 id 定位
2.通过元素的 className 定位元素
3.通过元素的 accessibility id 定位元素
4.通过 androiduiaumator 定位元素
5.如果选取的定位信息的值在整个界面存在多个时,可以使用 driver.findElements 方法来 定位
6.findElementByAndroidUIAutomator
ios的定位方式:
1.iOSNsPredicateString
2.iOSClassChain
3.AccessibilityId:主要使用元素的 label 或 name 或者 value 属性进行定位
4.className:主要使用元素的 type 属性进行定位

57、请简述Appium的原理

58、iOS 和 Android 的 UI 自动化的原理是什么?

59、当定位策略都失败的时候,你该怎么做?

80%是你元素定位的不对,那么多定位方法,一个不行换另外一个,直接不能定位,先定位父元素,再循环找子元素。一般来说XPATH都能定位到,无非是可阅读性不强。真的全部失效,请求开发帮你改个元素属性好了。

60、UI 测试做的是 iOS 还是 Android?讲讲 iOS 的 UI 怎么测?

61、获取 Appium 中的 content-desc 不为空的控件列表,代码不限。
driver.find_element_by_accessibility_id('搜索或输入网址')

62、并行运行 Appium 需要修改哪些参数
需要改端口,多个端口
然后在caps文件中获取多设备

63、你如何用Selenium测试

64、Selenium的工作原理?

65、常见的定位方式?

66、上传图片的几种方式?

67、如何处理动态元素?

找父级元素,通过父级元素查找子元素,xpath

68、你是怎么开发测试框架的?

69、PO模型是怎么做的?

70、失败截图的原理是什么?

71、你常用的命令是什么?

72、用什么查看log?
tail -f

73、如何查找一个文件大小超过5M的文件
find user -size +5000k -type f

74、如何查看进程?
ps -elf

75、Linux 中查找某个文件并删除它
find . -name '*.exe' -type f -exec rm -rf { } \

76、Linux 查询 CPU、内存的指令
cat /proc/cpuinfo查看linux系统的CPU型号、类型以及大小
通过greap命令根据Physical Processor ID筛选出多核CPU的信息
cat /proc/meminfo查看linux系统内存大小的详细信息,可以查看总内存,剩余内存、可使用内存等信息。
df -h查看linux系统各分区的使用情况
free -m 查看linux系统内存使用量和交换区使用量

77、使用 Shell 获取 Nginx log 中接口包含 topic 且状态码为 200 的接口平均响应时间(越严谨越好)
cat nginx.log |grep ‘topic’ |grep ‘200’|awk -F ‘’ ‘{sum=sum+$1} END {print “sum=”,sum}’

78、每隔 2s 获取某个进程的 CPU 和 mem 数据并保存到 csv 数据文件


79、快排的实现 (代码实现)

80、算数组中查找出现次数过半的数(代码实现)

81、查找链表的倒数第三个数(代码实现)

82、什么是面向对象编程?

83、讲下Java多线程的使用

84、有三个线程T1,T2,T3,怎么确保它们按顺序执行?

85、Thread 类中的start() 和 run() 方法有什么区别
start() 启动时用的,只调用一次
run() 可以调用多次

86、请写一个线程安全的单例模型
//Initialization on Demand Holder
public class Singleton
{
private static class SingletonHolder
{
public final static Singleton instance = new Singleton();
}
public static Singleton getInstance()
{
return SingletonHolder.instance;
}
}

87、请写出冒泡排序

88、1~9999数列中数字3出现的次数,请用递推方法解题。

89、从一个数组中找出前4个最大的数,用最优解。

90、写一段程序,删除字符串a中包含的字符串b,举例 输入a = “asdw”,b = “sd” 返回 字符串 “aw”,并且测试这个程序。

91、写一个方法,把字符串转为数字,比如 str=“1234”,变成 int 1234。并且测试这个程序

92 、A、有两个有序链表,将他们组成一个有序链表。

93、给一个字符串,字符串里有 (){}[]“”这六个符号,设计一个算法,判断这些符号是否成对匹配,即要检验这些括号是否都是成对出现的。

94、有两个字符串类型的数字,实现一个方法将它们进行相加,并返回相加后的数值。(要考虑数据的长度问题)

95、Java 多线程的创建

96、算法:二叉树的深度计算

96、算法:一亿个无序数找出 Top 100(这个也没写好,空间复杂度高了,应该用堆排序)

97、说下左连接和右连接
左外连接:将左表为驱动表进行连接,结果数据包含左表全部数据,以及右表中和左表匹配的数据,左表中有,但右表中没有的数据显示null(取左边全部及右边部分数据)
SELECT * FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

右外连接:将右表为驱动表进行连接,结果数据包含右表全部数据,以及左表中和右表匹配的数据,右表中有,但左表中没有的数据显示null(取右边全部及左边部分数据)
SELECT * FROM TABLE1 RIGHT JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

内连接:等值连接,返回两张表中都满足匹配条件的数据 (取两个表的交集)
SELECT * FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.USERNAME = TABLE2.USERNAME
SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

98、给你一张表,根据要求写sql,这个题目比较多,自己百度吧。

99、使用sql生产10万条数据
create table myTestTable as
select rownum as id,
to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.string('x', 20) random_string
from dual
connect by level <= 1000000;

100、数据库熟吗?用过哪些数据库?索引会吗?事务了解吗?写一个SQL 查询语句:给一个字段,对其进行从大到小排序,取前十行。
我平时的工作中会协助提高数据库的查询效率,会给数据 id 等创建索引;事务开发那边用的比较多,然后我举了 ATM 机取款的例子。SQL 语句如下
select field from table order by field desc limit 10

转载自:http://navo.top/FFr6Nj

-------- THE END --------

????