面试题库(技术题)

一、题库

1. 当ID重复时,怎么查询创建时间在3月到4月的数据【考察数据库】

   答:select * distinct(id) from 表名 between createtime=3月 and 4月

2.SVN和Git的区别【考察Git和SVN工具】 

  答:SVN和Git都是版本控制工具,都可以拉去和推送数据,区别

  1. 分布式与集中式:
    • Git是分布式的版本控制系统,每个开发之都可以在本地拥有一个完整的代码仓库,支持离线工作
    • SVN则采用集中式版本控制的模式,拥有一个服务器和客户端的架构,因此,SVN必须联网才能正常工作
  2. 分支管理
    • Git分之操作更加灵活,不同的分支路径是一样的,操作方便
    • SVN的分支操作相对不那么直观,并且每个分支地址都不一样,维护管理不那么方便

3.怎么把代码自动上传到Git上【考察代码管理】

      答:可通过命令:git add git commit和git push去提交代码,我们用pycharm工具集成的,更方便,pycharm直接安装Git插件,然后直接提交和推送代码到远端

4.如何优化慢查询【考察性能测试】

 

5.设计2-4为数字的测试用例【考察测试用例设计】

  答:边界值是1,2,4,5,选择一位数的数据进行测试,可以按照如下思路

  • 长度:2-4位
    • 测试有效的取值边界值2,4位的数字,可以输入成功
    • 输入无效的边界值1,5位的数字,提示报错
    • 测试数据的选择边界值2位,2为的00,01,99,98,4位的0000,0001,9999
  • 数据类型:非数字测试检查页面报错提示
  • 必填项:输入为空或者空格检查报错
  • 输入包含空格或特殊字符的数字
  • 测试输入00,001,000这种前导的数字,看是否正确处理
  • 输入负数

6.怎么编辑Linux文件中的内容【考察Linux】

  答:用vi或vim进入文本编辑器,然后编辑文本,编辑好后esc退出,保存:wq

7.支付宝支付的用例【考察测试用例设计】

  1、正常测试:输入正常的金额,点击支付可以成功扣款并用户收到支付成功的通知;用户输入支付金额,选择支付方式,支持各种方式都可以支付成功

  2、异常测试:容错能力

    • 输入金额小于0.01,输入金额大于9999999.99,输入非数字字符,系统提示输入有误
    • 选择未绑定的支付方式,选择不存在的支付方式,系统提示支付方式不可用
    • 测试支付有效期过后进行支付(应提示支付失败)
    • 用户账户余额不足,支付失败并提示余额不足
    • 网络连接中断,支付失败并提示检查网络连接
    • 在支付过程中突然退出应用,重新打开应用后应能继续支付或查看支付状态
    • 多次连续点击支付按钮,系统应只处理一次支付请求,避免重复支付

  3、功能交互 

    • 未注册用户,已注销用户,未登录用户,冻结用户【账号权限】

  4、非功能测试

    • 界面美观,提示信息友好
    • 兼容性好,能兼容各种手机和系统版本
    • 易用性:易操作
    • 安全性:验证失败达到一定次数后,应锁定账户或要求重新登录
    • 用户支付时需要输入支付密码或进行指纹/面部识别验证
    • 性能测试:同时支付多笔并发支付

8.如果主流程测试不通过测试时间紧急怎么办【考察解决问题能力】

  • 可以辅助开发修复bug,加班进行验证和回归测试保证进度
  • 也会把风险汇报给项目经理,评估是否需要推迟发布时间
  • 用自动化框架跑回归测试,手工主要负责新功能的测试和结果分析,节省时间

9.测试计划你是怎么做的【考察测试计划文档编写】

  答:测试计划主要包括测试内容和范围+测试时间的评估+测试任务的人员分配+测试环境的确认和部署+测试工具和方法,还有风险的预估,会把这些都写成测试计划文档。

10.数据库的增删改查命令是什么【考察数据库】

  答:增加 insert into 删除 delete from 改 update set 查 select

