超全整理,selenium自动化测试常见问题解决(汇总)


前言

自动化代码中,用到了哪些设计模式?

单例模式;工厂模式;PO模式;数据驱动模式

什么是断言?

检查一个条件,如果它为真,就不做任何事,用例通过。如果它为假,则会抛出 AssertError 并且包含错误信息。

UI 自动化测试中,如何做集群?

Selenium Grid,分布式执行用例;
Appium 使用 STF 管理多设备;
Docker+K8S 管理集群;

怎么对含有验证码的功能进行自动化测试?

万能验证码;测试环境屏蔽验证;其他操作不推荐

如何优化和提高 Selenium 脚本的执行速度?

尽量使用 by_css_selector() 方法;
by_css_selector() 方法的执行速度比 by_id() 方法的更快,因为源码中 by_id() 方法会被自动转成 by_css_selector() 方法处理;

使用等待时,尽量使用显示等待,少用 sleep(),尽量不用隐式等待;
尽量减少不必要的操作:可以直接访问页面的,不要通过点击操作访问;
并发执行测试用例:同时执行多条测试用例,降低用例间的耦合;
有些页面加载时间长,可以中断加载;

接口测试能发现哪些问题?

可以发现很多在页面上操作发现不了的 bug;
检查系统的异常处理能力;
检查系统的安全性、稳定性;
前端随便变,接口测好了,后端不用变;
可以测试并发情况,一个账号,同时(大于 2 个请求)对最后一个商品下单,或不同账号,对最后一个商品下单;
可以修改请求参数,突破前端页面输入限制(如金额);

Selenium 中隐藏元素如何定位?

如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了(这个很多面试官也搞不清楚);

元素的属性隐藏和显示,主要是 type=“hidden” 和 style=“display: none;” 属性来控制的,接下来在元素属性里面让它隐藏,隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,很多初学者傻傻分不清楚),操作元素是 click,clear,send_keys 这些方法;

JS 操作隐藏元素;

如何判断一个页面上元素是否存在?

方法一:用 try…except…
方法二:用 elements 定义一组元素方法,判断元素是否存在,存在返回 True,不存返回 False
方法三:结合 WebDriverWait 和 expected_conditions 判断(推荐)

如何提高脚本的稳定性?

不要右键复制 xpath(十万八千里那种路径,肯定不稳定),自己写相对路径,多用 id 为节点查找;

定位没问题,第二个影响因素那就是等待了,sleep 等待尽量少用(影响执行时间);

定位元素方法重新封装,结合 WebDriverWait 和 expected_conditions 判断元素方法,自己封装一套定位元素方法;

如何定位动态元素?

动态元素有 2 种情况,一个是属性动态,比如 id 是动态的,定位时候,那就不要用 id 定位就是了;

还有一种情况动态的,那就是这个元素一会在页面上方,一会在下方,飘忽不定的动态元素,定位方法也是一样,按 f12,根据元素属性定位(元素的 tag、name的步伐属性是不会变的,动的只是 class 属性和 styles 属性);

如何通过子元素定位父元素?

使用element.parent方法

平常遇到过哪些问题? 如何解决的?

可以把平常遇到的元素定位的一些坑说下,然后说下为什么没定位到,比如动态 id、有 iframe、没加等待等因素;

一个元素明明定位到了,点击无效(也没报错),如果解决?

使用 JS 点击,Selenium 有时候点击元素是会失效;

测试的数据你放在哪?

对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如 ini);

对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成;

对于一个接口有多组测试的参数,可以参数化,数据放 YAML,Text,JSON,Excel 都可以;
对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理;

对于邮箱配置的一些参数,可以用 ini 配置文件;
对于全部是独立的接口项目,可以用数据驱动方式,用 excel/csv 管理测试的接口数据;

对于少量的静态数据,比如一个接口的测试数据,也就 2-3 组,可以写到 py脚本的开头,十年八年都不会变更的;

什么是数据驱动,如何参数化?

参数化的思想是代码用例写好了后,不需要改代码,只需维护测试数据就可以了,并且根据不同的测试数据生成多个用例;

接口产生的垃圾数据如何清理?

造数据和数据清理,需用 python 连数据库了,做增删改查的操作测试用例前置操作,setUp 做数据准备后置操作,tearDown 做数据清理

怎么用接口案例去覆盖业务逻辑?

考虑不同的业务场景,一个接口走过的流程是什么样的,流程的逻辑是什么样的,什么样的参数会有什么样的结果,多场景覆盖;

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

燃烧心中的激情,释放内心的力量,勇往直前,不断超越自我;奋斗不止于一时,而是演绎出生命的壮丽乐章。坚持信念,拥抱挑战,只要有毅力与努力,成功将属于你!

不要畏惧困难,因为挑战才能让我们成长;不要止步不前,因为奋斗才能让我们飞翔。勇往直前,追逐梦想的脚步永不停歇,用汗水浇灌生命的花朵,绽放出绚烂的人生华章。

勇气与坚持是奋斗的动力,梦想与努力是奋斗的引路人。不论遭遇多少艰辛与挫折,只要心怀信念,迈出每一步,就能终究登上胜利的巅峰,让努力与付出成为点亮人生的燃灯之火。

猜你喜欢

转载自blog.csdn.net/x2waiwai/article/details/131897871