day:40 总结(四)UI自动化

1. 什么样的项目适合引入UI自动化测试?UI自动化的业务场景覆盖和用例条数覆盖情况,UI自动化用例条数情况
1)什么样的项目适合引入UI自动化测试

① 迭代版本周期比较长
② 需求变更不频繁
③ 页面控件稳定
④ 项目周期长

2)UI自动化的业务场景覆盖和用例条数覆盖情况

面试官:你们之前做UI自动化,是只考虑正常场景吗?还是正常和异常场景都会考虑?==》我们之前做UI自动化只写正常场景的用例
业务场景覆盖情况
A、可以覆盖到的场景占50-70% ==》1)信贷:用户信息采集、录入实名信息、审批、签约;2)电商:商品列表、商品下单、加入购物车、完成支付,申请售后、查看商品详情
B、不能覆盖到的场景占30% ==》滑动拼图、图像识别、人脸识别、点击会跳转到第三方平台的、跨平台的
用例条数覆盖情况
ui自动化用例是根据功能测试用例转化来的 ==》把功能测试用例通过Python代码的方式来编写
500条功能测试用例 ==》转换为UI自动化测试用例,转换率5-10% 》25-50条*12个月=1年写300-600条用例 》300多条》那你这300多条用例要运行多长时间?》1个多小时

【面试题】你们做UI自动化的收益怎么样?收益大吗?
答:我们之前做UI自动化测试还是有收益的,可以在一定程度上帮助我们做回归测试,节省一定的时间,提高我们的工作效率
【面试题】你们做UI自动化的目的是什么?
答:UI自动化对于老版本发布的功能可以用自动化的方式去进行回归测试,节约测试时间和成本
【面试题】那你觉得功能测试、接口测试、UI自动化测试、接口自动化测试的区别?
功能测试:又称为黑盒测试,通过手工对前端页面以及实现的功能进行测试,功能测试大部分只对前端页面做了校验
接口测试:又称为灰盒测试,集成测试,会关注前后端的交互逻辑的校验,可以检查后端是否有做校验,以及接口测试也能去覆盖一些直接从页面上没有办法操作的场景
UI自动化测试:对于老版本发布的功能可以用自动化的方式去进行回归测试
接口自动化测试:接口测试会一个一个的去测它的正常和异常场景,我们之前接口测试一个一个接口去测效率比较慢,我们才采用接口自动化对之前发布的老版本的功能的接口进行自动化回归测试

2. 做UI自动化的时候图形验证码怎么处理?
1)我们之前是用的万能验证码8888
2)首先通过截图,把验证码相关的区域截取出来,通过OCR进行识别,把识别到的数据赋值给到一个变量,然后在进行输入就可以了

3. selenium工具里面的元素定位有哪些?
元素定位方式:id、name、class、xpath、css、tag_name、link_text、partial_link_text,JavaScript等等
【面试题】你最喜欢什么元素定位方法?
答:我一般有id就使用id,没有id就使用name,class,或者一些其他css的属性,如果这些都没有我会用xpath相对路径来进行定位(xpath的相对路径的处理速度要比绝对路径的处理速度快很多)
Xpath的相对路径写法://*[@id="kw"]
Xpath的绝对路径写法:/html/body/div/div/div/input/p/.........

4. UI自动化的等待方式有哪些?它们的区别是什么?
1)强制等待(线程等待)==》sleep(5) 一定要等待5秒才能继续
2)隐式等待 ==》implicitly_wait(5) 是作用于全局的,需要等待整个页面元素加载完成;比如在第1秒的时候加载完成则直接往下继续,如果超过5秒还没有加载完成则会报错并且抛出异常信息
3)显式等待 ==》webdriverwait(driver,5,0.5) 是作用于局部的,等待页面某个特定的元素加载完成;比如在第1秒的时候加载完成则直接往下继续,并且会每隔0.5秒去页面刷新寻找元素,如果超过5秒还没有加载完成则会报错并且抛出异常信息

5. 脚本如何维护?有没有碰到什么bug?
1)脚本如何维护?
① 我都是用框架分层来进行维护,像元素定位我使用了PO设计模式来进行维护
② 在回归测试阶段,我会结合Jenkins定去运行UI自动化用例,进行维护
2)有没有碰到什么bug?
① 我们做ui自动化主要是为了回归测试,bug一般在集成测试节点的时候都被修复了
② 面试官:你就一个bug都没有遇到吗?==》bug还是有的,1、主要就是之前有些页面开发把标签和样式改动了,就会出现元素定位不到的bug,2、还有就是有的页面加了一些浮框把之前的元素给挡住了也定位不到之类的bug,3、我的谷歌浏览器自动升级了,导致和chromedriver版本匹配不上,浏览器直接打不开了

