软件测试
selenium
selenium八大元素选择器?
- 元素属性id值
- 链接link text文本定位
- by_xpath 基于页面结构定位
- partial linl text:link text的模糊查询版本
- tag_name
- class_name
- css_selector
软件测试
测试用例的设计方法有哪些?
- 等价类划分法
- 边界值分析法
- 错误推测法
- 判断表法
- 因果图法
- 场景法
- 正交实验法
缺陷的定义是什么?(什么时软件缺陷/bug?)
- 软件未实现产品说明书要求的功能。
- 软件实现了产品说明书未提到的功能。
- 软件未实现产品说明书虽未明确提及,但3应实现的目标。
- 软件实现了产品说明书中指名不该出现的功能。
- 难以理解、不易使用、运行缓慢或者(从测试的角度来说)最终用户不满意。
什么是软件测试?(软件测试的定义)
- 正向:相信产品能够达到预期结果的测试过程。
- 反向:测试目的是为了发现软件的错误而执行一个程序的过程。
- IEEE:在规定条件下运行系统或构件的过程:观察和记录结果,并给出相应评价;分析软件项目的过程:检查现有状况和所需状况之间的不同,并评估项目特性。
软件测试的目的是什么?
- 直接目的:找到bug,并保证bug被修复。
- 长远目标:测试数据,对测试和开发过程进行改进,避免重复犯错。
测试与调试的区别?
- 主体不同,测试为测试人员,调试为开发人员。
- 方法不同,测试使用等价类划分法、边界值法等,调试使用逻辑代码和算法。
- 思路不同,测试为反向思维,调试为正向思维。
- 测试目的明确,结果预知,过程定义好,调试结果未知,所花时间不确定。
说出因果图法的优缺点?
- 优点:能发现需求或者设计中的不足之处。
- 缺点:当原因和结果很多的时候,因果关系连线就会很多,导致可读性变差,因此只适合局部的小功能。
你发现bug,但开发认为不是bug你该怎么办?
- 将问题提交到缺陷管理库里面进行备案;
- 反复确认bug,保证发现的确实是一个bug;
- 是否是自己对bug描述不正确;
- 如果前面都没问题,那么既然开发人员认为不是bug,又确实存在问题,我会找出需求文档,并且对着文档和开发当面进行沟通,说出我认为是BUG的原因;如果开发接受我的说法,那就需要开发进行BUG修改;如果开发仍然觉得不是一个BUG,这个时候需要产品经理介入。针对此问题,进行讨论。如果产品觉得是BUG,一般情况是需要修复的。如果产品经理觉得问题不大,那这个BUG就可以不解决。
测试用例包括哪些东西?
给你一个需求怎么展开测试工作?
测试用例的八大要素是?
三大等待
- 隐式等待
- 显示等待
- 强制等待
关键字驱动原理
封装成一个工具类,提供操作浏览器的api,易于管理和维护,及提高代码的复用性。
怎么部署测试环境?
- 如果是项目第一次部署,了解软件运行的最低要求及用户配置,如硬件,网络,系统等,模拟出用户真实使用环境。
- 如果是项目第一次部署,就根据该软件项目的技术选型,检查服务器上软件运行所需的软件环境(比如jdk,数据库,服务器,git等)和本地测试工具是否齐全,如果有就检查版本是否符合要求,没有就下载安装配置。
- 执行脚本,做好测试数据准备。
- 搭好测试环境后,对操作系统及测试环境进行备份,避免在测试环境遭到破坏时,造成数据丢失,出现不可预知的问题。
Fiddler
为什么要使用fiddler抓包?(软件测试时为什么需要抓包?)
- 功能测试时,通过抓包查看隐藏字段,web表单中会有很多隐藏字段,可以收集用户数据,预防CRSF攻击,防网络爬虫等。
- 了解协议内容,方便展开接口测试和性能测试。性能测试方时,需要大量模拟用户请求,所以必须知道请求中的协议内容和特点,可以用来分析协议。接口测试方面,在接口文档没有或者不全的时候,用来进行辅助测试。
- 检查数据加密安全测试时,需要通过抓包检查敏感数据在传输过程中是否加密。
- 用来处理前后端bug之争。
- 通过抓包分析,更好的理解整个系统。比如数据传输过程中前后端的关系以及整个系统的结构。
HTTP&TCP/IP
http协议有哪些成分?各成分之间包含哪些东西?
http协议包含请求和响应。
- 请求:
- 请求行
- 请求头
- 空行
- 请求体
- 响应:
- 响应行
- 响应头
- 空行
- 响应体
请求,响应行头体分别包含哪些内容?
- 请求行:
- 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:请求体的格式类型
- 请求头
Http与Https的异同点?
异同点:
- Http是超文本传输协议为明文传输,而Https为超文本传输完全协议,利用SLL/TLS加密数据包,提供了对网站服务器的身份验证,保护了减缓资料的隐私性和完整性。可视为http的升级版,更安全;
- 端口不同:http默认端口为80,而https是443;
- 连接方式不同:http是无连接、无状态的,而https是如SSL+HTTP构建的可进行加密传输、身份认证的网络协议,因而http相对更简单快速,https对技术门槛要求较高,会加重服务端负担;
- 证书申请方式不同:http:免费申请;https需要到ca申请证书,需缴费。
http请求方法有哪些?
- GET 请求指定的页面信息,并返回实体主体。通常获取某个指定页面内容
- HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
- POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
- PUT 从客户端向服务器传送的数据取代指定的文档的内容。通常用于修改指定页面的内容。
- DELETE 请求服务器删除指定的页面。
- CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
- OPTIONS 允许客户端查看服务器的性能。
- TRACE 回显服务器收到的请求,主要用于测试或诊断。
- PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
get&post方法的区别?
- get在浏览器回退时是无效的,而post会再次提交请求;
- get产生的url可以被BookMark,post不可以;
- get请求会被浏览器主动cache,pot不会,除非手动设置;
- get请求只能进行url编码,post支持多种编码方式;
- get请求参数会完整保留在浏览器历史记录里,post不会被保留;
- get请求在url中传送的参数有大小限制,post没有;
- get对参数的数据类型有限制,只接受ASCII字符,post没有;
- get比post更不安全,参数直接暴露在url上,不能用来传递敏感信息;
- get参数通过url传递,post放在Request body中;
Session、Cookie和Token的区别
- 三者都是由服务器产生的;
- cookie保存在客户端通常指浏览器、session保存在服务器端、token相当于一个令牌。
- cookie数据存放在客户端浏览器上,session数据存放在服务器上、token在客户端一般存放在localStorage,cookie或sessionStorage中,在服务器端一般存放在数据库中;
- session通过set-cookie字段将sessionId返回给客户端,下次请求时只要带上sessionId就能保持连接;
- cookie没有session安全,可以通过分析本地存放的cookie并进行cookie欺骗;
- 大小不一致:单个cookie保存的数据不能超过4K,很多浏览器限制一个站点最多保存20哥cookie。而且编码也有限制;session则没有这些限制;
- 由于session保存在服务器上,当访问增多时,会比较占用服务器性能;
- token完全由应用程序进行管理,所以它能避开同源策略,可以避免CSRF(跨站请求访问)攻击;可以是无状态的,可以在多个服务器之间共享;可以减轻服务器压力,减少频繁的查询数据库。
OSI/RM七层协议有哪些?TCP/IP协议有哪些?
- OSI/RM:
- 物理层:定义一些电器,机械,过程和规范,集线器
- 数据链路层:提供介质访问和链路管理
- 网络层:IP选址及路由寻址。选择最佳路径传输,路由数据包;
- 传输层:建立、管理和维护端到端的连接。提供可靠和尽力而为的传输;
- 会话层:建立、管理和维护会话
- 表示层:数据格式转化、数据的加密
- 应用层:为应用程序提供服务。控制应用程序
- TCP/IP:
- 网络接口层
- 网络互联层
- 传输层
- 应用层
TCP三次握手四次挥手的全过程
三次握手:
- 客户端浏览器想服务器发送SYN位码,请求服务器建立连接;
- 服务器接收到SYN位码后,向客户端发送一个SYN+ACK位码,让客户端表示连接并确认;
- 客户端收到SYN+ACK位码后,在给服务器端发送一个ACK位码,确认建立连接。
四次挥手:
- 客户端浏览器向服务器发送FIN+ACK位码,告诉服务器数据传输完毕,请求断开连接,并等待服务器确认;
- 服务器接收到位码后,发送一个ACK位码给客户端表示已受到确认;
- 服务器继续发送FIN位码给客户端,表示我的数据也传输完了,你可以断开连接了;
- 客户端浏览器收到服务器发送的FIN位码后,向服务器发送一个ACK位码,确认断开连接。
输入一串网址,接下来会发生什么事情?
一、Http请求
域名解析:浏览器拿到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 地址返回客户端,客户端和目标建立连接。
tcp三次握手:dns解析后拿到ip,浏览器会与IP对应的服务器进行tcp三次握手建立连接,构建出一个http请求:
- 第一次握手:客户端想服务器发送一个请求(SKY=1),等待服务器确认;
- 第二次握手:服务器收到清求并确认,回复一个指令(SKY=1,ACK=1);
- 第三次握手:客户端收到服务器的回复指令并返回确认(ACK=1)。
发送http请求:以 GET 为例,当需要发送 HTTP 请求的时候,同样也不是直接就发送了,需要先查询浏览器缓存。浏览器中的缓存分为强缓存和协商缓存,浏览器发起 HTTP 请求时首先会根据 http 头信息来判断是存有强缓存,以及其是否过期,如果有强缓存且未过期则命中,不会发送请求到服务器了。如果强缓存没命中,则会向服务器发起请求,这个请求的 Header 头中会带有浏览器最后一次请求该资源的时间和一个资源校验码(使用资源修改时间、资源大小等信息生成),服务器收到这个请求后会判断协商缓存是否过期,如果过期则返回新的资源信息,如果没过期则返回 304 状态码,表示资源未更新,可以使用缓存中的资源。
TCP-网络层连接:HTTP 请求发出后会将数据包交给下层协议栈处理,在传输层和网络层该数据包会被分别加上 TCP 头和 IP 头,并且被发送出去,沿路的网关会收到这个数据包并进行识别和转发,直到该数据包被服务器收到,通过相同的流程返回回复数据包。
页面渲染:客户端拿到服务器端传输来的文件,找到HTML和MIME文件,通过MIME文件,浏览器知道要用页面渲染引擎来处理HTML文件。
二、Https请求
在发起请求是需要进行身份验证
三、无域名,直接写ip地址
不需要解析域名,可直接发起Http/https请求
四、有无请求参数
常用的协议有哪些,端口号是?
- TCP协议:
- FTP——文件传输协议——21号端口
- Telnet——远程登陆协议——23号端口
- SMTP——简单邮件传送协议——25号端口
- POP3——接收邮件——110号端口
- UDP协议:
- HTTP——超文本传输协议——80号端口
- HTTPS——服务器,默认端口号为443
- DNS——域名解析服务——53号端口
- SNMP——简单网络管理协议——161号端口
- 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怎么杀进程?
- 首先使用ps -ef 进程名 查找其id号,然后使用kill > -9 加查到的id号强制杀掉进程。
- 在知道进程完整名称的情况下,使用killall 进程名杀掉所有同名的进程
- 使用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中查找文件有多种方法,如:
- 使用find命令在指定目录下查找,可以使用*模糊匹配:find path -name file
- 使用which命令从环境变量文件(/etc/profile)中的path目录中查找,且which找的都是可执行文件,不能使用*模糊匹配: which filename
- 使用locate以一个数据库文件为基础查找,linux系统每天至少自动扫描一次文件,将结果保存到数据库,locate查的是数据库记录。locate查询比find要快,但最新文件如果在数据库中没有记录,会查询不到,次是需要手动更新(updatedb):locate filename
- 使用whereis查询可执行文件,比which查询更多,会查找出相关的man文件:whereis filename