接口测试笔记
Apache - Jmeter 安装方法:
准备好Jmeter安装包,解压到D盘jmeter文件夹
此软件依赖于jdk
打开环境变量,新建系统变量JMETER_HOME,路径为自己jmeter的bin文件夹所在所在 路径。如:D:\apache-jmeter-3.0(不含/bin)
配置CLASSPATH变量,路径后增加:
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;
找到jmeter的bin目录jmeter.bat双击,然后将其发送到桌面快捷方式

接口测试理论:
什么是接口测试?
接口测试是测试系统组件之间数据传输的一种测试,主要检测系统与系统之间或系统与 内部组件之间的数据正确性。
接口测试的原理是什么?
接口测试的原理就是模拟客户端向服务器发出请求,服务器接收请求之后,对请求做出 处理并把响应结果返回给客户端。
接口文档包含哪些内容?
(1)请求地址
(2)请求方式
(3)请求参数
(4)参数详解(每个参数代表什么意思,如果没有详解就去问开发)
(5)响应结果
(6)结果详解(响应结果中每个参数所代表的意思)
常见的接口协议类型有什么?
最常见的是http接口和https接口,除此之外还有webservice接口、dubbo接口等
常见的接口测试工具
Jmeter(开源的,接口/性能)、postman、soap UI、load runner(接口/性能)
典型接口的例子:
(1)物流订单信息,一般物流信息都是通过各大物流公司的接口获取到的
(2)通过携程等APP订不同航空公司的机票,机票信息一般都是通过各大航空公司的接获取到的。
(3)12306订票支付的时候,使用微信、支付宝、银行卡支付都是调用的接口
(4)软件实名认证时验证姓名身份证号是否匹配就是调用公安系统的接口
(5)绑卡时需要输入姓名身份证号银行卡号也是调用的银行系统的接口。
什么时候开始接口测试?
一般情况下在单元测试之后,进行集成测试的时候我们进行接口测试,或者在功能测试之前我们会进行接口测试。
一般问有没有做过集成测试,可以理解为有没有做过接口测试
为什么要进行接口测试
(1)现在很多系统都是前后端分离的,从安全层面上来说,只依赖前端进行限制已经完全 不能满足安全需求,因为绕前端太容易了,这种情况下我们需要去测试接口。
(2)因为接口中传输的是数据,所以我们要测试数据的正确性
(3)接口测试能够覆盖功能测试覆盖不到的点,而且接口测试效率更快,覆盖相对更全面, 结合功能测试能够更好的提高测试覆盖率。
接口测试的流程:
(1)首先我们要了解需求,熟悉业务场景
(2)然后根据需求文档,接口文档以及业务场景来编写测试用例。
(3)再进行测试用例的评审,征求开发、测试、产品的意见对用例进行完善
(4)再然后准备测试数据,测试工具以及测试用例
(5)最后执行接口测试,提交bug并验证bug测试完毕后发送测试报告并确定是否能上线
如果没有接口文档我们如何去测试接口?
我们会通过抓包,先把这个接口的信息抓到然后再去测试这个接口
Jmeter使用:
步骤:
抓包
打开jmeter
编辑里
添加 threads users 里 线程组
添加 sampler 里http请求
添加 监听器里 查看结果树
打开http请求
设置请求类型
输入(拷贝)路径 参数
查看结果树
点击启动
点击否
设置展示类型
(HTML)
查看结果
一、Jmeter测接口的详细步骤:
第1步:右键点击测试计划选择 添加- threads(users)-线程组
 第2步:右键单击线程组,选择添加- sampler - HTTP请求
 第3步:右键单击线程组,选择添加-监听器-查看结果树 
第4步:打开fiddler,在抓到的登录接口上,右键单击那条地址,copy-just URL复制网址
第5步:打开jmeter的线程组-HTTP请求,将复制的地址粘贴到路径中
第6步:打开打开fiddler,复制表单数据,然后打开打开jmeter的线程组-HTTP请求,在 Parameters中点击下方的Add from Clipboard就可以将复制的表单数据自动粘贴上
 第7步:在HTTP请求中方法选择POST,点击上方工具栏播放按钮运行,跳出的弹窗选择否
 第8步:查看结果树,然后在左下角将TEXT改为HTML,然后点击HTTP请求查看相应数据 
