UI自动化面试题

 UI自动化测试工作开展:
   适合做UI自动化的场景
     1)回归验证
     2)巡检
     3)移动端的埋点测试
         最典型的就是移动端的埋点测试,传统的测试方法,就是在手机上操作,
         触发埋点上报,然后通过手机抓包,获取埋点数据,然后再依据埋点文档,去对每个字段进行一一人工校验。
     
一、UI自动化测试流程
前提条件:框架已经部署ok

 编写用例
 1.需求分析(业务流程)
     二次的需求分析 
         进行自动化测试前,肯定是手工测试已经进行了测试,并且功能稳定没有bug
 2.用例设计:提供什么参数以及数据,测试步骤
         手工测试用例编写
         自动化测试用例代码编写(用例设计点)
 3.用例评审,组内评审
 4.编写代码
     4.1根据编写的测试用例,进行代码编写,如登录功能
         步骤:
         输入登录url:https://v4.ketangpai.com/Home/User/login.html
         输入用户名:aaa  name="account"
         输入密码:123  name="pass"
         点击登录按钮:class="btn-btn" (虽然找到两个相同元素,但fide_element只取第一个,正好我们需要的是第一个)
         进行断言
     4.2优化代码
         优化方向:
         更好用
         更易懂
         维护代码方便
         更通用
         扩展性
        优化点:
         隔离测试数据,当需要添加或修改数据时,可以在单独的模块中进行修改
         浏览器管理可以重复使用,所以可以进行单独封装
         需要把驱动进行隔离管理:1.可以存储多个浏览器驱动,2.想用哪个用哪个
         base url域名ip
         登录操作可以重复使用(项目通用)
         登录操作:已经登录过了,不需要重新再登录,记住用户登录状态
         
        PO模式
         发现更多的新缺陷应该是手工测试的主要目的,不能期望自动化测试去发现更多新缺陷。
         事实上,自动化测试主要用于发现原来的缺陷。自动化测试用于回归测试,而大量的新业务测试更多地还是依赖手工测试。
         如果没有建立一个正确的软件测试自动化的观念,认为测试自动化可以完全代替手工测试,
         或者认为测试自动化可以发现大量新缺陷,或者不愿在初期投入比较大的开支等,则自动化测试一定会让我们大失所望。

