软件测试

selenium

selenium八大元素选择器?

  1. 元素属性id值
  2. 链接link text文本定位
  3. by_xpath 基于页面结构定位
  4. partial linl text:link text的模糊查询版本
  5. tag_name
  6. class_name
  7. css_selector

软件测试

测试用例的设计方法有哪些?

  1. 等价类划分法
  2. 边界值分析法
  3. 错误推测法
  4. 判断表法
  5. 因果图法
  6. 场景法
  7. 正交实验法

缺陷的定义是什么?(什么时软件缺陷/bug?)

  1. 软件未实现产品说明书要求的功能。
  2. 软件实现了产品说明书未提到的功能。
  3. 软件未实现产品说明书虽未明确提及,但3应实现的目标。
  4. 软件实现了产品说明书中指名不该出现的功能。
  5. 难以理解、不易使用、运行缓慢或者(从测试的角度来说)最终用户不满意。

什么是软件测试?(软件测试的定义)

  1. 正向:相信产品能够达到预期结果的测试过程。
  2. 反向:测试目的是为了发现软件的错误而执行一个程序的过程。
  3. IEEE:在规定条件下运行系统或构件的过程:观察和记录结果,并给出相应评价;分析软件项目的过程:检查现有状况和所需状况之间的不同,并评估项目特性。

软件测试的目的是什么?

  1. 直接目的:找到bug,并保证bug被修复。
  2. 长远目标:测试数据,对测试和开发过程进行改进,避免重复犯错。

测试与调试的区别?

  1. 主体不同,测试为测试人员,调试为开发人员。
  2. 方法不同,测试使用等价类划分法、边界值法等,调试使用逻辑代码和算法。
  3. 思路不同,测试为反向思维,调试为正向思维。
  4. 测试目的明确,结果预知,过程定义好,调试结果未知,所花时间不确定。

说出因果图法的优缺点?

  • 优点:能发现需求或者设计中的不足之处。
  • 缺点:当原因和结果很多的时候,因果关系连线就会很多,导致可读性变差,因此只适合局部的小功能。

你发现bug,但开发认为不是bug你该怎么办?

  1. 将问题提交到缺陷管理库里面进行备案;
  2. 反复确认bug,保证发现的确实是一个bug;
  3. 是否是自己对bug描述不正确;
  4. 如果前面都没问题,那么既然开发人员认为不是bug,又确实存在问题,我会找出需求文档,并且对着文档和开发当面进行沟通,说出我认为是BUG的原因;如果开发接受我的说法,那就需要开发进行BUG修改;如果开发仍然觉得不是一个BUG,这个时候需要产品经理介入。针对此问题,进行讨论。如果产品觉得是BUG,一般情况是需要修复的。如果产品经理觉得问题不大,那这个BUG就可以不解决。

测试用例包括哪些东西?

给你一个需求怎么展开测试工作?

测试用例的八大要素是?

三大等待

  1. 隐式等待
  2. 显示等待
  3. 强制等待

关键字驱动原理

封装成一个工具类,提供操作浏览器的api,易于管理和维护,及提高代码的复用性。

怎么部署测试环境?

  1. 如果是项目第一次部署,了解软件运行的最低要求及用户配置,如硬件,网络,系统等,模拟出用户真实使用环境。
  2. 如果是项目第一次部署,就根据该软件项目的技术选型,检查服务器上软件运行所需的软件环境(比如jdk,数据库,服务器,git等)和本地测试工具是否齐全,如果有就检查版本是否符合要求,没有就下载安装配置。
  3. 执行脚本,做好测试数据准备。
  4. 搭好测试环境后,对操作系统及测试环境进行备份,避免在测试环境遭到破坏时,造成数据丢失,出现不可预知的问题。

Fiddler

为什么要使用fiddler抓包?(软件测试时为什么需要抓包?)

  1. 功能测试时,通过抓包查看隐藏字段,web表单中会有很多隐藏字段,可以收集用户数据,预防CRSF攻击,防网络爬虫等。
  2. 了解协议内容,方便展开接口测试和性能测试。性能测试方时,需要大量模拟用户请求,所以必须知道请求中的协议内容和特点,可以用来分析协议。接口测试方面,在接口文档没有或者不全的时候,用来进行辅助测试。
  3. 检查数据加密安全测试时,需要通过抓包检查敏感数据在传输过程中是否加密。
  4. 用来处理前后端bug之争。
  5. 通过抓包分析,更好的理解整个系统。比如数据传输过程中前后端的关系以及整个系统的结构。

