软件测试常见面试题(简单记录)

1. HTTP是什么他和https有什么区别
  • HTTP是超文本传输协议,他是运行在TCP上的一个无状态传输协议;
  • HTPP和https的区别是
    1.http是明文传输的,如果被截取到传输报文能很容易看懂,并且http是一个无状态的传输协议,没有办法记录信息是从哪里传输过来的;
    2.HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全;
    3.http的默认端口是80,而https的端口是443
2.HTTP请求结构及常用方法
  • HTTP请求是有请求行、请求头、请求体组成的
  • 常用的请求方法有Get、Post、Put、Delete
3.Get和Post的区别

Get请求:

  • Get请求是请求服务器中数据的一个过程,不会对服务器的数据进行修改
  • Get请求的安全性比Post请求低,因为它的传输的参数会直接显示在url上
  • Get请求参数受浏览器url大小限制,一般不超过32K
  • Get请求的数据能被浏览器缓存

Post请求:

  • Post是提交数据到服务器的过程,可以对服务器数据进行修改

  • Post请求相对比Get请求安全性高一点,因为它的数据是在请求体中进行传输

  • Post请求的数据大小没有被限制

  • Post请求数据不能被缓存

  • 还有一个主要的区别,Get请求产生一个TCP数据包,而Post请求产生2个;
    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

3.cookie、session、token是什么,他们之间的区别是什么
  • 因为HTTP传输协议是无状态的,无法记录请求每次的请求是否来自同一个浏览器,所以需要使用cookie或session去进行对话状态的追踪;

  • cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。

  • session 是另一种记录服务器和客户端会话状态的机制,是基于 cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中

  • token令牌,是访问资源接口时所需要携带的一个数据凭证;

  • cookie和session的区别:

    1. 安全性方面,session比cookie要安全,cookie是存储在客户端的,而session是存储在服务器的;
    2. cookie只支持字符串数据,而session支持任意数据类型;
    3. 有效期不同,cookie可设置为长时间保持,而session的有效期较短,当会话结束时,例如客户端关闭或session超时都会失效;
    4. 存储大小不同, cookie保存的数据不能超过4K , session可以存储数据远高于cookie,但是访问量过多时会占用过多的服务器资源;
  • Token和Session的区别
    1.Session是一种记录服务器和客户端会话状态的机制,使服务端有状态化;
    而Token是访问资源接口时所需要携带的资源凭证,token使服务端无状态化,服务器不需要保存会话信息;

5.常见的关系型和非关系型数据库,及他们的区别是什么
  • 常见的关系型数据有Mysql、SqlServer、Oracle,非关系型数据库有MongoDB、redis、Hbase
  • 关系型数据库:
    1. 关系型数据库的数据存储方式是以表格的形式进行存储的,只支持基础的数据类型;
    2. 支持SQL,可用于一个及多个表间进行复杂的查询;
    3. 读写性较差,海量数据的读写速度受硬盘的影响;
    4. 表结构固定,灵活度稍欠;
  • 非关系型数据库
    1. 非关系型数据库的存储格式是key-value形式、文档、图片形式等都支持;
    2. 不支持SQL,数据结构相对复杂,复杂查询方面稍欠;
    3. 读写速度快, nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
    4. 易扩展,数据之间没有关系的。
    5. 没有事务处理;
6.HTTP状态码有哪些常见的及其含义是什么

100:服务端已经接受到了客户端发起的请求,要求客户端继续发送请求;常见在POST请求中,先发送header给服务器,然后服务器响应成功并返回100后再把剩余数据进行发送;
200:服务器已成功接受请求,并返回客户端所请求的最终结果;
204:服务器已成功处理请求,但是没有返回任何实体内容,可能回返回新的头部信息;
300:请求重定向
301:请求的页面已经永久移到到新的页面,并向新的链接发出请求,并已经返回了结果;
302:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;
400 Bad Request:表示请求报文中存在语法错误;
404:请求失败,客户端请求的资源没有找到或者不存在;
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求;

7.什么是接口测试,如何进行接口测试
  • 接口就是程序内部与外部,内部与内部之间的一个交互点,然后通过特殊的规则进行一个数据交互的一个通道;
  • 接口测试的流程:
    1.了解项目需求
    2.获取接口文档
    3.根据接口文档设计接口测试用例,等价类、边界值、是否传参、数据类型为空、数据类型错误等;
    4.使用接口测试工具,例如postman进行接口用例的执行与测试;
    5.提交BUG
    6.提交接口运行报告
8.如何辨别出前端和后端的bug
  • 先通过抓包工具查看接口详情,先查看请求的数据是否填写正确,如果请求数据都填写正确的情况下,但是返回的数据有误那么一般就是后端的问题,如果请求数据填写错误导致的那么一般就是前端的问题;

  • 如果定位为后端的bug,应该如何精确定位是哪里出了bug呢

    1.查看报错日志,通过日志分析问题点

    2.查看数据库确认数据的正确性

    3.查看缓存是否正确

9.说说你常用的Linux命令,Dokcer命令