11.导入导出功能怎么测试【考察用例设计】

  • 数据导入:
    • 输入有效数据进行导入,观察是否能成功导入数据
    • 只填写必填项,尝试进行导入,并检查是否能导入成功
    • 手动新建Excel或修改其他Excel文件,确保格式与模板一致,测试是否能成功导入
    • 当导入的数据为空时,系统应提示“导入失败,导入模板中无任何数据”或其他相应的错误信息
  • 数据导出
    • 检查导出的文件格式是否正确,以及各个字段是否准确无误
    • 确认文件名是否符合要求,包括是否有特定的命名规则,在不同浏览器下导出的文件名是否保持一致
    • 不同浏览器下导出的文件格式是否正确,以确保浏览器兼容性
    • 测试导出后是否可以正常保存修改后的文件名
    • 导入和导出过程终端,页面是否取消导出操作,并可以再次导入导出成功

12.你知道开发怎么建立索引吗?【考察性能调优】

13.drop truncate delete的区别【考察数据库】

  • delete:属于数据库操作语言(DML),可以删除表中的部分或全部行,它允许通过where子句来指定条件,因此可以实现部分数据的删除,delete会记录每一行的删除操作到事务睿智中,以便进行回滚操作。此外,如果有触发器定义在表上,delete会触发这些触发器
  • truncate:是一种高效的删除表中所有行的方法。与delete不同,truncate不会记录任何单行删除的操作,而是释放表所使用的数据页,并且仅在事务日志中记录页的释放操作。这使得truncate比delete快得多,尤其在处理大表时,然而,使用truncate删除的数据无法恢复,因为它不会被记录在事务日志中供回滚使用,此外,truncate不会触发与表相关联的触发器
  • drop:不仅删除表中的所有数据,还会删除表的机构,索引,约束以及与表相关联的所有触发器和权限设置,一旦执行了drop命令,整个表就会从数据库移除,因此drop是一个不可逆的操作,使用前需要谨慎考虑并做备份工作。

14.笔记本电脑测试用例设计【考察测试用例设计】

  答:这种实物的测试用例设计就六个方面:功能、界面、兼容性、易用性性能和安全,而且优先要测试功能,再非功能

  • 功能层面:笔记本电脑的功能正常使用,开机关机以及应用程序的使用正常
  • 界面测试:电脑外观是否符合正常的审美
  • 兼容性测试:是否可以兼容各种电源以及USB插线,耳机插线,鼠标等
  • 易用性测试:方便操作,符合用户的使用习惯
  • 性能测试:电脑性能OK,长期使用不会卡和死机,而且可以抗压
  • 安全测试:材质安全,而且使用不会划伤手等

15.自动化怎么做的?是定时执行还是每次上线前手动执行一下【考察自动化执行方案】

  答:不会手动执行,一般结合Jenkins定时执行。

16.页面点击无响应是什么问题【考察bug定位分析能力】

  答:用抓包分析看是前端还是后端问题,如果没有请求或请求有问题就是前端问题,如果请求正确发了,响应错了,就是后端问题,后端问题再结合日志分析具体原因

17.你在工作时遇到什么难点【考察问题解决能力】

18.你了解ddt吗,怎么用的?

  答 :DDT就是数据驱动是一种框架设计思想,我们接口框架设计里不管是unittest还是pytest框架都会用到数据驱动,目的是方便一个方法执行多条数据,不同的数据驱动不同的结果,简化代码。

19.介绍下什么是PO模式,为什么使用它,它的设计思想

  答:PO是page object模式的简称,是一种设计思想,把一个页面当做一个对象,通过PO分层设计项目框架分为页面对象层和测试用例层,页面对象层封装页面元素定位信息和操作,测试用例层通过调用对应页面操作编写业务逻辑,实现页面元素和测试脚本分离,可以提高代码复用性,降低维护成本,提高代码可读性。我们还会使用三层po模式,除了封装页面对象层和测试用例层,还封装一个公共层(basepage,把一些页面中公共的方法封装存放)然后其他页面可以继承这个basepage类,这样用到的页面可以直接调用里面的公共方法。

20.接口自动化测试用例如何设计,执行多长时间,自动化测试跟手工占比,框架搭建遇到过问题解决方案,用例覆盖率,搭建花了多长时间

  答:覆盖率:接口(90%),UI(30%),功能和自动化占比基本上差不多一半一半的占比,有新项目时,会把新项目的需求测试,包括分析需求写测试用例执行跟踪bug等,然后用自动化框架跑回归测试用例,项目测试完成后,优化和维护框架,丰富框架的测试用例。

