面试题(五)

前言

继续总结下UI自动化的思路

面试题汇总

介绍一下UI自动化是怎么做的

xx项目已经平稳运行三四年了,该项目迭代周期较长,版本间的界面变化不太大,因此在初入公司的时候,公司安排我做项目的APP自动化
1.首先我在阅读需求文档的基础上,通过和业务测试同学、开发、产品沟通,花了一两周的时间熟悉了项目的需求
2.然后开始编写测试用例,测试用例根据是否是主流程将用例划分为P0,P1,P2三个等级,P0是重要的、正向的、首先要实现的,P1和P2是后面逐步要完善的
3.接着是开展测试用例评审,召集测试、开发、产品三方进行积极沟通,逐步完善自动化测试用例
4.接下来是搭建自动化测试环境,需要安装nodejs、appium-server、appium-python库、adt、模拟器和真机
5.然后编写测试用例,主要采用的是PO模式,将测试方法、页面对象和测试数据分离,在page_objects目录下定义公用的base_page模块,这个模块有一个BasePage类,这个类初始化需要传入driver对象作为实例属性,然后定义实例方法,比如等待元素可见、等待元素存在、查找并返回一个元素、查找并返回多个元素、滑屏、获取toast等等
6.各个页面对象继承这个BasePage类,就获得了父类的属性和方法,在各个页面上定义自己的属性,也就是元素定位表达式,定义自己的方法,也就是由父类方法组合而成的页面方法
7.在yaml配置文件中配置实例化driver需要的platformName、appPackage、appActivity、server_port等信息
8.定义公共的实例化driver的base_driver模块,base_driver模块下定义BaseDriver类,这个类通过读取yaml配置文件,返回driver实例对象
9.在conftest模块中定义公共的fixture,fixture通过调用BaseDriver类中base_driver方法,使用yield返回driver实例对象,在测试用例结束后,使用driver.close_app()和driver.quit()做环境的清理
10.在测试方法中,将fixture的函数名作为方法入参传递给页面对象,这样拿到的就是实例化driver对象,然后通过实例化页面对象再依次调用页面对象的方法,排列组合形成测试用例
11.在入口函数中,可以通过pytest.main中加一些参数,比如"--reruns","-m","--html"分别实现失败重试,冒烟标记测试,结果报告的生成

UI自动化测试报告怎么做横向比对

因此从没这样做过,就说自己用Excel做的折线图和柱状图。后来想到allure+jenkins不就是吗

从UI自动化结果怎么分析项目的质量

当时说是根据失败率,做一个横向的比较,当然这个比较之前,也会去判断这个失败是不是自动化代码的问题还是真正的bug。失败率低,至少说明主流程的稳定性好

UI自动化定位不到元素的原因

1.代码运行太快
2.类似于toast这种,需要将automationName改成UIAutomator2,再使用xpath表达式
3.元素定位表达式写错了
4.webview需要切换上下文
5.元素在非可见区域,需要滑动屏幕
6.内嵌的h5页面嵌套多个iframe,需要切换iframe

Python底层为什么要加GIL

知乎上说了一些观点,大概罗列下:
1.Python需要被CPython解释编译成字节码再执行,而CPython实现的内存管理不是安全的,比如修改一个字典的值,如果不是线程安全,就可能导致错误,所以需要加锁,以保证同一时刻只有一个线程对共享资源进程存取
2.很多优秀的库是基于CPython的,Python发展这么多年,完全替换掉CPython是完全不可能的。因为你要性能比它好,还要兼容所有依赖于CPython的库
3.有人做过实验,移除了GIL使用更小粒度的锁,发现在单线程上性能降低非常严重,多线程程序也只有在线程数达到一定数量时才会有性能上的改进。所以移除GIL换更小粒度的锁目前还是不值得的
地址:https://www.zhihu.com/question/56170408

最近读过的技术方面的书有哪些

《图解HTTP》、《Python学习手册》、《Python核心编程》等

猜你喜欢

转载自www.cnblogs.com/my_captain/p/12896910.html