6. 做自动化遇到了什么问题?怎么解决?
1)有的时候动态元素定位不到》我会采用xpath相对路径自己写xpath语法来进行定位
2)有的时候自动化脚本执行速度较慢
》我会尽量少用xpath绝对路径,因为xpath绝对路径执行速度很慢,并且我会少用sleep方法,涉及到一些if elif条件判断时,尽量把可能发生的条件放在前面写,这样可以减少程序判断的次数,提高效率
3)弹框内有按钮点击不到 ==》弹框里面有设置滚动条,首先进入弹框里面,将滚动条滑动到最底部才可以点击确定或者取消按钮
4)有的时候元素没有加载出来 ==》我会通过设置隐性等待和显性等待来解决
5)有的时候还会碰到iframe框 ==》我会通过driver.switch_to.frame先进入到iframe框里面,再去定位到里面的元素
6)有的时候还会有alert弹框 ==》我会先点击确认弹框活取消弹框之后再定位其他的元素

7. 什么叫po设计模式?po设计模式的作用
discuz_project.zip ==》Python+selenium+unittest+po设计模式+ini+htmltestrunner
cms_auto_ui_test_end.rar ==》Python+selenium+pytest+po设计模式+yaml+allure

po设计模式 ==》page object页面对象设计模式解释:所有当前页面的控件和元素都为类或者对象的属性
po设计模式优势如下:
1.让元素定位,流程,案例进行了分离
2.前端代码关于元素定位有改动可以随时进行处理,修改非常方便
3.让代码间的耦合性降低、防止代码写死
4.降低代码的维护成本
5.代码的复用性高
6.采用标准的page object页面对象设计模式,符合现在主流ui自动化框架的标准搭配

8. 用selenium+unittest单元测试框架是怎么做ui自动化测试的?
参考地址:https://www.cnblogs.com/xiaoshubass/protected/p/16882830.html
我们之前这个UI自动化框架大致分了6-7层,首先
第1层的话是config配置层,这个里面主要是封装了一些我们测试环境的url地址和一些用户名密码等等
第2层是utils工具类层,这个里面主要封装了一些读取Excel表格,发邮件和读取配置文件的工具类
第3层是一个public基类,这个里面主要封装了元素定位的方法比如把id,name,class,xpath,css等等都封装在一个类方法里面了,还把一些send_keys和隐式等待都进行了二次的封装
第4层就是testcase用例层了,这个里面主要就是定义一个类然后继承unittest.TestCase这个类,通过unittest单元测试框架来管理用例,然后编写用例也用到了PO设计模式,就是把我们的元素定位和流程层,代码层进行了分离,最后用例写完再通过self.assertEquals进行一个断言
第5层就是run运行层,会把所有的用例放在suite套件里面,然后调用run方法运行套件
第6层就是通过HTMLtestrunner模块生成测试报告,然后再通过Jenkins做可持续集成,在回归测试阶段,每天晚上都会运行一下我们的ui自动化用例,大致的一个框架结构就是这样的。

自动化具体流程:
首先的话就是我需要打开pycharm然后新建一个py模块,然后导入selenium模块,time模块等等,然后通过from selenium import webdriver语句导入webdriver模块,然后创建一个driver对象:driver=webdriver.Chrome(),再通过driver.get方法来打开我们测试环境的地址,再使用 driver.maximize_window()最大化浏览器窗口,然后会使用driver.implicitly_wait()设置一个隐式等待,我可以通过driver.find_element_by_id,或者xpath,name,class,css等元素定位方法来进行定位到用户名和密码输入框,并且通过调用send_keys进行输入用户名和密码,最后通过调用click方法进行登录,登录之后,有一些表单的填写页面(比如主要有姓名、证件信息、手机号码、常住地址、邮箱、紧急联系人等等),如果是输入框我依旧用send_keys,如果有一些下拉框我会导入Select类,通过select_by_value方法进行定位,如果有滑动的地方我也会用window.scrollTo()方法,设置变量为js,然后通过driver.execute_script()来调用js变量来达到滑动滚动条的目的,包括如果是有iframe弹框的话,我首先会通过switch_to.frame()进入到iframe弹框,然后再进行其他的操作,如果要退出iframe框的话,直接用switch_to.default_content()方法就可以了,最后写完整个一个流程之后,我还会通过调用text方法拿到某个元素的文本值赋值给到一个变量,然后通过assert方法把预期结果和实际结果进行一个断言,以上就是我做ui自动化的一个大致流程,但是这是我们最开始做ui自动化的方法,后面因为做的时间也比较久,用例也比较多,所以后续用了一些PO设计模式和分层对用例进行了一些封装

作业:

1.每个同学准备2个与项目相关的ui自动化测试的bug ==》https://www.cnblogs.com/xiaoshubass/p/13491361.html
2.selenium+unittest单元测试框架做ui自动化流程,用Word文档进行梳理
3.阅读discuz_project 这个项目的源代码
代码相关的解释如下:
https://www.cnblogs.com/xiaoshubass/p/12373820.html
4.阅读selenium+pytest框架代码

posted @ 2025-04-09 15:09  君庭  阅读(75)  评论(0)    收藏  举报