接口测试
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。接口测试就是功能测试,没太大区别。常见的接口类型:webservice接口和http api接口
1.webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
2.http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
现在大部分都在用http api接口, 1)get直接在浏览器上就能调用,不用借助其他工具。get在url没有长度限制,在从前浏览器技术不成熟时是有限制的。 2)get用来向服务端获取数据的,post向服务端发送数据的 。get使用url或Cookie传参,post数据放在body里面
Postman接口测试
1.get请求方法
1.1直接填入发出(请求url后添加参数方法,url+?+参数=值,多个参数间用&连接)
1.2 添加header信息,点击headers,在key,value填入对应信息,再发出即可
2.post请求方法
2.1参数要写在body里
2.2入参是json类型,则在raw输入
2.3添加cookie,value是从登陆获取接口签名
2.4上传文件,图中位置,从test选成file
jmeter接口测试
需要先安装JDK,并且配置环境变量
1.线程组,添加及介绍
首先需要添加线程组
①线程数:并发数量
② 指在某秒内启动,启线程,一般写0就行了
③循环次数:想要循环多少次就写多少
④调度器:使用时需要勾选循环次数的永远
2.HTTP请求,添加及介绍
在线程组下添加HTTP请求
①名称:随意更改,什么接口请求就可以改成什么名称
②服务器名称或IP:
服务器名称
IP例如130.162.3.108 需要填端口号
③方法:什么类型请求方法就选什么
④路径:
⑤content enconding:中文时填入utf-8,有助于识别中文乱码、???等情况
⑥parameters:写参数用
⑦body data:入参是json类型时在此输入
⑧files upload:传输文件用
3.查看结果树,查看返回结果用的,可以放在线程组下,也可以放在http请求下
4.HTTP请求-操作
①简单参数,get请求方法
②简单参数,post请求方法
③post请求方法,入参类型为json
④需要cookie,在请求下添加,
名称:用户名
值:接口签名
域:请求里的服务器名称
⑤添加header
信息
⑥上传文件
5.关联(正则表达式、[email protected] - JSON Path Extractor)
①[email protected] - JSON Path Extractor使用方法
名字随意起
jsonpath expression:一级一级写,用“.”分割,开头$,如图
替换的值就为${sign}
②正则表达式
名字,缺省值随意起,缺省值可为空
模板匹配数字固定格式
其中“(.*)”用来匹配任意长度的除换行符以外的字符
替换的值就为${123}
6.参数化
①CSV Data Set Config
filename:文件路径,win10,放在bin目录下
variable names:名字随意,多个元素用逗号隔开
belimiter:多列时用什么符号分隔
recycle:是否要循环读取
stop thread:参数文件读取完是否继续执行
sharing mode:1.all threads在所有的线程组生效,2.current thread group:当先线程组生效
②函数助手对话框
${__time(yyyyMMddHHmmSS,)}
生成的加入参数值中
③用户定义的变量
名称随意
值为想要替换的数据
替换的值就为${123}
7.连接数据库
①在测试计划下添加数据库连接驱动包
②添加JDBC连接配置
JDBC连接配置与JDBC请求名称要一致
③添加JDBC请求,添加后可直接进行数据库操作
callable:可以用增删改查
select:只能做查
8.断言
9.中文乱码的解决方法
① 当响应数据或响应页面没有设置编码时,jmeter会按照jmeter.properties文件中,sampleresult.default.encoding设置的格式解析
test格式打开jmeter.properties,搜索sampleresult.default.encoding,改为UTF-8,并去掉#
②请求中的content encoding填入UTF-8
③数据库URL后加&characterEncoding=UTF-8
SoapUI接口测试---soap
SoapUI是一个开源测试工具,通过soap/http来检查、调用、实现Web Service的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。SoapUI可以快速创建和执行自动化功能、回归、合规和负载测试。SoapUI 基于Java 开发,支持多个平台,安装非常简单。SoapUI是开源版,SoapUI Pro是商业非开源版本。
SoapUI工具常用做两种请求接口的测试,分别是get请求和post请求。
soapui是接口测试工具,SoapUI还可以对web service进行功能上和性能上的测试。工具安装很简单, 使用步骤主要包括:新建项目,添加测试套件、测试用例、修改参数、运行、添加断言
使用SoapUI进行接口测试一般不需要自己去拼报文,通常会给webservice的地址或者导入wsdl文件, SoapUI即可获取到webservice里的所有接口和报文,再直接填入参数调用,能看到返回报文就行了
SoapUI是一个开源测试工具,通过soap/http来检查、调用、实现Web Service的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。
SoapUI是一个自由和开放源码的跨平台功能测试解决方案。通过一个易于使用的图形界面和企业级功能,SoapUI让您轻松, 快速创建和执行自动化功能、回归、合规和负载测试。在一个测试环境,SoapUI提供完整的测试覆盖,并支持所有的标准协议和技术。
SoapUI 基于Java 开发,支持多个平台,安装非常简单。
SoapUI下载地址:https://www.soapui.org/,下载开源版SoapUI,SoapUI Pro是SoapUI的商业非开源版本
构建项目
1.打开SoapUI软件>File>New SOAP Project,新建工程
2. Project Name 名称随意,WSDL填入webservice的地址或者导入wsdl文件,本例使用的接口是中国电视节目表WEB服务
,WSDL地址为:http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?wsdl。
构选上“Create Requests”项目会根据WSDL文件自动创建接口请求文件;构选上“Create TestSuite”就会给WSDL创建一个测试套件
3.点击OK后就已经创建好一个工程了,自动添加WSDL里面有的接口,根据Soap 的版本不同提供了两种接口,如下图所示:
接口业务:
getAreaDataSet:获得支持的省市(地区) 和分类电视列表
getTVstationDataSet:通过省市ID 或分类电视ID 获得电视台列表
getTVchannelDataSet :通过电视台ID 获得该电视台频道列表
getTVprogramDataSet :
通过频道ID 获得该频道节目列表
以上4个接口除getAreaDataSet接口不需要入参,其余三个接口是需要输入参数的,接口getTVstationDataSet的请求中“?”表示要入参,如下图所示:
若不入参,运行会出现如下所示错误信息:
运行单个请求
1.选择getAreaDataSet下的Request1,双击,点击运行按钮,就会出现右侧面板中的结果,获得到支持的省市(地区) 和分类电视列表,如下图所示:
2.选择getTVstationDataSet下的Request1,双击,把中间面板中的?替换成省市ID(areaID),点击运行按钮就会出现右侧面板中的结果,获得电视台列表,如下图所示:
3.选择getTVchannelDataSet 下的Request1,双击,把中间面板中的?替换成电视台ID(tvStationID),点击运行按钮,就会出现右侧面板中的结果,获得频道列表,如下图所示:
4.选择getTVprogramDataSet 下的Request1,双击,把中间面板中的?替换成频道ID(tvChannelID),点击运行按钮,就会出现右侧面板中的结果,获得该频道节目列表
构建测试用例
当创建好project并且导入了WSDL后,我们就可以开始创建测试用例以便开展测试了。SoapUI有多种方法添加测试用例,且可以通过Groovy或者javascript脚本来增强脚本的功能。
1.创建测试套件:选择项目“CTV”右键点击“New TestSuite”,可输入测试名(TestSuite 1),如下图所示
2.创建测试用例Test case,选择测试套件“TestSuite 1”右键点击“New TestCase”,如下图所示:
创建好之后,新建的TestCase中包含三个部分:
测试步骤:Test Steos
负载测试:Load Tests
安全测试:Security Tests
3.把请求添加到测试用例中:选择一个请求,然后右键点击“Add to TestCase”,然后在弹出窗口中选择我们刚才新建的"TestSuite 1"即可,如下图所示:
这样就已经创建好了一条测试用例,如下图所示:
4.运行测试:打开TestCase窗口,点击绿色运行按钮即可,绿色表示运行成功,运行结果在右面板下方,如下图所示:
5.增加检查点
①在测试步骤中打开服务求请求,如下图所示:
soapUI的assertion类型有
类型 |
说明 |
Schema Compliance |
|
Contains |
检查是否存在特定字符串 |
Not Contains |
检查是否不存在特定字符串 |
SOAP Fault |
|
Not SOAP Fault |
|
SOAP Response |
|
Response SLA |
检查响应时间与指定的值 |
XPath Match |
Xpath 表达式的结果是否是期望值 |
XQuery Match |
将XQuery表达式的结果与预期值进行比较 |
Script Assertion |
自己写脚本判断 |
WS-Security Status |
|
WS-Addressing Response |
|
WS-Addressing Request |
|
②点击+号,添加检查点,选择Recently used>Contains>Add,如下图所示:
③输入检查的内容,如下图所示:
④然后运行服务请求,在“Assertions”窗口中可以看到“Contains - VALID”说明检查点是有效的,如下图所示:
接口之间传递参数
getAreaDataSet:获得支持的省市(地区) 和分类电视列表
getTVstationDataSet:通过省市ID 或分类电视ID 获得电视台列表
getTVchannelDataSet :通过电视台ID 获得该电视台频道列表
getTVprogramDataSet :
通过频道ID 获得该频道节目列表
依次加入到TestCase 1 的测试步骤中去,然后组织测试获取“湖南金鹰卡通”的节目列表,具体的测试步骤为:
①获得“湖南省”的分类ID “18 ”
②获取“湖南省”类别中的“湖南电视台”ID :“98 ”
③获取“湖南电视台”的频道“湖南金鹰卡通 ”ID :“292 ”
④获取“湖南金鹰卡通”频道的节目列表
1.先将请求依次添加到用例中,如下图所示:
2.添加入参操作,用于两个服务请求接口间的交互,如下图所示:
将服务请求getAreaDataSet 结果中的“湖南省”ID“18 ”作为服务请求getTVstationDataSet 入参
创建好之后,双击,弹出如下图所示界面,输入参数值:
右侧面板上部分中输入如下代码,其中//并不是注释,只是表相对路径,(getAreaDataSet 结果)
declare namespace diffgr="urn:schemas-microsoft-com:xml-diffgram-v1";
//diffgr:diffgram/Area/AreaList[22]/areaID[1]
右侧面板下部分中输入如下代码(getTVstationDataSet 入参)
declare namespace web="http://WebXml.com.cn/";
//web:getTVstationDataSet/web:theAreaID[1]
点击运行,即可看到是否成功,成功如下图所示:
获取上述代码的方法:
上半部分从getAreaDataSet的返回参数中获取:
下半部分从getTVstationDataSet的入参中获取:
其它两个交互方法一样,稍微更改即可。
将服务请求getTVstationDataSet结果中的“湖南电视台”ID“98 ”作为服务请求getTVchannelDataSet入参
右侧面板上部分中输入如下代码(getTVstationDataSet 结果)
declare namespace diffgr="urn:schemas-microsoft-com:xml-diffgram-v1";
//diffgr:diffgram/Station/TvStation[5]/tvStationID[1]
右侧面板下部分中输入如下代码(getTVchannelDataSet 入参)
declare namespace web="http://WebXml.com.cn/";
//web:getTVchannelDataSet/web:theTVstationID[1]
获取上述代码的方法:
上半部分从getTVstationDataSet的返回参数中获取:
下半部分从getTVchannelDataSet的入参中获取:
将服务请求getTVchannelDataSet 结果中的“湖南金鹰卡通”ID“292 ”作为服务请求getTVprogramDataSet 入参
右侧面板上部分中输入如下代码(getTVchannelDataSet结果)
declare namespace diffgr="urn:schemas-microsoft-com:xml-diffgram-v1";
//diffgr:diffgram/Channe/TvChanne[4]/tvChannelID[1]
右侧面板下部分中输入如下代码(getTVprogramDataSet入参)
declare namespace web="http://WebXml.com.cn/";
//web:getTVprogramDateSet/web:theTVchannelID[1]
获取上述代码的方法:
上半部分从getTVchannelDataSet返回参数中获取:
下半部分从getTVprogramDataSet的入参中获取:
运行测试
1.整个测试步骤设置好之后,打开“TestCase 1”运行测试,全部绿色表示测试通过,如下图所示:
2.在TestCase Log中还可以看到接口之间传递的参数值,如下图所示:
3.运行结束后,再打开接口请求,可以看到请求显示的就是所传递的值,如下图所示:
4.还可以在请求中设置检查点,来检查是否通过,检查点的设置方法已在构建测试用例中介绍
get请求
在使用SoapUI工具进行接口测试时,三个步骤是必然,那就是先新建SOAP工程,然后在新建的工程中构建测试套件,再然后在构建的测试套件中构建测试用例。首先把上述三步做好,效果如下图所示:
接下来在构建的测试用例中新建用例,右键Test Steps>Add Step>HTTP Request,具体操作如下所示:
新建HTTP Request请求时,会弹出一个输入请求名的框,可自己输入请求名也可使用默认,确认后弹出对话框,本例中get请求用到的接口为豆瓣的图书接口:https://developers.douban.com/wiki/?title=book_v2#get_book 。
所以,在Endpoint中填入接口该地址,在Parameters中点+号写入Name和Value,在Method中选择该请求的请求方式,最后点击OK即可。
点击运行此请求,得到如下所示结果,需要注意的是,由于实例中接口返回的数据是JSON类型,所以要在JSON中查看。
返回的结果,可以复制到JSON解析器中解析,可以更清晰明了的查看(www.bejson.com)
post请求
本利中post请求接口使用的是禅道登录接口:http://127.0.0.1:81/zentao/user-login.html,添加post请求步骤跟上面添加get请求步骤差不多,只是参数设置不同而已,设置界面如下图所示:
在Endpoint中填入接口的地址,在Parameters中点+号写入Name和Value,在Method中选择该请求的请求方式,最后点击OK即可。
运行post请求,运行结果如下图所示:
soapui功能测试基础
自带webservice实例学习
soapUI为我们做了一个webservice的实例,并且利用soapUI的webservice模拟功能(MockService)为我们学习soapUI提供了方便。我们用的是C:\\Users\\具体的用户目录\\SoapUI-Tutorials\\Sample-SOAP-Project-soapui-project.xml。同时soapui有一个官方的教程来指导学习http://www.soapui.org/Getting-Started/web-service-sample-project.html
1.在Project上右键选择“Import Project”
2. 再弹出的选择框中浏览选择sample-soapui-pro-project.xml
3. 完成后的显示结果
4. 展开SoapBinding
从这里我们可以看到这个服务有4个Request。分别点击后能看到不同request的不同参数。
请求 |
参数 |
返回/说明 |
login |
Username Password |
Sessionid |
logout |
Sessionid |
Sessionid销毁 |
search |
Sessionid Searchstring |
Searchstring的范围: Item 1 / Item 2 /Item 3/Item 4 Item 5 / all |
buy |
Sessionid buystring |
Buystring和searchstring一样 |
在学习中利用这个服务时,可以分别点击以上的请求自己试试看。在执行前,一定要运行MockService
创建MockService
1. 创建soap project,wsdl使用: http://localhost:7890/axis2/services/HelloWorld?wsdl
2. 创建MockService,选择一个soap右键选择Generate SOAP MockService
创建好后就如下
3. 编写MockService的Response,也就是修改Response (其实说白了,做模拟就是模拟返回值,输入的参数我们当然是知道的)
将?改为一个模拟的返回值,例如我们这里改为“Bill says it is good”
4. 创建一个Request 名称为:MockRequest ,
并且关闭tomcat(为了看出是MockService在起作用,而不是原来真实的webservice起作用),启动MockService后执行MockRequest
因为这里没有用到name这个参数做任何的事情,所以无论在name参数中输入什么,都返回“Bill says it‘s good”
有关MockService的功能,官方网站上讲的很多,这里只是了解一下而已,我想除非是真正大量测试Webservice,否则对soapUI基础功能有所了解就能应付一般的webservice测试需要了吧。
soapUI测试用例
1、测试数据单一
1)新建测试套件:
增加断言:
运行结果:
2、测试数据来源于excel:
1)创建测试数据文件:testaccept.xlsx
2)选择测试步骤,添加【Datasource】
3)添加请求:
4)添加DataSource Loop,又来控制循环取数
5)增加断言:
6)运行结果
我们看到测试用例执行失败后,后面的将不会执行,而我们希望即使失败也要执行所有的测试用例,我们做如下设置:取消Abor test if an fasiled TestSteps前面的钩,再运行:
7)查看测试结果信息:
8)导出测试报告
soapUI性能测试
1、创建性能测试用例:
2)点击运行,运行结果如下:
3)参数设置说明:
4)生成性能测试统计图
应对接口地址变化
如果是没有代码能力的小白,要利用工具进行接口测试的时候,经常会遇到接口地址或者接口参数变化的问题,然后不得不在他们改了接口之后,就手动去改所有的请求链接地址和接口参数!1-5个请求,我们手动改还应付的过来!要是10多20个,我感觉内心是非常奔溃的!所以今天就特意教大家一招,防范于未然!也是做测试必须要遵守的一点:从细节做起。
Step1:导入一个项目,并点击这个项目,在公共属性模块下面,设置一个公用参数,如下图所示:
当然,这里也只是一个参数而已,你随便取什么名字都可以!但是后面这个value,一定要记住是你接口请求的IP地址和端口号!
Step2:然后点击你项目的内容,就是绿色漏斗形状的项目,双击它:
然后就会弹出一个对话,框,选中Service Endpoints这个tab项,然后看下面的第三步。
Step3:编辑你的引用,如下所示:
在这里不得不提示2点“
1)有的同学经常是在第一步的参数里面,设置URL写的是这种: http://192.168.1.14:19020,自带了 http://,然后这里引用的时候,又重复的有这个http://,所以就会报错! 因为拼接起来的地址就变成了:
http://http://192.168.1.14:19020.....这样肯定是访问失败的!
2)还有同学在引用这个URL的时候,会经常忘记前面的#号,然后就是这样的:
,也死活访问不成功!那是因为你根本没有引用正确IP地址!所以大家一定要仔细细心,该有的不能少,不该有的要去掉!
Step4:下面来看看效果
大家可以看到你对应的请求里面,地址都是引用形式的,不管是改IP地址还是接口还是改参数,再也不用一个一个去改了!你只需要动动手指,把最开始设置参数的地方,也就是第一步那里,改下参数对应的IP地址就好啦!