Linux:
sudo 进入管理员模式
ls 查看目录或文件
pwd 显示当前目录
cd 跳转到指定路径
mkdir 创建目录
touch 创建文件
cat 查看文件内容
cp 拷贝
mv 移动文件或重命名文件
rm -r 递归删除 -f 强制删除
find 在文件系统中搜索某文件
gerp 在文本文件中查找某个字符串
vim 文件编辑
tar -zcvf 打包,并用gzip压缩
tar -zxvf 解压缩gzip

  • 系统管理命令
    ps 显示瞬间进程状态 ps aux 查看当前运行中的程序
    ifconfig 查看网络状态
    ping 测试网络连通
    netstat 显示网络状态信息
    kill 杀死进程,可以先用ps 或 top命令查看进程的id,然后再用kill命令杀死进程,kill -9

Docker:

#启动docker服务
sudo systemctl start docker   

#查看docker已有镜像
docker images
docker images -a  查看所有镜像
docker images -q  只查看镜像ID

#搜索镜像
docker search mysql

#拉取镜像
docker pull mysql:5.7  #下载mysql5.7版本的镜像文件
docker pull mysql      #如果不加tag就默认下载最新版本

#删除镜像
docker rmi -f 镜像id
docker rmi -f $(docker images -aq)  #删除所有镜像

#新建并启动容器
docker run [可选参数] image

#参数说明
--name			容器名字 tomcat01 tomcat02 , 用来区分容器
-d				后台方式运行
-it				使用交互方式运行,进入容器查看内容
-p  8080:8080	指定容器的端口(主机:容器)
-p				随机指定端口
-v 挂载卷; 
-e 环境配置

#启动并进入容器
docker run -it mysql -p 3306:3308 --name mysql01 /bin/bash    #启动centos这个容器

#列出所有运行的容器
docker ps     #显示当前运行的容器
docker ps -a  #列出历史打开过的容器和当前打开的容器
docker ps -q  #只显示容器id

#删除容器
docker rm  容器id				#不能删除正在运行的容器,加-f可以强制删除
docker rm -f $(docker ps -aq)  #删除所有容器,包括正在运行的

#查看docker日志
docker logs -tf --tail 10 容器id
#参数说明
-tf		#显示日志和时间
--tail	number	#要显示的日志行数

#查看容器详细信息
docker inspect 容器id

#以交互的形式进入一个正在运行的容器中
docker exec -it 容器id /bin/bash     #方法1

docker attach 容器id /bin/bash	    #方法2

#制作镜像
docker commit -a="制作者" -m="提交信息" 容器id 目标镜像名:[TAG]
#例如
docker commit -a="ZongJie" -m="test commit" 963379f7e0a5 tomcat01:1.0

10.外部接口怎么跟前后台进行交互。

答:请求外部接口后,外部接口携带对应的数据对服务器进行请求,服务器接收到请求后进行一个实体类的匹配类,此时后台进行交互,如查询数据等,然后生成数据结果返回给请求方。测试方面请求完外部接口后,如果返回的数据对系统的前后端有数据的交互,就进行一个数据的校验操作。

11.TCP的3次握手和4次挥手是怎样的一个过程

在这里插入图片描述

  • ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

  • 3次握手:

    1. 第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;
    2. 第二次握手:服务器接收到了SYN包,并确认该连接是有对应的客户端发起的,然后此时也返回一个SYN包和ACK给客户端,进入SYN_RECV状态;
    3. 第三次握手,客户端接收到服务器的SYN+ACK包,向服务器发送ACK包并确认建立连接,开始数据的传输;
      在这里插入图片描述
  • 4次挥手

    1. 第一次挥手: 客户端向服务端发送FIN,已没有数据可以发送了希望断开连接,客户端进入FIN_WAIT_1状态;
    2. 第二次挥手: 服务器收到FIN后, 并返回一个ACK给客户端,但是服务器可能还有数据没传输完成,所以进入CLOSE_WAIT状态
    3. 第三次挥手, 服务端已经数据传输完成了, 然后发送一个FIN给到客户端,进入LAST_ACK状态;
    4. 客户端收到FIN后,发送一个ACK个服务器端,客户端进入TIME_WAIT状态,服务端进入CLOSED状态;
      在这里插入图片描述
12.元素定位的方式

1.浏览器上按F12,然后点击鼠标箭头那个可以直接选中元素进行查看
2.在selenium中的8大定位方式分别是

  • xpath
  • css_selector
  • id 元素id
  • class 元素类名
  • name 元素名
  • tag 元素标签
  • link_text 链接文本
  • partail_link_text 部分链接文本
13.常用的ADB命令有哪些

adb connect ip:port 无线连接设备
adb devices 查看设备状态
adb install xxx.apx 安装软件包
adb uninstall 包名 卸载app
adb shell pm list packages 查看所有程序包名
adb shell dumpsys activity | findstr “mFocusedActivity” 查看当前运行的app包名
adb logcat 打印日志
adb logcat -b 打印指定缓冲区的日志(main system event radio)
adb logcat -v time > D:\log.txt 打印日志到指定目录打印时间
adb push 电脑推送文件到手机
adb pull 拉取手机文件到电脑
adb shell monkey -p 包名 1000 模拟对应软件随机事件1000次
adb shell screencap /sdcard/screen.png 手机截屏存储图片到对应路径

14.你们怎么进行兼容性测试的
15.我看到你项目中有写到使用python编写了接口自动化,能聊聊你是怎么做的吗,以及途中有遇到什么技术难点吗
16.说说你们的测试流程
17.Web和App测试的区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值