HTTP&TCP/IP

http协议有哪些成分?各成分之间包含哪些东西?

http协议包含请求和响应。

  1. 请求:
    • 请求行
    • 请求头
    • 空行
    • 请求体
  2. 响应:
    • 响应行
    • 响应头
    • 空行
    • 响应体

请求,响应行头体分别包含哪些内容?

  1. 请求行:
    • get/post等:请求方法
    • Host:请求的主机名
    • Connection:
    • Sec-ch-ua:
    • Accept:客户端可识别的内容列表
    • sec-ch-ua-mobile:
    • User-Agent:产生请求浏览器类型
    • Sec-Fetch-Site:
    • Sec-Fetch-Mode:
    • Sec-Fetch-Dest:
    • Referer:
    • Accept-Ecoding:
    • Accept-Language:
    • Cookie:
    • Content-Type:请求体的格式类型
  2. 请求头

Http与Https的异同点?

异同点:

  1. Http是超文本传输协议为明文传输,而Https为超文本传输完全协议,利用SLL/TLS加密数据包,提供了对网站服务器的身份验证,保护了减缓资料的隐私性和完整性。可视为http的升级版,更安全;
  2. 端口不同:http默认端口为80,而https是443;
  3. 连接方式不同:http是无连接、无状态的,而https是如SSL+HTTP构建的可进行加密传输、身份认证的网络协议,因而http相对更简单快速,https对技术门槛要求较高,会加重服务端负担;
  4. 证书申请方式不同:http:免费申请;https需要到ca申请证书,需缴费。

http请求方法有哪些?

  1. GET 请求指定的页面信息,并返回实体主体。通常获取某个指定页面内容
  2. HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
  3. POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
  4. PUT 从客户端向服务器传送的数据取代指定的文档的内容。通常用于修改指定页面的内容。
  5. DELETE 请求服务器删除指定的页面。
  6. CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
  7. OPTIONS 允许客户端查看服务器的性能。
  8. TRACE 回显服务器收到的请求,主要用于测试或诊断。
  9. PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

get&post方法的区别?

  1. get在浏览器回退时是无效的,而post会再次提交请求;
  2. get产生的url可以被BookMark,post不可以;
  3. get请求会被浏览器主动cache,pot不会,除非手动设置;
  4. get请求只能进行url编码,post支持多种编码方式;
  5. get请求参数会完整保留在浏览器历史记录里,post不会被保留;
  6. get请求在url中传送的参数有大小限制,post没有;
  7. get对参数的数据类型有限制,只接受ASCII字符,post没有;
  8. get比post更不安全,参数直接暴露在url上,不能用来传递敏感信息;
  9. get参数通过url传递,post放在Request body中;

Session、Cookie和Token的区别

  1. 三者都是由服务器产生的;
  2. cookie保存在客户端通常指浏览器、session保存在服务器端、token相当于一个令牌。
  3. cookie数据存放在客户端浏览器上,session数据存放在服务器上、token在客户端一般存放在localStorage,cookie或sessionStorage中,在服务器端一般存放在数据库中;
  4. session通过set-cookie字段将sessionId返回给客户端,下次请求时只要带上sessionId就能保持连接;
  5. cookie没有session安全,可以通过分析本地存放的cookie并进行cookie欺骗;
  6. 大小不一致:单个cookie保存的数据不能超过4K,很多浏览器限制一个站点最多保存20哥cookie。而且编码也有限制;session则没有这些限制;
  7. 由于session保存在服务器上,当访问增多时,会比较占用服务器性能;
  8. token完全由应用程序进行管理,所以它能避开同源策略,可以避免CSRF(跨站请求访问)攻击;可以是无状态的,可以在多个服务器之间共享;可以减轻服务器压力,减少频繁的查询数据库。

