自动化常见面试题
1、这行代码 '1234'[3:] 的运行结果是什么
'4' 考察点:python切片
包括:正索引和负索引两部分,如下图所示,以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step)。
当只有一个“:”时,默认第三个参数step=1;当一个“:”也没有时,start_index=end_index,表示切取start_index指定的那个元素。
切片操作基本表达式:object[start_index:end_index:step]
step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情说三遍!
start_index:表示起始索引(包含该索引对应值);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。
end_index:表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。
2、执行import语句的时候,解释器是如何 查找模块文件的?
最终是通过 sys.path决定的。通常我们可以通过修改环境变量 PYTHONPATH 来添加自己的模块搜索路径
3、怎么把一个 字符串 转换为整型
可以使用 int函数
4、tuple 和list 的区别主要是什么?
tuple是不可变的,list是可变的 mutable
5、怎么把一个数字格式化输出为 10位宽度, 不足前面补零?
可以用'%010d' % 56 或者 '{:010}'.format(56)
6、打开文件的时候 用with open ... as ... 这种方式有什么好处?
这种方式不需要调用 close方法关闭文件句柄, 如果用直接用 fh = open(....)这种方式,如果忘掉关闭文件句柄,会造成文件一直打开的后果
7、read,readline和readlines 的区别是什么
read 读取整个文件 readline 读取下一行, readlines 读取整个文件,返回一个列表,列表中每个元素就是文件汇总的每行内容
8、类的静态属性和实例属性的区别是什么?
静态属性时属于类的, 所有实例公有的属性,只有一份。 而实例属性是每个实例各自独有的属性。
9、类的静态方法和实例方法的区别是什么?
实例方法的调用离不开实例,我们需要把实例自己传给函数,而静态方法可以通过类名进行访问。静态方法里面不能访问实例属性
10、面向对象中 组合和 继承的区别
比如 一个 汽车 对象 拥有一个 发动机 对象 和 4个 轮胎 对象 可以说汽车对象由 发动机 对象和轮胎对象组成 ,这就是对象的组合 而一个 东北虎可以继承自老虎对象, 这就是继承 组合是 “有一个”的关系,而继承是“是一个”的关系
11、什么是多态?
多态是面向对象设计的一种机制、一种能力。它主要指 对某个类的子类和父类的实例对象, 调用同样的方法,其执行的效果多种多样。 这样的一个特点。 参考 https://www.zhihu.com/question/30082151
12、一个目录要成为python的package 需要有什么?
需要在目录下面加上 init.py 文件
13、Python中调用外部程序有哪些方法?
可以使用 os.system 或者 subprocess模块里面的函数(比如check_output)或者Popen类
14、Python 怎样非阻塞(也就是python程序不需要等待被调用程序结束就可以继续运行下面的代码)启动一个外部程序的方法?
可以用subprocess 的 Popen类,比如
from subprocess import Popen
process = Popen(args='mspaint', shell=True)
print 'done'
15、python 函数参数定义里面 * , ** 分别是什么意思
可变参数 和 关键字可变参数 函数参数的概念可以复习一下下面的例子
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c,
print 'args =', args, 'kw =', kw
其中 a,b 是 必填参数、c是缺省参数、args是可变参数, kw 关键字可变参数
16、如果我想直接存储一个python dict 对象到文件里面,该怎么做?
可以使用pickle 或者json 将对象进行序列化
17、range(10000) 和 xrange(10000) 的区别
前者会立刻产生出一个list对象包含0到9999所有数字, 而后者并不立刻产生 包含所有数字的list 对象。 一般比较大的循环,建议使用xrange,这样会更快一些
18、在什么情况下,python对象会被解释器清除?
当该对象没有任何 指向它的引用(引用计数为0)
19、两个线程更新一个dict 里面的内容,该怎么设计?
比如 u'abcd'
24、怎么把unicode字符串的编码为utf8的字符串
比如 u'abcd'.encode('utf8')
25、进程间通信有哪些方法?
共享内存,socket 通信 都可以
26、多线程如何同步和互斥?
python 中可以用 threading.Lock 或者条件变量等 方法
27、Python中如何捕获所有的异常?
如下:
如下:
try:
...
except :
...
28、Python中如何指定一段代码,不管是否有异常发生都执行的?
可以用finally 语句,如下:
try:
...
except :
...
finally:
...
29、进程和线程的区别
进程是运行着的程序,而线程是进程中指令的执行单元。 代码指令必须在操作系统分配的线程中执行。 一个进程至少包含一个线程。
30、python怎么实现一个单例模式的类?
参考 http://www.cnblogs.com/dyllove98/archive/2013/07/20/3202955.html
31、请用一种算法将一个包含了n个整数的列表 按从小到大的顺序进行排序
可以使用下面的冒泡排序法
def bubbleSort(alist):
# j 是最后一个元素 到 第二个元素
for j in range(len(alist)-1,0,-1):
for i in range(0, j):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
return alist
32、请画出Selenium 的架构示意图
33、selenium 有哪些选择元素的方法
可以根据 id ,name 属性, class 属性等, 最灵活的是css选择器 和xpath 选择器 (自行复习一下css选择器,xpath的语法)
34、Django中一个http请求由那个函数处理是怎么决定的?
根据url路由配置
35、django 通常要和那些wsgi server 一起使用?
${list}= create list 1 2 3 4
:FOR ${index} IN @{list}
\ Log To Console ${index}
Run Keyword If '2016' in $html and 'UTC' in $html
... log to console \n2016年的,UTC时间
... ELSE IF '2016' in $html log to console \n2016年的
... ELSE IF 'UTC' in $html log to console \nUTC时间
... ELSE log to console \n以上都不是
45、开发移动应用自动化的大体步骤有哪些
主要就是根据要操作的元素的属性特征,选择到这些元素,然后调用Appium 库的方法操作这些元素,获取元素的信息(主要是文本内容)。 分析元素信息是否正确
46、怎样查看移动应用的界面元素的属性
可以通过 UIAutomate Viewer 工具
47、Appium 选择元素的方法有哪些
通过 resource id, class name, accessibility id, xpath, UIAutomator API 的java代码
48、Appium 怎样滑动屏幕
可以通过 WebDriver的swipe 方法
49、负载测试和压力测试的区别
根据 国外Wiki上的解释
负载测试 主要是 根据需求规格上说明的应该能承受系统负荷,模拟相应的负荷量,看看系统是否能满足需求规格
而压力测试 则是 模拟超出需求规格上说明的更大的负载情况下, 系统的健壮性如何(是否会崩溃等)