自动化常见面试题

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 里面的内容,该怎么设计?

 在访问共享对象的代码前,要调用Lock对象的acquire方法,进行上锁操作。当多个线程同时执行lock.acquire()时,只有一个线程能成功地获取锁,然后继续执行代码,其他线程就继续等待直到获得锁为止。 访问结束后,一定要调用Lock对象的release方法,进行解锁操作。否则其它等待锁的线程将永远等待下去,成为死线程
 
20、什么是 GIL , GIL 带来的问题是什么?
  GIL 是全局解释器锁, Python中每个线程执行的时候要获取这个锁 才能 执行代码。 所以Python中的多线程不能真正做到并行执行代码。不能发挥CPU多核的优势。
 
21、装饰器 是什么回事?
      Python中装饰器通常用来装饰函数、或者类的方法。 被装饰后的函数, 原有的函数基础上,会多出增加一点功能,或者功能有一些变化。 一般来说装饰器本身也是一个函数,我们可以把装饰器 想象成包含了 被装饰的函数。
 
22、python 的代码中如果有中文,代码文件应该做如何处理
 
  在顶部注释中 加入 类似 # coding=utf8 这样的声明 , 但是要注意代码文件是什么中文编码,是gbk还是utf8 , 声明的编码格式匹配就可以了。
 
23、python 2.X中 怎么定义一个 unicode的字符串

     比如 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 一起使用?

    Gunicorn 或者 uwsgi , 也可以使用 cherrypy等
 
36、django 开发的web应用,性能瓶颈通常会有哪些?
  一般性能瓶颈通常在数据库操作上面,特别是数据表很大的时候,访问操作又特别复杂(比如 多个表的联合查询)
 
37、提高数据库查询性能的方法通常有哪些?
    合理的加索引
 
38、RF作为测试框架, 提供了哪些功能?
  为测试用例的开发提供 清晰明了 的 关键字定义用例的模式 为自动化项目 的套件、用例目录结构 提供 比较灵活的初始化、清除的 机制 为自动化项目的执行提供 灵活的用例、套件选择机制 为测试结果提供 清晰、细致 的日志和报表
 
39、RF 怎么定义一个变量?
  可以在用例中定义 : ${var1}= Set Variable hello 可以在Settings 表中声明 ${var1} hello
 
40、RF 循环的写法
   如下:
${list}= create list 1 2 3 4
:FOR ${index} IN @{list}
\ Log To Console ${index}
 
41、RF 条件判断的写法
  如下:
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以上都不是
 
42、RF 的Setup 、Teardown 是如何设置的
  可以在 测试套件目录的初始化脚本文件 init.robot中, 可以在 测试套件文件的 Settings表中,可以在测试用的 [Setup][Teardown] 配置项中。
 
43、RF 执行的时候怎么过滤选择 用例和套件
  可以通过 --test --suite 参数根据 名称过滤, 也可以用参数 --include 根据 用例标签 过滤
 
44、请画出Appium的架构示意图
  

 45、开发移动应用自动化的大体步骤有哪些

  主要就是根据要操作的元素的属性特征,选择到这些元素,然后调用Appium 库的方法操作这些元素,获取元素的信息(主要是文本内容)。 分析元素信息是否正确

 

46、怎样查看移动应用的界面元素的属性

  可以通过 UIAutomate Viewer 工具

47、Appium 选择元素的方法有哪些

   通过 resource id, class name, accessibility id, xpath, UIAutomator API 的java代码

48、Appium 怎样滑动屏幕

  可以通过 WebDriver的swipe 方法

49、负载测试和压力测试的区别

   根据 国外Wiki上的解释
负载测试 主要是 根据需求规格上说明的应该能承受系统负荷,模拟相应的负荷量,看看系统是否能满足需求规格
而压力测试 则是 模拟超出需求规格上说明的更大的负载情况下, 系统的健壮性如何(是否会崩溃等)

 

 
 
 
 
 
 
 
 
 
 
 
 
 

 

posted @ 2022-03-14 11:40  大熊童鞋  阅读(772)  评论(0编辑  收藏  举报