OSI/RM七层协议有哪些?TCP/IP协议有哪些?

  • OSI/RM:
    1. 物理层:定义一些电器,机械,过程和规范,集线器
    2. 数据链路层:提供介质访问和链路管理
    3. 网络层:IP选址及路由寻址。选择最佳路径传输,路由数据包;
    4. 传输层:建立、管理和维护端到端的连接。提供可靠和尽力而为的传输;
    5. 会话层:建立、管理和维护会话
    6. 表示层:数据格式转化、数据的加密
    7. 应用层:为应用程序提供服务。控制应用程序
  • TCP/IP:
    1. 网络接口层
    2. 网络互联层
    3. 传输层
    4. 应用层

TCP三次握手四次挥手的全过程

三次握手:

  1. 客户端浏览器想服务器发送SYN位码,请求服务器建立连接;
  2. 服务器接收到SYN位码后,向客户端发送一个SYN+ACK位码,让客户端表示连接并确认;
  3. 客户端收到SYN+ACK位码后,在给服务器端发送一个ACK位码,确认建立连接。

四次挥手:

  1. 客户端浏览器向服务器发送FIN+ACK位码,告诉服务器数据传输完毕,请求断开连接,并等待服务器确认;
  2. 服务器接收到位码后,发送一个ACK位码给客户端表示已受到确认;
  3. 服务器继续发送FIN位码给客户端,表示我的数据也传输完了,你可以断开连接了;
  4. 客户端浏览器收到服务器发送的FIN位码后,向服务器发送一个ACK位码,确认断开连接。

输入一串网址,接下来会发生什么事情?

一、Http请求

  1. 域名解析:浏览器拿到url后 对url解析,将域名与实际的文件路径分离开,通过DNS解析得到该域名的ip地址 ,这个过程中并不是每次都会发起DNS请求的,首先会从几个缓存里面进行找,找不到了才会发起DNS请求,三级缓存如下:询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间),如果没有找到,检查系统缓存,检查hosts文件,这个文件保存了一些以前访问过的网站的域名和IP的数据。它就像是一个本地的数据库。如果找到就可以直接获取目标主机的IP地址了。没有找到的,就需要发起DNS请求,检查路由器缓存,路由器有自己的DNS缓存,可能就包括了这在查询的内容;
    DNS请求步骤:

    • 向本地DNS服务器发送请求,询问该域名的ip是啥?本地域名服务器收到客户端的请求后,如果缓存里的表格能找到,找到则直接返回该域名ip,反之则会去询问根域名服务器;
    • 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说这个域名归 .com区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
    • 本地 DNS 收到顶级域名服务器的地址后,向.com 顶级域名服务器发起请求询问ip地址,顶级域名服务器返回该域名区域的权威DNS服务器地址;
    • 本地 DNS 于是转向问权威 DNS 服务器,权威 DNS 服务器查询后将对应的 IP 地址 告诉本地 DNS;
    • 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
  2. tcp三次握手:dns解析后拿到ip,浏览器会与IP对应的服务器进行tcp三次握手建立连接,构建出一个http请求:

    • 第一次握手:客户端想服务器发送一个请求(SKY=1),等待服务器确认;
    • 第二次握手:服务器收到清求并确认,回复一个指令(SKY=1,ACK=1);
    • 第三次握手:客户端收到服务器的回复指令并返回确认(ACK=1)。
  3. 发送http请求:以 GET 为例,当需要发送 HTTP 请求的时候,同样也不是直接就发送了,需要先查询浏览器缓存。浏览器中的缓存分为强缓存和协商缓存,浏览器发起 HTTP 请求时首先会根据 http 头信息来判断是存有强缓存,以及其是否过期,如果有强缓存且未过期则命中,不会发送请求到服务器了。如果强缓存没命中,则会向服务器发起请求,这个请求的 Header 头中会带有浏览器最后一次请求该资源的时间和一个资源校验码(使用资源修改时间、资源大小等信息生成),服务器收到这个请求后会判断协商缓存是否过期,如果过期则返回新的资源信息,如果没过期则返回 304 状态码,表示资源未更新,可以使用缓存中的资源。

  4. TCP-网络层连接:HTTP 请求发出后会将数据包交给下层协议栈处理,在传输层和网络层该数据包会被分别加上 TCP 头和 IP 头,并且被发送出去,沿路的网关会收到这个数据包并进行识别和转发,直到该数据包被服务器收到,通过相同的流程返回回复数据包。

  5. 页面渲染:客户端拿到服务器端传输来的文件,找到HTML和MIME文件,通过MIME文件,浏览器知道要用页面渲染引擎来处理HTML文件。
    二、Https请求
    在发起请求是需要进行身份验证
    三、无域名,直接写ip地址
    不需要解析域名,可直接发起Http/https请求
    四、有无请求参数

