目录
六、 Linux
6.1 Linux系统你是怎么用的?
6.2 Linux是什么工具连接的, Linux版本是多少
6.3 日志具体是怎么看的
6.4 监控资源命令用到哪些
6.5 nmon工具是如何使用的
6.6 测试环境是如何搭建的(弱项)
6.7 linux常见命令有哪些,说出10条左右
6.8 如何查看端口是否被占用
6.9 data目录下找到所有txt的文件的命令
6.10 怎么把lnux服务器的文件拷贝到另外一台 linux服务器
七、数据库
7.1 你们数据库怎么用
7.2 存储过程是怎么编写的
7.3 常见的关系型数据库有哪些
7.4 你们用的什么数据库连接工具
7.5 左连接与右连接有什么区别
7.6 索引有哪些,如何建立索引,素引的优缺点
7.7 having是干嘛的?
7.8 where与 having的区别?
7.9 查询数据库的前100行数据,你sq怎么写
7.10 如何进行多表查询
7.11 in与 exist的区别
7.12 数据库测试有没有发现什么问题
八、抓包与网络协议
8.1 抓包工具怎么用
8.2 如何抓取https的包
8.3 如何抓取手机的包
8.4 网络协议了解多少?
8.5 请求方式有哪些?
8.6 get跟post请求的区别
8.7 http跟https的区别
8.10 OSI七层网络模型
8.11 TCP模型
8.12 TCP和UDP的区别?
8.13 tcp的三次握手是怎么实现的?
8.14 http协议包含哪些内容
8.15 http状态码有哪些
8.16 post申请方式,用get会报什么错误。
8.17 http协议提交请求头内容
九、接口测试
9.1 接口测试怎么测
9.2 两个接口有关联, jmeter具体怎么做
9.3 接口测试主要目的是什么?
9.4 接口测试的流程
9.5 接口测试和平常的Ul测试有什么区别?
9.6 给你一个新的接口,你怎么去设计用例?
9.7 接口文档主要包含哪些内容?
9.8 你们什么时候测试接口
9.9 你怎么去检查,分析
9.10 什么是api接口测试
9.11 什么情况下开展接口测试?
9.12 依赖于第三方的接口如何测试
9.13 你们接口怎么鉴权的?
9.14 接口传输格式有哪些
9.16 接口测试的工具有哪些?
9.17 jmeter环境搭建
9.18 接口工具 jmeter用到哪些组件,具体作用
9.19 jmeter原理是什么
9.20 上传文件的接口用 JMeter怎么做
9.21 对于POST请求,要求传递Json格式数据, JMeter怎么做
9.22 对于需要加密的请求参数, JMeter如何处理?
9.23 如果接口返回的数据做了加密处理的,如何进行断言?
9.24 下一个接口用到上一个接口的数据,但返回的数据加密了,如何提取?
9.25 jmeter如何去做get请求接口
9.26 meter如何做json数据格式的接口
9.28 jmeter中如何添加 header信息
9.29 jmeter中 webserver中soap协议xml格式数据如何测试
9.30 jmeter 中如何去连接数据库
9.31 jmeter中https证书如何处理
9.32 http如何进行代理录制接口
9.33 jmeter如何做post请求格式接口
9.34 如何搭建 python+ requests接口测试环境
9.35 requests如果做get请求,数据保存格式哪二种
9.36 requests如何做post请求接口
9.37 requests上传文件接口如何测试
9.38 有没有做过https接口,具体怎么做
9.39 requests中如何测试json数据的接口
9.41 requests中如何添加 headers信息
9.42 requests中https证书如何处理
9.43 requests中sign签名与 token如何处理
9.44 request框架有哪些方法?
前言
继上次的面经,这里是第二阶段的,不说看完百分比能过面试,基本上的是没有问题的铁汁们。
Python自动化测试全栈+性能测试全栈+全套资料免费领取
[在测试1、执行的过程中,我们发现的bug,有时候需要定位bug,协助开发修复bug时需要在linux里通过命令tail-200或tail-500查看当天的日志的后面多少行或者前面多少行定位bug或者通过tail -f来查看日志里的关键字 exception(异常) error(错误)。
[后台程序运行久了会对系统造成卡顿等诸多隐患或我们做性能测试的时候我们都会通过linux的命令Ps -ef显示所有进程)、top(监控程序执行状况)、free -m显示内存使用情况)
来查看系统资源如果服务器出现故障时我们也会用(service httpd status)看下服务器是否启动,用ps -ef|grep httpd查看apache进程是否启动,用ps -ef|grepjava查看jdk进程是否启动如果服务器起不来,常见的问题有端口可能被占用,用 netstat- an|grep 8080查看端口是否已被占用。]
[搭建测试环境的时候我们在是在linux下进行的,搭建LAMP时在线用命令 yum install
安装 apache,php以及mysql;或通过 xshell来导入需要的环境包来搭建LTMJ(Tomcat、Mysql、jdk)
Xshell、CRT、SSH用的ssh协议连接,端口是22
传输文件用xftp工具,占用的端口是21
Linux版本 centos6.5版本64位
1、我们根据日志目录找到对应的日志文件,用tail -200,或者tail-500查看文件内容
也可以重定向导出来查看。
如果是系统出现了异常导致的错误,我们跟去查找关键字,比如说error或者 exception等
如果是逻辑错误,会把操作对应时间的日志跟对应开发一起去定位bug
查着进程ps -ef过滤添加grep来着
杀掉进程 kill 强制杀掉 -9
监控资源top vmstat
磁盘 df -h
内存 free -m
1、下载安装包()
2、安装(不需要安装-解压即可) nmon_linux_14i.tar.gz
1)把文件传输到 linux服务器
2)解压xftp
tar -zxvf nmon_linux 14i.tar.gz
3)解压文件中,找到你系统版本对应的运行文件
比如:你们的操作系统 centos6.5 64位系统, ./nmon_x86_64_centos6文件
4)运行对应的监控资源的文件
./nmon_x86_64_centos6
按字母c查看cpu,m查看内存,n查看网络,q退出
3、运行命令把数据保存到文档中
./nmon_x86_64_sles11 -s1 -c350 -f -m /home/
-s1每1秒采集一次数据
-c350采集350次,即为采集十分钟的数据。
-f生成的数据文件名中包含文件创建的时间
-m生成的数据文件的存放目录
这样就会生成一个nmon文件,并每十秒更新一次,直到分钟后。
生成的文件名如:_090824_1306nmon,””是这台主机的主机名, nmon -h查看更多帮助信息。
4、把生成nmon工具,导出到 windows
5、用 office运行分析工具
6、生成一个xlsx文件
前提条件:租服务器或者买服务器-仅搭建一次,
1、搭建环境 linux+ apache+php+ mysql, linux+ tomcat+java+ mysql
2、每一次选代,每一次测试( apache)html目录下
1)替换代码包(覆盖代码包)-配置文件已经编辑好-压缩包
2)运行sql文件
3)重启服务
tomcat(java语言) ---代码在 webapps目录下
1,替换代码包(覆盖代码包)·配置文件已经编辑好-压缩包,war包(重启 tomcat服务,自动化解压)
2,运行SQL文件
3,重启服务
查看实时日志:tall 、 head -20 查看前20行 、 tail -20 查看前20行
查看进程:ps -ef 、查看当前系统端口:netstat -an 、查看哪些端口被打开:netstat -anp
重启数据库服务:systemctl restart mysql service
重启网卡:service network restart
解压包:.zip包 unzip 包名 .tar tar -xzf 包名
在线安装用 yun
Netstat -anolgrep 8080
Find /data -name “*.txt”
scp要拷贝的文件目标主机ip:/目录/
scp startup.sh 192.168.1.157: /home/
[email protected]'s password:
startup.sh
Python自动化测试全栈+性能测试全栈+全套资料免费领取Python自动化测试全栈+性能测试全栈,全套资料-功能-接口-自动化-性能-测试开发-面试全套资料全套资料https://mp.weixin.qq.com/s?__biz=Mzg4OTc5MjkwNQ==&mid=2247483688&idx=1&sn=87bfa6123b04df611c8afae666007ebf&chksm=cfe731cef890b8d8fee9860fe95784ff81d728d7e385e04bd8fd8b28e4774dea577aea051b09¬replace=true#rd
[原来我们数据库用的比较多的,就是数据结果检查,测试一些数据准备,性能测试造大量数据。]
[测试执行到的结果,我们需要通过sql语句 select来查找数据库对应的表,看看数据库信息跟我们执行的结果是否一致,比如:生成申请借款后,我们会去数据库里面去检查下,数据库中数据是否跟申请订单数据一致。]
[我们在测试执行时需要做一些测试数据准备,我们就用 insert into输入数据或(者update set修改数据),我们需要到数据库查看有没有相关记录保存,保存的数据跟我们输入或者修改的记录是否一致;比如:原来我们一个初审功能里面有个分页功能,测试分页功能,需要100条数据,我们就通过数据库操作添加100,可以用 insert into。也可以用脚本实现,或者存储过程]
[还有在做性能测试时,模拟用户场景时需要用到大量的数据,这时就需要我们到数据库中制造大量的数据出来。比如说,测试充值,需要大量用户数据,充值表中大量数据,比如10W条数据,我们就用存储过程去造。]
delimiter∥
create procedure存储过程名(n int)
BEGIN
declare i int default 0;
while i <= n do
Insert into表名 values(值1,值2...)
set i=i+1;
end while;
end∥
delimiter;
cal存储过程名(数据量(n));
mysql、SQL Server、Oracle、Sybase、DB2等
MySQL是开源免费的;
SQL Server是由微软公司开发的关系型数据库管理系统,一般用于Web上存储数据;
Oracle数据的大量性数据的保存的持久性;
Navicat,数据库版本 mysql 5.6,端口默认是3306
左连接:以左边的表(employ)为主,显示左边表列的全部数据,如果右边表没有对应的数据,
则为NULL
右连接:以右边的表(student)为主,显示右边表列的全部数据,如果左边表没有对应的数据,
则为NULL
MySQL索引的建立对手 MySQL的高效行是很重要的,索引可以大大提高MySQL的检素速度
缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 INSERT、
UPDATE和 DELETE,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件,建立索引会占用磁盘空间的索引文件。
索引份分单列索引和组合索引,单列索引,即一个索引只包含单个列,一个表可以有多个单列素引,但这不是组合素引,组合索引,即一个索引包含多个列。
主键索引 PRIMARY KEY,唯一索引 UNIQUE,普通素引 INDEX
组合索引INDEX,全文索引 FULLTEXT
是一个条件查询,一般是跟着分组以后,比如
select title, count(title) as t from titles group by title having t>=2;
having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合
Select * from user limit 0,100
Select * from A,b where a,id=b,id
1.in()适合B表比A表数据小的情况
2.exists()适合B表比A表数据大的情况
原来我们做的一个功能,生成订单,在数据库中没有添加创建时间,导致后续根据时间点,去查询订单的时候,找到对应的数据
我原来的公司对于抓包这块,在App的测试用得比较多。我们会使用fiddler抓取数据检查结果,定位问题,测试安全,制造弱网环境;
如:抓取数据通过查看请求数据,请求行,请求报头,请求正文,信息是否正确去检查结果,
如果是以4开头的话就有可能是前端问题一般我会到前端排查,以5开头就有可能是后端
问题我就会到后端排查;如果是200的话,就需要检查请求行,请求报头,请求正文是否正确,
如果请求错误就是前端问题,如果请求没有问题,那就是后端问题,看后端问题服务器运行日志,
是否包含 exception,error或根据时间点去看日志。
测试安全,抓取数据查看用户的感敏信息有没有进行加密显示,还有就是把发送请求的数据篡改是否成功。
弱网环境,诵过 fiddler工具选择 Customize Ruels...(Ctr+R)调出定义脚本编辑器找到
“if (m_SimulateModem)”设置上行下行网速,然后把
Rules-> Performance-> Simulate Modem Speeds选中生效
常用抓包工具有:浏览器中F12, fiddler, Charles(青花瓷), wireshark
1、设置 Tools=> Option=>勾选 Decrypt Https traffic=>勾选 lgnore server
certificate errors(unsafe)
2、打开https网页就可以成功抓取了
3、还可以 Fiddler添加过滤器(Filters):只抓取指定iP的数据
1、开启 Fiddler的远程连接
Fiddler主菜单Toos- Options-> Connections>勾选 Allow remote computers to
2、重启 Fiddler,更新刚开启的远程配置
3、然后手机和电脑需要在同一个局域网,抓取http手机设置代理就可以,要抓取https包,手机需要安装一个fiddler证书
1、fder工具生成一个证书,发送手机上面安装
2、通过手机浏览器打开安装证书界面192.168.3.197:8888
ip地址是用 fiddler工具的电脑的ip地址,fiddler工具端口号的8888
3、点击下载证书,会提示,输入手机锁屏密码
4、给证书命名,名字随意,其他默认就ok
5、点击确定,安装成功,然后就可以抓取https的包了
原来我们用得比较多的协议是http和https以及tcp协议
http和https都是超文本协议,浏览器发送数据请求基本用的都是他们,不同的是https
在http的基础上增加了ssl加密协议,http的默认端口是80,http:的默认端口是443,
https收费,http免费。
tcp协议的话,作用在传输层,在发送请求前会有三次握手,是面向连接的协议,传输过程比较可靠
udp协议的话,作用在传输层,面向非连接协议,传输过程相对tcp不可靠,传输大量数据
Python自动化测试全栈+性能测试全栈+全套资料免费领取Python自动化测试全栈+性能测试全栈,全套资料-功能-接口-自动化-性能-测试开发-面试全套资料全套资料https://mp.weixin.qq.com/s?__biz=Mzg4OTc5MjkwNQ==&mid=2247483688&idx=1&sn=87bfa6123b04df611c8afae666007ebf&chksm=cfe731cef890b8d8fee9860fe95784ff81d728d7e385e04bd8fd8b28e4774dea577aea051b09¬replace=true#rd
常用:get、post
不常用:delete、put、head、option
1)get请求的参数有长度限制,post没有
2)get请求参数在url上传输,post的参数在请求正文中传输。post比get传输更安全
3)get只能接收ascall码参数,而post没有限制
4)get请求的时候,只请求一次,而post请求两次,第一发送请求头相关信息,第二次
再发送请求正文,(只有部分浏览器2次请求)
1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用
2.http是超文本传输协议,信息是明文传输https则是具有安全性的ssl加密传输协议
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
4.http的连接很简单,是无状态的;Https协议是由SSL + HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
第一次登录,发送用户信息给到服务器,服务器把用户信息保存在session中服务器响应数据给客户端,响应数据中有包含session的先关用户信息
客户端接收到服务器session信息,把session中相关的用户信息保存在cookie中
第二次登录,客户端发送请求,并携带cookie,服务端可以直接验证cookie值,如果用户已经登录过,可以免登录
在网站中http请求是无状态的,也就是说即使第一次和服务器连接后并且登录成功后,
第二次请求服务器依然不能知道当前请求是哪个用户,cookie的出现就是为了解决这个问题,
第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的 cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB,因此使用 cookie只能存储一些小量的数据。
session和 cookie的作用有点类似,都是为了存储用户相关的信息,不同的是,cookie是存储在本地浏览器,而session存储在服务器.存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的
(1)参考模型:只是提供给生产商或者软件开发商参考的模型
(2)开发系统互联
正在上传…重新上传取消
(3)有七层
有四层:
应用层 (telnet.stp.htp),传输层( CP UDP)、网络层,中数据链路层
(1)TCP面向连接、而UDP面向非连接
(2)TCP相对UDP更可靠
(3)TCP应用场景,用于传输少量数据,而UDP用于传输大量数据
(4)TCP传输的数据相对UDP慢
(1)客户端给服务器发送报文syn=1和序列号Seq=x
(2)服务器接收到客户端的请求,服务器响应syn=1,ack=x+1,seq=y
(3)客户端接收到服务器的响应,返回给服务器,ack=y+1,seq=z
(1)请求信息
1)请求行:请求方式、请求地址http版本1.1
2)请求头
HTTP消息报头包括普通报头、请求报头、响应报头、实体报头
Cache- Control:no- cache 缓存
Connection:close/keep-aive 是否关闭或者保持连接
Accept-Charset:ios-859-1 字符集
Accept-Encoding:gzip.deflate 编码格式
Accept-Language:zh-cn 语言
Authorization:服务器授权验证
Host:主机
User-Agent:
Location:重定向
Server:服务器版本信息
Content-Encoding:实体报头的编码格式
请求正文
data
(2)响应信息
1)状态行:http版本、状态码、状态信息
2)响应头:跟请求头一样
3)响应正文:
1xx需要继续发送请求
2xx成功
3xx需要重定向
4xx客户端请求数据有误
5xx服务器响应错误
6xx服务器响应错误
常见状态码:400、404、200、500、302、501、504
101服务器根据客户端的请求切换协议,只能切换到更高级的协议,
例如,切换到HTTP的新版本协议
102(代表处理将被继续执行)由 WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行
2开头这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
200(成功)服务器已成功处理了请求,通常,这表示服务器提供了请求的网页
201(已创建)请求成功并且服务器创建了新的资源
202(已接受)服务器已接受请求,但尚未处理
203(非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源
204(无内容)服务器成功处理了请求,但没有返回任何内容
205(重置内容)服务器成功处理了请求,但没有返回任何内容
206(部分内容)服务器成功处理了部分GET请求
207(代表之后的消息体将是一个XML消息),并且可能依照之前子请求数量的不同,包含
系列独立的响应代码
3开头(请求被重定向)表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。
300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。
301(永久移动)请求的网页已永久移动到新位置.服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置
302(临时移动)服务器目前从不同位置的网页响应请求,
但请求者应继续使用原有位置来进行以后的请求
303(查看其他位置)请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码。
304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容
305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,
还表示请求者应使用代理。
307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
4开头(请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
400(错误请求)服务器不理解请求的语法
401(未授权)请求要求身份验证,对于需要登录的网页,服务器可能返回此响应
403(禁止)服务器拒绝请求
404(未找到)服务器找不到请求的网页
405(方法禁用)禁用请求中指定的方法
406(不接受)无法使用请求的内容特性响应请求的网页
407(需要代理授权)此状态代码与401(未授权)类似,但指定请求者应当授权使用代理
408(请求超时)服务器等候请求时发生超时
409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息
410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。
411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求
412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件
413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力
414(请求的URL过长)请求的URL(通常为网址)过长,服务器无法处理
415(不支持的媒体类型)请求的格式不受请求页面的支持
416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态代码
417(未满足期望值)服务器未满足期望请求标头字段的要求
5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误
这些错误可能是服务器本身的错误,而不是请求出错
500(服务器内部错误)服务器遇到错误,无法完成请求
501(尚未实施)服务器不具备完成请求的功能,例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应,(比如:nginx里
设置了反向代理,自己代理给自己,形成了死循环,造成大量的访问日志,每秒上万)
503(服务不可用)服务器目前无法使用(由于超载或停机维护),通常,这只是暂时状态。
504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求
505(HTTP版本不受支持)服务器不支持请求中所用的HTTP协议版本
404 Not Found
请求失败,请求所希望得到的资源未被在服务器上发现,没有信息能够告诉用户这个状况到底是暂时的还是永久的,假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址,404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下,出现这个错误的最有可能的原因是服务器端没有这个页面。
Accept-Charset:浏览器能够显示的字符集
Accept- Encoding:浏览器能够处理的压缩编码
Accept-Language:浏览器当前设置的语言
Connection:浏览器与服务器之间连接的类型
Cookie:当前页面设置的任何 Cookie
Host:发出请求的页面所在的域
Referer:发出请求的页面的URL
User-Agent:浏览器的用户代理字符串
Content-Type:请求数据的格式或者是类型
(jmeter版本)
首先开发会给我们一个接口文档,我们根据开发给的接口文档,进行测试点的分析,主要是考虑正常场景与异常场景,正常场景,条件的组合,参数的格式校验等价边界值;异常场景,多一个参数,少个必填参数,参数为空;接着编写测试用例,用的 Jmeter工具去运行,创建线程组,建立http请求,输入测试用例,请求参数,建立察看结果树,运行,看返回的结果,是否跟接口文档里面要求的返回结果一致,其他用例,值需要修改里面的参数,请求地址这些信息。
举例说明:(不要登录跟注册)
比如说原来我们做一个申请借款的接口,对接口进行测试分析,考虑正常场景与异常场景,正常场景,考虑不同参数组合,比如说,不同借款方式,还款期限,还款曰期,借款的利率等参数组合;也要测试每个参数格式校验,异常场景,:多一个参数,少一个必填参数,比如没有借款的利率,参数为空的,比如借款标题为空,编写测试用例
在 jmeter中执行,填写参数,更地址就ok,发送请求
(python + request)
原来我们接口主要是用的 python + requests去运行的
首先,开发会给我们一个接口文档,拿到接口文档后,我们就进行测试点的分析,
考虑正确场景,条件的组合,
异常场景,多一个参数,少一个参数,参数为空的情况
比如原来我们做一个生成订单的接口,考虑正常场景,异常场景
正常场景就是不同的订单类型,订单金额,能不能申请订单,每个参数的格式类型的校验,
异常场景,多一个参数,少一个必填参数的时候,还有参数为空的情况
原来我们是用 python + request去做的接口
首先,导入 request包
建立一个 headers,保存请求头的信息,因为订单请求方式是post类型,数据格式是form表单格式,我们把数据保存到data的字典里面
这个时候我们还需求登录的 cookie值跟登录后产生的 token值
我们会去通过动态关联去获取登录的 token跟 cookies,
cookies值的话,我们是直接调用登录返回的 cookies、token值的时候,我能是通过导入re模块,通过正则表达式去提取
当参数, headers、cookies输入完成以后,我们就发送请求,打印返回结果,检返回结果是否跟我们测试用例一致
当运行其他测试用例时,我们去修改data里面的参数就行,在发送请求
有的请求时htps协议的时候,我们发送请求的时候还会very= false去忽略掉证书验
证对应多个接口调用 cookies我们会用到 session去保存接口发现比较多的问题,就是格式校验这块
比如说我们提交订单,订单数据没有显示,订单格式也没有显示,输入字母,汉字都可以
订单类型为空,也会生成订单成功
我觉得接口可以发现接口更多的bug,还可以提早进行测试,提高测试的质量
另外两种问法:上个接口的返回值是下个接口的请求参数,这种如何处理?动态关联有没有了解过?
这个涉及到动态关联,首先要搞清楚后一个接口需要用到上一个接口的什么数据,例外要看数据是在哪里取的,是在head还是在body里,然后如果要取的数据是json格式我会在发请求用json提取器去取这个数据,如果是其他格式的就用边界提取器或正则表达式去取数据
就拿我当时做的那个下单接口来说吧,因为下单接口需要先登录,需要用到登录接口的
cookies来做鉴权,首先就是把登录接口调试通过,然后在登录接口的http请求中添加一
个边界值提取器或者也可以用正则表示式提取器去提取登录接口的响应头中的 cookies值
然后在下单接口中需要添加一个http cookies管理器,在http cookies管理器中引用登录
接口提取出来的 cookies,这样就可以了
如果是不同的线程组的话,那在登录接口中还得添加一个 Beanshell取样器,在
Beanshell取样器中,利用函数助手中的 SetProperty()函数把提取出来的 cookies设置为全局变量,然后在下单接口的http cookies管理器中利用函数助手中的Property()函数引用登录接口中设置的全局变量,这样就可以了。
例外两种问法:接口测试的价值,意义?为什么要做接口测试?
主要就是验证后台服务端的业务逻有没有问题,提高测试的效率
①越底层发现bug,它的修复成本是越低的
②前端页面修改频繁情况下,接口测试不受页面元素改变而影响
③检查系统的安全性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是
通过接口可以传入-1元
④如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口自动化测试可以提高测试效率
⑤接口测试相对容易实现自动化持续集成,且相对U自动化也比较稳定,可以减少人工,回归测试人力成本与时间,缩短测试周期
1,首先分析开发给到的接口文档
2,接口文档分析完成,编写测试用例
3,然后借助接口测试工具去测试执行测试用例
4,发现bug提交bug,并跟进bug修复
其实这两者测试的侧重点是不同的,接口因为没有界面,更多考虑后台服务器对请求的,处理逻辑问题,业务交互,检测的是后台“容错机制”是否完整;
而ui更多会去关注页面展示,数据转换,界面排序这些功能,当然也会后台数据处理的问题,ui测试其实已经包含了接口测试。系统功能的用例更全面,不仅有界面的,也有业务功能用例,还有其他用户场景的用例功能入口用例,流程用例,而接口测试主要根据各种入参场景来设置用例。
首先要对于每个要测的接口都要先搞清楚这个接口的功能,它的作用是什么,熟悉这个业务功能需要用到什么协议,请求方式是什么,接口有哪些参数。对于每个参数的作用都要搞清楚,像数的类型,是否有约束限制,是否为必填的,长度,其他的限制等等,如果两个参数之间有关联我们还要考虑参数的组合场景,对于参数不理解的,一般都会跟开发沟通下,然后考虑返回数据的类型,返回数据中的返回码和返回信息是什么,通过以上几个点去提炼测试点,设计用例。
参数约束——长度、必选项、格式、数据类型
业务场最——正确的业务场景;错误的业务场景;异常场景:服务器空间不足
组合场景——相互依赖:手机和验证码、用户名和验证码;
相互排斥:二选一当然还有边界值等价类等等
Jmeter测试流程,步骤如下:
创建 jmeter线程组一添加HPPT请求-输入协议-域-端口-路径-编码-请求方式-请求参数-启动
Jmeter测试流程:
先需求,再根据需求写测试点转换成测试用例,根据测试用例编写测试脚本;执行测试脚本;
提交BUG,跟踪BUG
接口文档一般两种形式的,要不就是word版本的要不就是htm的形式,具体内容
1.URL(接口地址)
2.接口功能
3.请求方式:post
4.请求参数,以及接口中每个参数的详细说明,类型,是否为必填,约束条件等等
5.响应数据及格式,返回码,返回码解释等等
一般有需求就会做,后台的接口开发好,就可以开始测。例外,如果增加了新需求,也要做接口测试,还有就是开发对后台的接口做了修改,交互逻辑发生变化,我们也要重新对接口进行测试。
我们主要是根据入参情况,去看接口的返回值,对于返回值,我主要关注的几个点:1.状态码
2.提示信息3.返回数据的具体内容。根据接口文档的说明去检查这个3个点是否满足接口需求文档,4.有些如果要检查数据库的,就连接数据库获取数据与返回的数据做对比。
如果不满足就是有问题,如果满足则通过,如果有Bug我们会先大概分析下,是什么原因,
并进行复测,如果还是有问题,提交Bug给开发,让开发修复,之后再回归测试
接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点测试的重点,
是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等
1、项目处于开发阶段
2、有接口需求文档,开发已完成联调,功能测试展开之前
3、专项测试:参数约束测试,业务场景测试,测试接口请求响应时间(性能)
4、版本上线前,进行整体回归测试,查看接口是否有异常(如404等)
1,需要第三方接口的,接口文档
2,发送请求到第三方接口,检查第三方接口返回的数据是否正确
3,不正确的时候,要跟第三方接口联调,看是请求问题,还是第三方接口返回数据有误,
这个我们公司的第三方接口,我们都是打通的,比如电商,我们通过调用微信接口等等,都是打通的,比如要测试下单第三支付,我们自己开店,收款设置我们自己的账号,然后通过商品设计1分钱,去测试的。
如果不打通的话,基本也只能抓包,主要保证我们发送出去的数据符合需求文档就行,然后真正的上线之前,我们会在预生产环境做一个联调测试,把各自系统连在一起,做一个联调测试没有问题了
我们就可以上线,基本就这么做的
联调测试怎么做的:
其实联调测试就是数据拉通测试,两个子系统,连在一起,形成一个完整的系统,然后从上游下数据,下游接到数据看传过来的数据是否符合下游的系统要求然后下游做了操作,把数据返回给上游,通知上游说数据返回了,上游看返回的数据是否符合要求,如果没有问题,就这个数据就拉通成功这个都是按照用例来执行,上游和下游一起出一份用例,两边都评审通过,然后按照测试用例执行,每条用例测试通过那么联调测就完成了。
(1)通过用户和密码,auth鉴权
(2)通过 cookie和 session
(3)通过 token
(4)通过sign签名
现在app一般是通过 token鉴权,有些是通过把 token放在请求头里面,有些是通过 singn签名这个字段放在body里面去鉴权的,一般的web是通过 session去鉴权的
常见的媒体格式类型如下:
text/html:HTML格式
text/plain:纯文本格式
text/xm:XML格式
Image/gif:gif图片格式
mage/jpeg:jpg图片格式
Image/ng:png图片格式
以 application开头的媒体格式类型
application/xhtm + xml: XHTML格式
application/ml:XML数据格式
application/atom + xml: Atom XML聚合格式
application/json:JsoN数据格式
application/pdf:pdf格式
application/msword:Word文档格式
application/octet-stream:二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded:encoded: