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自动化面试题
?著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Webdriver 属性有以下: driver.current_url 获取当前页面的URL 地址 driver....