常用的协议有哪些,端口号是?

  • TCP协议:
    1. FTP——文件传输协议——21号端口
    2. Telnet——远程登陆协议——23号端口
    3. SMTP——简单邮件传送协议——25号端口
    4. POP3——接收邮件——110号端口
  • UDP协议:
    1. HTTP——超文本传输协议——80号端口
    2. HTTPS——服务器,默认端口号为443
    3. DNS——域名解析服务——53号端口
    4. SNMP——简单网络管理协议——161号端口
    5. TFTP——简单文件传输的协议——69号端口
  • SSH(安全登录)、SCP(文件传输)、端口重定向,默认的端口号为22
  • tomcat,默认的端口号为8080
  • Oracle 数据库,默认的端口号为1521
  • mysql 数据库,默认的端口号为3306

什么是路由寻址?

指从一个接口收到数据包,根据数据包的目的地址定向并转发到另一个接口的过程

Linux

Linux的目录结构有哪些?分别有什么作用?

答:根据FHS标准,Linux包含11个主要目录:
/boot:系统启动目录,也是内核的存放地
/etc:存放配置文件
/tmp:存放临时文件
/home:用户目录
/lib:存放库文件和程序执行过程中会用到的额外函数库
/bin:存放可执行文件和linux命令
/sbin:存放系统管理员的命令和工具
/usr:应用程序和文件的安装地
/mnt:挂载其它文件系统
/root:root账户的目录
/dev:存放linux系统下的设备文件

linux怎么杀进程?

  1. 首先使用ps -ef 进程名 查找其id号,然后使用kill > -9 加查到的id号强制杀掉进程。
  2. 在知道进程完整名称的情况下,使用killall 进程名杀掉所有同名的进程
  3. 使用pkill 进程名杀掉所有同名进程,通常用来杀掉某一个用户的所有进程。

Linux怎么查日志?

通常使用tail 命令查看日志

Linux怎么解压压缩文件?

linux环境下通常tar.gz或tar格式的,使用tar -zxvf 文件名解压 tar -zcvf 文件名压缩
某些情况需要解压来自windos系统的zip文件时,unzip 文件名解压,unzip -r 文件名压缩

Linux怎么修改文件权限?

linux系统中,文件权有rwx(读写和执行),文件权限设定为10位数,第一位代表文件类型,其后每三位分别代表这ugo(文件所有者、同组成员和其他人)的rwx(读写执行)权限。可以使用chmod命令修改,对ugo三者增减rwx(读写执行)权限。为了简化操作,把rwx分别用3为数的二进制表示1表示真0表示假及100,010,001,对应十进制的4,2,1。因此要修改某一用户的权限,首先判断该用户与ugo的关系,之间对ugo进行赋值即可。比如要修改操作文件权限的用户和文件所有者同组,修改为可读可写可执行及4+2+1=7,其它两位数不变,中间变为7即可。

如何查找文件

答:linux中查找文件有多种方法,如:

  1. 使用find命令在指定目录下查找,可以使用*模糊匹配:find path -name file
  2. 使用which命令从环境变量文件(/etc/profile)中的path目录中查找,且which找的都是可执行文件,不能使用*模糊匹配: which filename
  3. 使用locate以一个数据库文件为基础查找,linux系统每天至少自动扫描一次文件,将结果保存到数据库,locate查的是数据库记录。locate查询比find要快,但最新文件如果在数据库中没有记录,会查询不到,次是需要手动更新(updatedb):locate filename
  4. 使用whereis查询可执行文件,比which查询更多,会查找出相关的man文件:whereis filename