二、Jmeter抓包
(1)浏览器配置代理,主机127.0.0.1 端口:8888
(2)Jmeter在工作台右键添加-非测试元件- HTTP代理服务器
(3)点击HTTP代理服务器,将端口改为8888,IP设置为127.0.0.1目标控制器选择测试 计划-线程组,然后点击启动
(4)点击下方启动按钮,就可以抓包了
录制脚本(基于抓包)
配置好浏览器代理,并在Jmeter - 测试计划中添加 - Threads -线程组,在线程组中添加 - 配置元件 - HTTP Cookie管理器,在线程组中添加 - 监听器 - 察看结果树, jmeter - 工作台- 添加- 非测试元件 - HTTP代理服务器。然后设置HTTP代理服务器端口号8888和HTTPS Domains为127.0.0.1,目标控制器改为测试计划>线程组。然后点击启动(可以正常抓包)
清空之前的抓包数据。然后在浏览器输入需要录制脚本的网址,从第一步操作到最后一步,然后关闭浏览器代理,停止Jmeter中的HTTP代理服务器。
在抓包中将非本次录制脚本主机的其他网页删除。然后就可以修改操作步骤中的参数,点击工具栏启动按钮(绿色播放键),出现弹窗,选择是保存脚本,选择否不保存脚本。然后在结果树和网页中查看效果。
HTTP请求默认值的使用(元件)
1.在线程组中右键添加 - 配置元件 - HTTP请求默认值
2.然后在HTTP请求默认值同级目录下添加 - sampler - HTTP请求(可以添加多个)
3.如果一次测试需要测试HTTP的服务器IP或路径相同的多个接口时,只要在HTTP请求默认值中填写IP和路径,其他的HTTP请求中就可以直接默认成HTTP请求默认值中填写的IP和路径,如果填写就按照填写的内容执行。
4.如果需要换机器(IP测试),那么只需要在HTTP请求默认值中修改就可以了,无需每个HTTP请求都修改,可节省很多时间 
http cookie管理器(元件)
(1)录制脚本的时候可以自动保存cookie,保存登录状态
(2)也可以手动把cookie维护在cookie管理器里边去保持登录状态
用户定义的变量(元件)
我们可以把一些经常变动的参数,维护在用户定义的变量里面
当下面的http请求需要使用这些参数的时候我们直接用${变量名}
去引用用户定义的变量里面的变量就可以了。
正则表达式提取器
(1)在某个HTTP请求下右键 添加 - 后置处理器 - 正则表达式提取器,然后引用名称自己新命名,正则表达式复制源代码(中包含这个变量值的一行代码在察看结果树将查看类型从HTML改为Text可以查看源代码,这行代码在源代码中必须是唯一的,如果不唯一则无法定位要取哪个的值)将变量值改为括号点加问号(.+?)其他的代码比如空格一定不要删除。
(2)在另外一个HTTP请求中就可以${新的命名}调用正则表达式中提取的值。如下图
  如何测试两个相互依赖(关联)的接口/怎么使上个请求的返回结果作为下个请求的参数
