zoukankan      html  css  js  c++  java
  • 面试| Python 自动化测试面试经典题目回顾

    本文是霍格沃兹测试学院学员 ykl 面试 Python 自动化测试工程师的经历回顾,面试 5 家公司,拿到 3 个
    Offer,供金三银四跳槽季的各位同学参考!学院最近也在汇总优秀企业的测试开发 Offer
    信息,并组织内推活动。关注「霍格沃兹测试学院」公众号,回复「内推」参与「名企内推活动」!

    过完春节,一共参加了 5 个公司的面试。第一家公司,通过了 2
    轮技术面试,但是薪资不够理想。第二个公司,被面试的测试专家虐的不要不要的,挂了,但也知道了自己很多不足之处。后面三个公司的面试都顺利拿到了
    Offer。凭印象对面试题进行简单总结回顾,以代码方面的问题为主,经验不足,回答水平也有限,希望与同学们一起交流探讨。

    P.S. 本人目前用的语言主要是 Python 和 JavaScript,面试的这 5 家公司都是用 Python
    做自动化测试,所以以下代码问题基本上都是关于 Python 的。

    Python 自动化测试面试题目汇总

    1、super 是干嘛用的?在 Python2 和 Python3 使用,有什么区别?为什么要使用 super?请举例说明。

    答:

    • super 用于继承父类的方法、属性。

    • super 是新式类中才有的,所以 Python2 中使用时,要在类名的参数中写 Object。Python3 默认是新式类,不用写,直接可用。

    • 使用 super 可以提高代码的复用性、可维护性。修改代码时,只需修改一处。

    • 代码举例

       1. class baseClass:
      
      1. def test1(self, num):
        
      2.     print(num)
        
      1. class sonClass(baseClass):

      2. def test2(self):
        
      3.     super().test1(num)
        
      1. son = sonClass()

      2. son.test1(11)

    2、阅读以下代码,推导最后结果:

          1.  def add(n, i):
    
      2.     return n+i
    
      3.   
    
    
      4. def test():
    
      5.     for i in range(4):
    
      6.         yield i
    
      7.   
    
    
      8. g = test()
    
      9.   
    
    
      10. for n in [1, 10, 5]:
    
      11.     g = (add(n, i) for i in g)
    
      12.   
    
    
      13. print(list(g))  # 结果是 [15, 16, 17, 18]
    

    答: 所有的结果都是生成器表达式,不调用它,不从里面取值,就不干活。附上我的推导过程:

          1. n = 1
    
      2. g = (add(n,i) for i in test())
    
      3. # print(list(g))    # [1, 2, 3, 4]
    
      4.   
    
    
      5. n = 10
    
      6. g = (add(n,i) for i in (add(n,i) for i in test()))
    
      7. # print(list(g))    # [20, 21, 22, 23]
    
      8.   
    
    
      9. n = 5
    
      10. g = (add(n,i) for i in (add(n,i) for i in (add(n,i) for i in test())))
    
      11. g = (add(n,i) for i in (add(n,i) for i in (5,6,7,8)))
    
      12. g = (add(n,i) for i in (10,11,12,13))
    
      13.   
    
    
      14. g = (15,16,17,18)
    
      15. print(list(g))    # [15, 16, 17, 18]
    

    3、快速编写前端 HTML、JavaScript、Vue 代码。

    答:

    • HTML、JavaScript 代码:

        1. <!DOCTYPE html>
      
      1. <head>
      2. <meta charset="utf-8">
        
      3. </head>
      4. <body>
      5. <h1 id="title">xxx公司</h1>
        
      6. <p>xxx公司是一家......</p>
        
      1. <div id="mybox">
        
      2.     <h1>{{a}}</h1>
        
      3.     <input type="button" value="按我" v-on:click="add()">
        
      4. </div>
        
      5. <script type="text/javascript" src="public/bundle.js"></script>
        
      6. </body>
    • Vue 代码编写:

        1. import Vue from "vue";
      
      1. new Vue({

      2. el : "#mybox",
        
      3. data : {
        
      4.     a : 100
        
      5. },
        
      6. methods : {
        
      7.     add : function(){
        
      8.     this.a ++;
        
      9. }
        
      10. }

      11. });

    4、L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3],用一行代码得出 [11, 1, 2, 3, 5]

    答: list(set(L))

    5、L = [1, 2, 3, 4, 5],L[10:]的结果是?

    答: 空列表(当时有点紧张,一直在“空列表”和“索引超出范围”两个答案之间徘徊)。

    6、L = [1, 2, 3, 5, 6],如何得出 '12356'?

    答: 注意,个人觉得这个题有坑,列表的元素不是字符串,所以不能 ''.join(L)。以下是过程:

          1. s = ''
    
      2. for i in L:
    
      3.     s = s + str(i)
    
      4.   
    
    
      5. print(s)    # 12356
    
      6. print(type(s))  # <class 'str'>
    

    7、列表和字典有什么区别?

    答: 一般都是问列表和元组有什么不同。 (1)获取元素的方式不同。列表通过索引值获取,字典通过键获取。 (2)数据结构和算法不同。字典是 hash
    算法,搜索的速度特别快。 (3)占用的内存不同。

    8、如何结束一个进程?

    答: (1)调用 terminate 方法。 (2)使用 subProcess 模块的 Popen 方法。使用简单,具体用法,这里不展开。

    9、进程、线程有什么区别?什么情况下用进程?什么情况下用线程?

    答: (1)区别:

    • ① 地址空间和其它资源(如打开文件):进程之间相互独立,同一进程的各线程之间共享。某进程内的线程在其它进程不可见。

    • ② 通信:进程间通信 IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

    • ③ 调度和切换:线程上下文切换比进程上下文切换要快得多。

    • ④ 在多线程操作系统中,进程不是一个可执行的实体。

    (2)使用场景:同时操作一个对象的时候,比如操作的是一个全局变量,我用线程,因为全局变量是所有线程共享的。

    10、什么是ORM?为什么要用ORM?不用ORM会带来什么影响?

    答:

    • ORM 框架可以将类和数据表进行对应,只需要通过类和对象就可以对数据表进行操作。

    • 通过类和对象操作对应的数据表,类的静态属性名和数据表的字段名一一对应,不需要写 SQL 语句。

    • ORM 另外一个作用,是根据设计的类生成数据库中的表。

    11、写一段代码,ping 一个 ip 地址,并返回成功、失败的信息。

    答: 使用 subProcess 模块的 Popen 方法(使用简单,具体用法,这里不展开)。

    12、说说接口测试的流程,介绍一下request有哪些内容。

    答: (1)流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。 (2)request 内容:

          1. ① 封装了各种请求类型,get、post 等;
    
      2. ② 以关键字参数的方式,封装了各种请求参数,params、data、headers、token 等;
    
      3. ③ 封装了响应内容,status_code、json()、cookies、url 等;
    
      4. ④ session 会话对象,可以跨请求。
    

    13、UI 自动化,如何做集群?

    答: Selenium Grid。

    14、移动端 UI 自动化,经常会自动安装 2 个程序,你知道那两个程序是什么东西不?

    答: 守护精灵,和 Python 并发编程中的 daemon 原理一样,父进程/父线程的代码执行完毕,它就终止,要写在 start
    方法前面。另外,要找到配置文件,注释掉两行代码。

    15、说5个以上 Linux 命令。

    答: 一口气,劈里啪啦说了 10 多个。

    16、介绍一下你在这个项目中是如何使用 Jenkins 的。

    答: 用的不深入,说了基本操作,比如定时构建执行代码。

    17、说说你对敏捷模式的认识。

    答: 小步快跑,拥抱变化。测试中,可以通过行为驱动测试,有个框架 lettuce 可以用。

    18、了解过 Docker 不?

    答: 了解,没用过。然后说了下对 Docker 大概的认识、优势。

    19、说一下你对软件测试的深刻心得。

    答: 此处省略 n 个字。 【请各位看官拍砖】

    20、做过性能测试没?没做过,说出功能测试的流程。

    答: 此处省略 n 个字。 【请各位看官拍砖】

    21、Bug 定位、分析、类型。

    答: 此处省略 n 个字。 【请各位看官拍砖】

    22、测试策略、测试方案的区别。

    答: 此处省略 n 个字。 【请各位看官拍砖】

    Python 学习回顾和曾经立下的 Flag

    另外,说说我的 Python 学习经历。我买的第一本 Python 书,是《跟老齐学 python 轻松入门》,看了几十页,之后又买了第二本《Python
    基础教程》,同样看了几十页就又没看下去了。我个人喜欢刨根究底,入门书感觉满足不了我深入学习 Python 的需求。

    后来翻遍了图书馆的图书,决定买马克路特兹的《Python 学习手册》,全书有 1000 多页,非常详细,拿到书的那天,就下决心,并在微信朋友圈发誓:
    不搞定这本书 1000 多页的书,就不找女朋友!

    最终在 9 个月内,写了 20000+
    行代码,同时结合霍格沃兹测试学院方程老师的博客和课程,宅在家里,持续学习。这个过程需要较强的自律,但确实累并快乐着。

    面试总结

    在自动化测试、测试开发岗面试中,编程知识、Linux 都是必问的。测试开发人员的知识面既要有一定的广度,同时还要有扎实的编码基础。

    路漫漫其修远兮,我还有很长的路要走。接下来的规划,就是跟着方程老师、思寒老师、李隆老师继续学习,系统掌握霍格沃兹测试学院《测试开发从入门到高级实战》高级课程内容,进一步提升自己的实力。霍格沃兹测试学院的这些老师都是资深一线技术专家,知识面都非常广,相信学完课程之后,我也就
    NB 啦。

    P.S. 从 3 个 Offer
    里敲定最终选择时,我特意咨询了方程老师的意见,被方程老师广博的知识面折服,最后选了方程老师建议的公司(限于隐私,不透露具体信息),哈哈,这里也表示特别感谢
    。(end)

    来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
    QQ交流群:484590337
    公众号 TestingStudio
    点击获取更多信息

  • 相关阅读:
    ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
    ASP.NET Web API 框架研究 核心的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
    ASP.NET Web API 框架研究 ASP.NET Web API 路由
    ASP.NET Web API 框架研究 ASP.NET 路由
    ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
    MVVM模式
    RESTful Web API 理解
    C# 函数式编程及Monads.net库
  • 原文地址:https://www.cnblogs.com/hogwarts/p/15821260.html
Copyright © 2011-2022 走看看