UI自动化测试:面试题

 1.如何把自动化测试在公司中实施起来的?
     1.选择长期的有稳定模块的项目
     2.项目组调研选择自动化工具并开会演示demo案例
     3.输出自动化的方案,跟项目负责人确认
 2.自动化测试用例如何编写?
     自动化测试主要用于回归测试,因此自动化用例来源于我们编写的功能用例,不管是接口的还是业务测试的用例;
     所以我们会从原有用例中进行筛选,筛选出需要实现自动化测试的,但是这个实现过程并不是按部就班;
     需要根据原有用例进行自动化用例设计,比如修改名称这样的功能,自动化用例中需要实现每次修改都和上一次不一样,否则无法验证修改是否正确。
     增加了这样的设计之后再按照使用脚本来实现自动操作的过程,并实现结果判断,也就是断言
 3.自动化测试发现BUG多吗?不多
    那么自动化测试的价值是什么 ? 怎么证明它不是伪需求 ?
     1.比起发现bug,自动化测试更擅长保持旧有的功能没有bug出现
     2.引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务测试人员解放出来,既而让业务测试人员把精力集中在复杂的业务功能模块上
     3.一般来说相对稳定的功能更适合自动化
     4.功能自动化尽可能用接口\验收自动化则使用端到端
     5.回归测试效率和频次的提升
 4.自动化中有哪三类等待?他们有什么特点?
     1.线程等待(强制等待)如:time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。
     2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,
         直到找到元素或超时,是一种全局性设置,可以随时更改,并且只针对查找元素生效
     3.WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,
         再继续执行后续的代码,可以针对js弹框、iframe、新窗口等进行实施
 5.selenium*中的定位方式
     1.id:根据id来获取元素,返回单个元素,id值一般是唯一的;
     2.name:根据元素的name属性定位;
     3.tagName:根据元素的标签名定位;
     4.className:根据元素的样式class值定位;
     5.linkText:  根据超链接的文本值定位;
     6.partialLinkText:根据超链接的部分文本值定位;
     7.cssSelector:css选择器定位;
     8.xpath:通过元素的路径来定位;
    优先级最高:ID
    优先级其次:name
    优先级再次:CSS selector
    优先级再次:Xpath
 6.xpath和css定位都比较强大,那他们之间有什么区别?
      1.CSS 比XPath 速度快,因为css是配合html来工作,它实现的原理是匹配对象的原理,而
         xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀
      2.Xpath对于class跟普通属性一致
      3.xpath可匹配祖先元素,css不可以
      4.查找兄弟元素, Css只能查找元素后面(弟弟妹妹)的元素,不能向前找(哥哥姐姐)
 7.写的测试脚本能在不同浏览器上运行吗?
     当然可以,我写的用例可以在在IE,火狐和谷歌这三种浏览器上运行,
    实现的思路是封装一个方法,分别传入一个浏览器的字符串,如果传入IE就使用IE,如果传入FireFox就使用FireFox,如果传入Chrome就使用Chrome浏览器;
    并且使用什么浏览器可以在总的ini配置文件中进行配置。需要注意的是每个浏览器使用的驱动不一样。
    
 8.什么是PO模式,为什么要使用它
     说在前边:PO模式是一种设计思想,在实际编码的时候可以有若干种实现方式。实际上,也建议
     大家根据自己项目的情况来动态的编码。具体来说,常见的PO模式有:
         1)三层:对象库层+case层+page层
         2)四层:对象库层+case层+page层+公共类
    简单的说下PO模式的设计思想?
        所谓的PO吧,就是Page Object页面对象,利用面向对象的思维来封装我们的UI自动化测试用例。
     PO模式就是把我们测试过程中每个页面都当做对象,在我们的UI自动化测试框架中,每个页面都有一个独立的封装py文件,
     分为三层来管理:
         第一层是对象库层,将测试用例在该页面所有用到的元素对象统一找到并进行管理,
         第二层操作层:基于每个元素定义好其对应的操作方法,
         第三层:业务层,组装多个操作方法即可形成完整的业务操作。
    例如:
     登录页面:
         对象库层找到用户名、密码等元素,
         操作层封装用户名输入、密码输入等方法,
         业务层连续调用操作层方法,那调用业务层的登录方法传递输入参数即可完成登录。
        这样无论哪个测试用例需要进行登录,都只需要调用该页面py文件业务层的登录方法,即可完成登录。
        这样整个UI自动化测试代码中,对应的元素定位代码只会存在一份了,方便了维护,也减少了代码的冗余。
 9. Jmeter工具如何做接口之间的关联,简述?
      接口关联指的就是一个接口要使用另一个接口的返回值作为参数,这种我们在jmeter中叫做关联。
    关联的实现方式有多种:
         1.使用正则表达式提取器获取上一个请求的响应结果中的某个值,储存在某个变量中,然后下一个接口使用变量进行引用
         2.使用json提取器获取上一个请求的响应结果中的某个值,储存在某个变量中,然后下一个接口使用变量进行引用
         3.使用beanshell后置处理器,解析响应结果存储在变量中,然后下一个接口使用变量进行引用
           跨线程组关联则需要将关联字段设置为全局属性
 10.cookie 和 session 的区别?
     会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话
     Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份
    区别:
         1.数据存放位置不同:
             cookie数据存放在客户的浏览器上,session数据放在服务器上
         2.安全程度不同:
             cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
         3.性能使用程度不同:
             session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
         4.数据存储大小不同:
             单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制
 11.自动化测试中用例依赖的数据如何构造
        不管是接口自动化还是ui自动化都会存在自动化case依赖数据如何构造的问题,可以从三个方面去考虑,
          第一个是在测试前采用接口去构造需要的数据;
          第二个是使用初始化sql去初始化数据,但是如果说表结构复杂的话,sql编码同学写也是比较大的工作量;
        第三个方式是提前准备好一套数据(拿测试环境的数据),并且将该数据对应的数据库进行备份,在之后每次执行测试前先备份当前数据库数据,
          再导入之前的测试数据,再执行测试,测试执行完后再恢复原有的数据
 12.如何提高Selenium脚本的执行速度?
         1.在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度
         2.配置实现多线程,在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度
         3.中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们 测试,就设置超时时间
         4.优化等待时间:使用 WebDriverWait 智能等待来代替线程等待 sleep 和 隐式等待 implicityWait
 13.一个元素明明定位到了,点击无效(也没报错),如何解决?
         使用js点击,selenium有时候点击元素是会失效
 14.你会封装自动化测试框架吗?
         当然可以,自动化框架主要的核心框架就是分层+PO模式:
         分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层;
         然后再加上日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成模式组成;
 15.关闭浏览器中quit和close的区别
         简单来说,两个都可以实现退出浏览器session功能,
         close是关闭你当前聚焦的tab页面;而quit是关闭全部浏览器tab页面,并退出浏览器session。
         知道这两个区别,我们就知道quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作。

你可能感兴趣的:(UI自动化面试题)