我们可以使用正则表达式提取器,把正则表达式提取器放到第一个请求的下面,然后把想要提取的内容用(.+?)去代替,然后起一个变量名,当下一个请求(同级)需要调用这个返回结果的时候就直接在请求的参数值里面用${变量名}去引用就可以了。
**${变量名****}****学名叫做参数化****(.+?)中****.代表匹配任意字符串****+代表匹配一次或者多次****?代表找到之后就停止****$1$ 代表匹配第一个模板****$2$代表匹配第二个模板****…****以此类推****匹配多个的时候用逗号隔开$1$,$2$**
七、随机函数Random/Random String (1)_Random 生成随机数字 
(2)_Random String 生成随机字符串
8代表随机生成8位数,ABCDEFabcdef123456代表范围在ABCDEFabcdef123456中 
(3)复制生成的字符串,操作查看结果
GET请求
抓到一个GET请求,然后在jmeter测试计划中右键添加线程组,然后在线程组中添加一个HTTP请求,然后在HTTP请求中改参数,请求方式为GET,服务器名、路径输入上,参数直接跟在路径后以?分割或者将参数放在parameters中
CSV(读取*TXT*中的测试用例)批量运行用例加响应断言**
断言:判断预期结果是否与实际结果一致
(1)在测试计划中新建线程组,然后在线程组中添加-配置元件-CSV Data Set Config
(2)在桌面(自己选择路径)新建一个txt文件,输入参数:
如lee011,lee011@wo.cn,000000,13133132532,注册成功(每个变量值间使用,隔开,每行 代表执行一次的所有参数,注册成功是预期结果,在下方在变量名中命名为duanyan)
(3)在CSV Data Set Config中将filename填写自己写的TXT文件的完整路径加文件名
Variable Names填写文件中变量值相对应的变量名 
(4)新建一个HTTP请求,填写参数,参数中使用${变量名}调用CSV Data Set Config中的变 量名 
(5)在HTTP请求下级目录添加-断言-响应断言。然后在响应断言的要测试模式中添加
${duanyan} 其中duanyan为CSV Data Set Config中的一个变量名,即TXT文件中变量值 中的预期结果那项的变量名(预期结果是根据接口文档要求来写的)。模式匹配规则选 择包括。线程组中修改线程数为TXT中用例的个数  (6)在线程组中添加-监听器-察看结果树。然后运行在结果树中查看结果,如果实际运行 结果与预期结果一致则显示绿色通过不一致代表运行结果与接口文档规定的预期结 果不符合(即出现BUG),显示
数据库批量对比JDBC Connection Configuration、JDBC Request加循环控制器
Jmeter中函数里边套函数(如${name_${M}})系统无法识别,需要使用V函数
(1)将数据库配置jar包放在jmeter的bin目录: D:\apache-jmeter-3.0\bin\mysql-connector-java-5.1.7-bin.jar(Mysql驱动jar包)
(2)打开jmeter的测试计划,点击浏览,然后将jar包找到选中。 
(3)在测试计划中添加线程组,在线程组中添加-配置元件-JDBC Connection Configuration 在JDBC Connection Configuration中配置变量名称Variable Name,数据库URL(数据库 连接)
jdbc:mysql://192.168.2.2:3306/test(mysql的固定格式),
JDBC Driver class配置为:com.mysql.jdbc.Driver(也是固定格式)以及Mysql的账号密码: 
(4)在线程组中添加-Sampler-JDBC Request,在其中设置变量名Variable Name(需要与JDBC Connection Configuration中的变量名一致,因为涉及到互相调用)然后在SQL Query中 输入查询语句,查询数据库表中我们需要调用的几列资源(通过字段名),然后在下方 Variable Name中自己给查询的资源列设置变量名
(5)在线程组中添加-逻辑控制器-循环控制器。在循环控制器下级目录添加-配置元件-计数 器,在计数器中配置技术参数以及引用名称,启动为1代表从查到的第一条数据开始 
(6)循环控制器下级目录中添加HTTP请求。填写参数,参数中需要调用Sampler-JDBC Request中定义的变量以及计数器中的引用名称M,因为需要两次调用${xingming_${M}} 代表引用数据库中的xingming列中的第M行。系统无法解析,需要用到函数助手中的 V函数,将两次调用改为${_V(xingming${M}) 
 (7)在线程组中添加-监听器-察看结果树,然后点击运行查看最后的运行结果
最后实现结果:调用数据库中的姓名和电话号码来批量注册14次账号
Cookie元件(维护登录状态)
(1)在测试计划中添加线程组,线程组中添加HTTP cookie管理器HTTP请求察看结果树
(2)在火狐中登录,然后浏览器打开F12找到cookie,然后将参数(名称、值、域、路径) 复制,将复制的参数填入到cookie的里

 (3)在网页中加入购物车,然后通过抓包抓到接口。将参数信息填入HTTP请求中
(4)点击运行,然后在网页中查看效果。
HTTP信息头管理器*/*添加图片
(1)在jmeter中添加线程组,线程组中添加HTTP信息头管理器、HTTP请求、察看结果树。
(2)浏览器中打开页面留言,然后使用工具抓包获取留言成功的接口,复制参数,去其他的只剩参数名称和值。将图片那两行参数删除。然后打开Files Upload将图片那两行信息的参数名称和类型添加到Files Upload的参数名称和MIME类型内。文件名称填写自己电脑上图片位置的完整路径。如:C:\Users\Administrator\Desktop\test.png。然后将HTTP请求中Implementation改为HttpClient3.1,方法改为POST,并勾选Use multipart-data for POST
 (3)在fiddler中抓取留言页,然后打开Inspectors-Headers右键单击其中内容选择复制全部 信息头(Copy All Headers),然后在HTTP信息头管理器中将复制的全部信息头添加到参 数中
(4)点击运行查看结果
测HTTPS方法
将HTTP请求中的协议改为https 端口号改为443
Postman安装
先安装.Net4.5,然后安装postman
Postman使用
Postman主要用来测试接口是否可用,使用断言来判断通过的数量以及不通过的数量
在postman中输入网址,参数、tests点击send查看结果。