21.接口自动化框架怎么搭建的,用例怎么写,最终效果(代码语法+框架设计思想)

  • Python
  • request(接口测试请求)
  • pytest(收集-执行接口测试用例)
  • log(日志)
  • allure(测试报告)
  • jsonpath(接口关联)
  • openpyxl(Excel表格管理用例)
  • pymysql(数据库的管理)

22. 框架设计思维-如何设计的以及为何这么设计

  • 封装思维,为了更好调用(函数、类)
  • 代码分层思想(哪些层级)
    • 数据层:测试用例格式
    • 用例层:每个模块的测试用例
    • 工具层:封装的可以公共使用的工具
    • 输出层:执行动态生成日志和报告
    • run.py:执行入口文件
  • 数据驱动思想DDT:简化代码一个方法,运行多个用例
  • 数据隔离思想:用例和数据隔离管理  

23.什么是cookie,session,token?

  • cookie:在客户端本地用来保存用户的数据的,用户浏览历史记录,记住用户名...
  • session:在服务端保存用户的数据,能够让用户请求之间关联起来
  • token:接口测试-传递token字段(鉴权),token是有服务端产生返回给客户端保存(加密)

24.restful标准接口中,有哪几种请求方式,分别代表什么含义

  • get:查询资源
  • post:提交数据
  • put:资源替换
  • patch:资源替换
  • delete:删除

25.UI自动化有哪些元素定位方式?

  • ID-id属性
  • name -name属性
  • classname -class属性
  • tagname-标签名(一般不用,因为会有很多元素的标签名是一致的)

26.jmeter工具如何做接口之间的关联?

   思路:前一个接口中的关联字段提取出来传递给后续的接口使用

  • 如果响应结果是JSON格式,jmeter中jsonpath提取器
  • 如果不是JSON格式,可以用正则表达式提取器,该提取器针对文本的,不管什么格式都支持(xml、text、html/json)
  • xpath提取器针对html/xml返回结果
  • beanshell提取器,掌握Java代码基本的语法

     上述方式会将提取到的字段保存到jmeter的内置变量中,后续直接通过$(变量名)引用

27.pytest运行所有case之后如何清理数据库

  pytest是Python语言中一款测试框架,能够自动化识别用例/组织用例/执行用例,可用后置操作清理测试环境/清理数据库,pytest实现后置操作,teardown函数名/fixture夹具函数,清理数据库,通过Python与数据库进行交互-pymysql库,执行SQL语句。

28.selenium webdriver工作原理?

  答:selenium webdriver基于http协议封装,操作控制浏览器做自动化测试,需要借助于中间人驱动把指令转发给浏览器执行,每款浏览器都有对应的驱动。

29.自动化测试时遇到验证码如何处理?

  答:验证码类型:滑块验证码/点选文字验证码.字母数字识别验证码/短信验证码,优先选择是绕过验证码,而不是破解它,验证码本身是为了防止爬虫/自动化,可采用方式如下

  • 测试环境中去掉验证码
  • 找开发配置万能验证码
  • 通过添加cookie的方式绕过
  • 查询数据库/redis
  • 通过OCR图像识别技术破解

30.如果UI自动化过程中经常出现不稳定情况,也就是这次执行通过,下次执行失败,如何提升用例稳定性?

  • 加入重试机制,在用例失败后再次执行
  • 异常捕获,封装处理
  • 元素定位表达式使用相对的稳定的,绝对的路径

31.自动化测试落地成果如何?

  通过一些可以量化实在的数据回答,自动化用例执行了xx条,自动化用例覆盖率xx,把已经转换成自动化用例数量/功能测试用例数量,提升效率xx,需要通过额外的数据佐证,节省时间成本+人力成本角度

32.自动化用的什么语言,什么框架?

  • 接口自动化测试框架:pytest+Requests+logging+allure+pymysql
  • UI自动化测试框架:putest+selenium+logging+allure  

33.自动化测试中用例依赖的数据如何构造

  • fake库:Python中生成伪随机数据的库,生成姓名/电话号码/地址信息
  • 通过代码接口调用:如果项目中有提供对应的接口,python request
  • 通过代码操作数据库:执行insert SQL语句通过python pymysql库

 

posted @ 2024-09-14 14:46  稻草人&梦想  阅读(20)  评论(0)    收藏  举报