综合面试题_原版
# 自动化常识题
# 1.如何把自动化测试在公司中实施并推广起来的?
1.项目组调研选择自动化工具并开会演示demo案例,我们主要是演示selenium和robotframework两种。
2.搭建自动化测试框架,在项目中逐步开展自动化。
3.把该项目的自动化流程、框架固化成文档
4.推广到公司的其它项目组应用
# 2.自动化测试用例如何编写?
用例是自动化测试工程师自己设计的,一般刚开始已基本业务流程为主(登录--完成一个业务--退出)
# 3.自动化测试发现BUG多吗?
不多
# 那么自动化测试的价值是什么?怎么证明它不是伪需求?
1.比起发现bug,自动化测试更擅长保持旧有的功能没有bug出现
2.引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务测试人员解放出来,既而让业务测试人员把精力集中在复杂的业务功能模块上
3.一般来说相对稳定的功能更适合自动化
4.功能自动化尽可能用接口\验收自动化则使用端到端
5.自动化技术是测试人员深化技能的必经之路
....
# 4.在上一家公司做自动化测试用的什么框架?
可以说出以下自己擅长的一种:
1.pytest+requests+allure
2.python+selenium+pytest+allure
3.robotframework+Selenium2Library
4.httprunner2/3
# 5.了解Git么?
了解
# 说说怎么制造一个git冲突?
1.本地init仓库
2.新建文本,编辑一行内容
3.commit
4.新建分支,并切换
5.新分支增加一行内容
6.commit
7.切换回master,再新增内容commit
# 6.逻辑思维:吃药片
题目描述
一个是两种药片,每种有两个,一个人需要早上吃两种药片各一个,现在这四个药片混在一起了这个人什么方法吃。
答案
把所有的4颗药丸都切开成相等的两半,然后早上和晚上,分别吃掉每颗药丸的一半
# 7.逻辑思维:小球称重
题目描述
有8个小球,其中七个的重量是相同的,有一个较轻。给你一个天平,问秤几次能找出那个较轻的小球,若天平只能秤两次,又该怎么秤
答案
第一次两边各放随机三个,如果平了,则另外一个是轻的,
若不平,还有第二次,拿出那三个轻的,在两边随机放一个,就能测出哪个最轻了。
# 8.什么是持续集成?它有什么用?
CI
CI持续集成主要是在开发范围,包括:构建>单元测试;主要针对在集成新代码时所引发的问题(亦称:“集成地狱 (opens new window)”)。
主要关联git技术\代码管理
现代应用开发 (opens new window)的目标是让多位开发人员同时处理同一应用的不同功能。但是,如果企业安排在一天内将所有分支源代码合并在一起(称为“合并日 (opens new window)”),最终可能造成工作繁琐、耗时,而且需要手动完成。这是因为当一位独立工作的开发人员对应用进行更改时,有可能会与其他开发人员同时进行的更改发生冲突。如果每个开发人员都自定义自己的本地集成开发环境(IDE) (opens new window),而不是让团队就一个基于云的 IDE 达成一致,那么就会让问题更加雪上加霜。
持续集成(CI)可以帮助开发人员更加频繁地(有时甚至每天)将代码更改合并到共享分支或“主干”中。一旦开发人员对应用所做的更改被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对应用造成破坏。这意味着测试内容涵盖了从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码和现有代码之间存在冲突,CI 可以更加轻松地快速修复这些错误。
CD持续交付涉及开发、测试、运维合作,包括:构建>测试环境部署>测试(不涉及生产环境的自动化部署)
完成 CI 中构建及单元测试和集成测试的自动化流程后,持续交付可自动将已验证的代码发布到存储库。为了实现高效的持续交付流程,务必要确保 CI 已内置于开发管道。持续交付的目标是拥有一个可随时部署到生产环境的代码库。
在持续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都涉及测试自动化和代码发布自动化。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中。
这个阶段应该关联接口\ui的自动化测试
# UI自动化
# 1.自动化中有哪三类等待?他们有什么特点?
1.线程等待(强制等待)如time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。
2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。
3.WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,再继续执行后续的代码
# 1.selenium中的定位方式
id:根据id来获取元素,返回单个元素,id值一般是唯一的;
name:根据元素的name属性定位;
tagName:根据元素的标签名定位;
className:根据元素的样式class值定位;
linkText:根据超链接的文本值定位;
partialLinkText:根据超链接的部分文本值定位;
cssSelector:css选择器定位;
xpath:通过元素的路径来定位;
优先级最高:ID
优先级其次:name
优先级再次:CSS selector
优先级再次:Xpath
# 2.xpath 和 css定位都比较强大,那他们之间有什么区别?
①CSS locator比XPath locator速度快,因为css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀
②对于class属性Css能直接匹配部分,而Xpath对于class跟普通属性一致
③xpath可匹配祖先元素,css不可以
④查找兄弟元素, Css只能查找元素后面(弟弟妹妹)的元素,不能向前找(哥哥姐姐)
# 3.你写的测试脚本能在不同浏览器上运行吗
当然可以,我写的用例可以在在IE,火狐和谷歌这三种浏览器上运行。实现的思路是封装一个方法,分别传入一个浏览器的字符串,如果传入IE就使用IE,如果传入FireFox就使用FireFox,如果传入Chrome就使用Chrome浏览器,并且使用什么浏览器可以在总的ini配置文件中进行配置。需要注意的是每个浏览器使用的驱动不一样。
# 4.在你做自动化过程中,遇到了什么问题吗?举例下
这个问题,不管是自动化还是任何工作,都会被问到。主要想知道你是如何解决问题的,从而推断你问题分析和解决的能力。 当然有遇到问题和挑战,主要有以下几点: 频繁地变更UI,经常要修改页面对象里面代码 运行用例报错和处理,例如元素不可见,元素找不到这样异常 测试脚本复用,尽可能多代码复用 一些新框架产生的页面元素定位问题,例如ck编辑器,动态表格等
# 5.什么是PO模式,为什么要使用它
PO是Page Object 模式的简称,它是一种设计思想,意思是,把一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,PO模式一般使用三层架构,分别为:元素层elements/data,PO页面对象层,TestCase测试用例层。
对于简单的Selenium自动化测试,我们要做的不过是找到页面元素,并且值传递给这些元素。但是假如有10个脚本同时调用了一个相同的页面元素,当这个元素发生改变,我们需要修改10个脚本。随着脚本数的增加,时间工作复杂度也飞速增长。这个时候我们就可以考虑设计一个类,专门用来页面元素的查找、传递值和修正。这样,当一个页面元素发生改变的时候,只用修改一个类,而不用同时修改10个脚本。
Page Object是一种程序设计模式,将面向过程转变为面向对象(页面对象),将测试对象(按钮、输入框、标题等)及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。
这样,在Selenium测试页面中可以通过调用页面类来获取页面元素,从而巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。当页面元素id变化时,只需要更改测试页Class中页面的属性即可。可以使代码复用,降低维护成本,提高程序可读性和编写效率。
POM解决的问题:
以页面为单位,集中管理元素对象和方法。当页面元素或流程变动时只需要修改相关页面方法即可,不需要修改相应脚本
编写脚本简单,顺着业务逻辑写脚本。page object模式以业务逻辑上的每一步操作作为区分点,页面方法代表了此页面的一个业务操作并严格控制此操作的后续流程
后期维护方便
*在编写PO前,建议先掌握以下几个知识点:
selenium库的基础运用
xpath语法
pytest 或者 unittest
面向对象中的类 和 继承
**说在前边:**PO模式是一种设计思想,在实际编码的时候可以有若干种实现方式。实际上,也建议大家根据自己项目的情况来动态的编码。具体来说,常见的PO模式有:
1)三层:对象库层+case层+page层
2)四层:对象库层+case层+page层+公共类
# 6.安卓和 ios 的 app 测试有什么区别?
1.多分辨率测试,Android 端很多种,ios 较少; 2.手机操作系统,Android 较多,ios 较少且不能降级,只能单向升级;新的 ios 系统中的资 源库不能完全兼容低版本中的 ios 系统中的应用,低版本 ios 系统中的应用调用了新的资源 库,会直接导致闪退(Crash); 3.操作习惯:Android,Back 键是否被重写,测试点击 Back 键后的反馈是否正确;应用数据 从内存移动到 SD 卡后能否正常运行等; 4.push 测试:Android:点击 home 键,程序后台运行时,此时接收到 push,点击后唤醒应 用,此时是否可以正确跳转;ios,点击 home 键关闭程序和屏幕锁屏的情况(红点的显示); android 特性测试(横竖屏,home 键,音量键,power 键等)等测试。 5.安装卸载测试:Android 的下载和安装的平台和工具和渠道比较多,ios 主要有 app store, iTunes 等等下载; 6.升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名; 有一个标示符区分新旧版本(如版本号),对于 Android 若有内置的应用需检查升级之后内 置文件是否匹配(如内置的输入法);ios 是不允许内置检查升级的
# 接口面试题
# 1.你是怎么测试接口的
考点:
①. 是否具备接口测试实际经验
②. 是否熟悉接口测试的流程
③. 是否熟悉接口测试的具体步骤
④. 是否熟悉接口测试用例设计
参考答案:
先了解接口的业务功能、入参出参以及接口对应的数据存储,再依据接口测试用例设计方法完成接口测试的设计,用例设计先业务场景再参数判断,比如参数的边界值、格式、组合等等,最后依据测试用例使用接口测试工具完成接口测试,并在测试过程中查看日志及数据以确保接口测试结果的正确性
# 2.没有接口文档如何做接口测试
考点:
对接口测试的熟悉程度
测试软技能
1.没有接口文档,那就需要先跟开发沟通,然后整理接口文档(本来是开发写的,没办法,为了唬住面试官,先说自己整理了)
2.没有接口文档,可以抓包看接口请求参数,然后不懂的跟开发沟通
# 3.接口测试用例的编写要点有哪些?
考点:
接口测试用例设计
参考答案:
1)必填字段:请求参数必填项、可选项
2)合法性:输入输出合法、非法参数
3)边界:请求参数边界值等
4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
5)响应数据校验:断言、数据提取传递到下一级接口…
6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点
8)安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)
# 4.接口测试中的加密参数如何处理
考点:
①. 是否熟悉加解密方式
②. 是否具备处理加密参数的能力
③. 是否实际应用过
参考答案:
首先了解参数的加解密方式,常见的有md5、aes、rsa等等,如果是aes的需要找开发要私钥,如果是rsa需要找开发要公钥和私钥,然后在接口测试工具中引用加解密的代码实现参数的加解密过程,实现参数加解密的处理;如果公司有自定义的加密算法则需要找开发要加解密的代码实现,然后在测试工具中使用。
1.了解加密参数的名字
2.加密参数的一般组成:加密key+内容信息+时间戳
3.了解加密算法
# 5.接口应用题
问题1:设计接口测试⽤用例例时,涉及的是电商系统,其中包括很多修改,如商品、商家、店铺等等,针对这些数据的修改,会涉及到很多参数。如商品的名称,商品的尺码,商品的颜色等等。
那在设计实现“修改”接口时,如何确定要传哪些参数,是只需要传我要修改的参数,还是全部参数都要传?
# 5.同步和异步区别
考点:
①. 考察对企业中接口通信机制的认识
②. 考察同步通信和异步通信的原理
参考答案:
同步和异步是一种通讯方式
同步:执行一个操作时,需要等待其处理完成,然后再进行下一个操作
异步:执行一个操作时,不需要等待返回,就进行下一个操作,一般需要使用消息中间件
举例:
下单接口中,需要调用库存接口做库存判断,所以必须等待库存接口返回数据才能进行下一步操作,这是同步;
下单接口中,下单成功后需要调用邮件通知接口,不用等待接口返回成功,就可以直接进行下一步操作,这是异步
# 6.pytest里如何进行case的组装
考点:
考察使用pytest组织case的能力
参考答案:
1.默认使用检查以test_ .py 或**test.py命名的文件名,在文件内部查找以test打头的方法或函数,并执行
2.可以使用自定义marker(标签),比如pytest运行的时就只运行带有该marker的测试用例,比如下面的@pytest.mark.P0
3.在命令行使用 指定文件
4.参数:-k args 模糊匹配case(关键字args:可以是py文件名,也可以是函数名)
# 7.说说pytest里的钩子函数
考点:
pytest基础知识
参考答案:
几个常用的钩子:
pytest_configure(config):添加自定义的标签等
pytest_collection_modifyitems(items):在case收集后调用,可以对项目顺序或其他功能进行自定义
pytest_addoption(parser):为命令行添加自定义参数
# 8.mock技术一般用在什么场景
使用场景:
①需求提测后,后端未提测 但是 前端完成。使用mock验证前端
②业务的自动化项目中,有个别接口不稳定。使用mock代替
设计思路:
使用flask编写mock-web服务
①按需实现mock逻辑
②针对不需要实现mock的业务,使用通用透传方法处理
③mock响应数据,应该抽离出来。方便维护