软件测试面试题

1.平时你们的接口是怎么测试的
根据开发提供的Yapi文档,分析请求方式,接口路径,请求参数,返回格式,以及预期结果,编写接口测试用例
使用工具测试接口,测试数据类型,字段值,字段长度等,对应正确与错误提示是否正确,
测试对应响应码,code,status等是否正确

2.平时接口用的什么工具
Postman、Jmeter,python-request,java-HttpURLConnection

3.下一个接口依赖上一个接口怎么办
postman:
1.新增全局变量,在test中用js语言设置全局变量值为下一个接口所需要的参数值
2.在下个接口的请求参数中直接 {{全部变量参数}} 赋值给原来参数值
Jemter:
1.新增接口,添加josn提取器、正则提取器或边界提取器,将提取到的结果赋值变量名
2.在下个接口的请求参数中直接 ${变量名} 赋值给原来参数值

4.get和post的区别
get请求参数在url中,post请求参数在body中
get请求传送的数据量较小,一般不能大于2KB,post传递的数据量较大,一搬被默认不受限制
get请求只能进行url编码,post请求支持多种编码方式
get是获取数据,post是提交数据
get的数据能被缓存,post的数据不能

5.postman除了做请求还可以做什么?
接口测试,接口自动,编写用例,执行用例,导出用例,test窗口中使用js语言可以进行返回值提取,断言,参数化等等

6.平时代码放在哪里进行管理?
github、gitee(码云)、云效

7.平时自动化用的什么框架,各个框架之间有什么不同?
Pytest、Unittest
1.unittest提供了testcases、testsuites、testfixtures、testrunner相关的类,让测试更加明确、方便、可控。使用unittest编写 用例,必须遵守以下规则:
(1)测试文件必须先import unittest
(3)测试方法必须以“test_”开头
(4)测试类必须要有unittest.main()方法
  2.pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规 则:
(1)测试文件名必须以“test_”开头或者"_test"结尾(如:test_ab.py)
(2)测试方法必须以“test_”开头。
(3)测试类命名以"Test"开头。
总结: pytest可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性。 pytest插件丰富
8.如何断言,断言有哪几种?
1.unittest提供了assertEqual、assertIn、assertTrue、assertFalse。
  2.pytest直接使用assert表达式。

9.mock服务,如何搭建?
安装NodeJs,配置npm命令
# 全局安装
npm i @shymean/mock-server -g
# 快速启动mock服务器
mock -p 9999 -f ./_mock.js

10.代码放哪里?用例写在哪里?
云效,gitee(码云)

11.平时接口测试的项目有啥风险,如何处理的?
传入非特定的类型程序异常退出
超长字符未进行处理、导致存储、显示等异常
错误前端处理不足,导致前端异常
错误提示处理不当,导致用户看到晦涩的错误码
错误提示不当,导致用户不知道哪里出了问题,如何解决

查看接口地址,请求方式,参数,以及返回结果,都正确,查看服务是否正常运行
最后查看日志,找到报错原因进行解决

12.目前有多个环境,如何只执行某个环境的自动化用例?
配置全局变量引用

13.自动化框架如何设计的?
config层、common层、report层、utils层、img层(UI)、数据层、用例层、run文件

14.平时参数化是写在哪里的?如果现在给你的参数非常大,那你怎么办?
参数化一般使用yaml、csv、json文件,或者使用枚举进行参数化
方便维护变更等

15.你如何理解装饰器?自己写过装饰器吗?
装饰器的作用就是为已经存在的对象添加额外的功能

16.如果删除了数据,你如何确定删除的是正确的呢?
确保删除数据删除,查看对应相关联数据删除
物理删除,查看数据库数据是否存在,逻辑删除,查看其字段值是否更改正确

17.python连接数据库进行查询,返回的结果是什么呢?
返回结果是元组

18.如何实现json转字典,如何字典转json?
将字典转换为JSON格式: json.dumps()
将JSON格式转化为字典: json.loads()

19.自己写过mock工具吗?写在哪里呢?传入数据和传出数据放在哪里呢?
使用python的Flask框架写过
配置mysql连接,传入数据与传出数据记录在数据库

20.平时参数化的数据放在哪里呢?如果有很多个参数化怎么办?参数化之后如何调用呢?
一般在框架的数据层,根据数据类型,需求类型等分类管理,
使用yaml、csv、json文件参数化时,定义好对应读取参数的函数,调用时,进行传参调用
使用枚举时,直接读取字段值

21.你如何确定你自己写的代码能稳定运行呢?
尽可能考虑全所有异常情况进行处理
进行多次运行测试,重复测试,确保正常运行

22.jenkins有自己搭建过吗?常用的构建方式是什么呢?
常见两种搭建方式:使用Jenkins直接搭建、使用tomcat进行搭建、使用docker拉取镜像搭建
常用的构建方式:
自由风格软件项目( FreeStyle Project)
Maven 项目(Maven Project)
流水线项目( Pipeline Project)

23.如果我目前代码放在git上面,如何在git上面自动化执行呢?
配置git和jenkins和邮件服务地址

24.cookie和session有什么区别 他们是怎么交互运作的
a、数据存储位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。
b、安全性:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
c、服务器性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
d、数据大小:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
e、信息重要程度:可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

25.你们公司的接口自动化达到了什么程度呢?
使用pytest+allure+Jenkins在Linux环境中集成,生成测试报告,并发送邮件通知

26.代码是你自己上传的呢?上传过程中出现问题怎么办?
上传github代码时遇到最多的时超时
在提交代码过程,最多的就是多人修改代码,会出现代码合并冲突,此时需要用到pycharm或idea工具解决代码冲突

27.为何用pytest做接口参数化呢?如果用for循环的方式批量传递你觉得会有什么问题?
做接口自动化时,接口之间存在依赖关系,需要进行参数化进行关联
不建议使用for循环传递,可以时用ddt等其他方式
for循环会把所有参数全部去遍历,耗时,当数据很大时,容易卡顿

28.你如何保证每天的自动化都可以稳定运行呢?
出错重试机制
测试用例分层机制可维护性

29.线程和进程的区别是什么?
a.以多进程形式,允许多个任务同时运行;
b.以多线程形式,允许单个任务分成不同的部分运行;
c.一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
d.资源分配给进程,同一进程的所有线程共享该进程的所有资源
————————————————
版权声明:本文为CSDN博主「melody-l」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36734223/article/details/123630446

posted @ 2022-03-21 16:12  斌斌的博客  阅读(70)  评论(0编辑  收藏  举报