接口:什么是接口呢?接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。
系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行数据处理的时候都是通过接口来进行调用的。 程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。
现在我们最常用的两种接口就是webservice接口和http api接口
webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
接口测试的目的是测试接口,尤其是那些与系统相关联的外部接口,测试的重点是要检查数据的交换,传递和控制管理过程,还包括处理的次数。
接口测试是测试系统组件间接口的一种测试。
接口测试就和普通功能测试没什么区别,区别就是功能测试是在页面上点点点,在页面上输入值,提交数据看结果,而接口测试没有页面,通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果。
接口测试的必要性
一、可以发现很多在页面上操作发现不了的bug
二、检查系统的异常处理能力
三、检查系统的安全性、稳定性
四、前端随便变,接口测好了,后端不用变
接口测试流程
一、需求评审,熟悉业务和需求
二、开发提供接口文档
三、编写接口测试用例
四、用例评审
五、提测后开始测试
六、提交测试报告
接口测试的前提:测接口的话,必须得有接口文档,知道 url的请求方式 参数 以及参数的说明
接口文档至少包括:
1、接口说明 2、调用url 3、请求方法(getpost) 4、请求参数、参数类型、请求参数说明 5、返回参数说明
http://doc.nnzhp.cn/index.php?s=/5&page_id=7
为什么要做接口测试呢? 我们知道,其实接口也是app端或者说是web前端进行调用的,那我们直接在app或者web端直接测试不就好了,反正它都是调用的接口,app和web端功能测试通过了,那接口不就是好使的嘛。 真的是这样吗?说的好像很有道理,其实不然,要是真的是这样的话,那我还讲啥接口测试。 思考一个问题,假如现在在京东app上买东西,支付订单,订单金额是500元,支付的话,那肯定要调用支付接口,你在页面上操作的话,订单金额是修改不了的,那如果你想测试一下服务端有没有校验订单的金额,我想把订单金额改成5元,那在页面上点是测试不了的,这个时候我们就可以直接用接口来调用,修改一下订单金额的值,然后再发请求就可以了。 当然这只是我举个例子,接口测试当然不只是这一点原因,总的来说还是为了更好的提高我们产品的质量。
怎么来测接口-http接口
get请求:
接口请求报文拼接 1、url?param=value¶m2=value 这种是最简单的一种,问号前面是请求url,后面是请求的参数名和参数值,多个参数用&来连接 https://api.douban.com/v2/book/search?q=邹伟伟
单个参数:http://api.nnzhp.cn/api/user/stu_info?stu_name=小黑
多个参数用&符连接:
接口测试工具:Postman
简要描述:
- 获取学生信息接口
请求URL:
http://api.nnzhp.cn/api/user/stu_info
请求方式:
- get
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
stu_name | 是 | string | 学生姓名 |
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
error_code | int | 错误编码,0为操作成功 |
stu_info | object | 学生对象信息 |
id | int | 学生id |
name | string | 学生姓名 |
sex | string | 学生性别 |
age | int | 年龄 |
addr | string | 家庭住址 |
phone | string | 手机号 |
grade | string | 班级 |
gold | int | 金币 |
post请求:
还有一种post请求,入参是json串的
添加学生信息
添加学生信息
简要描述:
- 添加学生信息,这个接口是用来讲入参是json类型的
请求URL:
http://api.nnzhp.cn/api/user/add_stu
请求方式:
-
post
-
入参是json类型
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
name | 是 | string | 学生姓名 |
grade | 是 | string | 班级 |
phone | 是 | int | 电话 |
sex | 否 | string | 性别,如果不传默认为男 |
age | 否 | int | 年龄,如果不传默认为18 |
addr | 否 | string | 地址,如果不传默认为北京市昌平区 |
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
error_code | int | 错误编码,0为操作成功 |
msg | string | 提示信息 |
GET和POST请求: 如果是get请求的话,直接在浏览器里输入就行了,只要在浏览器里面直接能请求到的,都是get请求,如果是post的请求的话,就不行了,就得借助工具来发送。 GET请求和POST请求的区别: 1、GET使用URL或Cookie传参。而POST将数据放在BODY中。
get:
POST:
2、GET的URL会有长度上的限制,则POST的数据则可以非常大。
3、POST比GET安全,因为数据在地址栏上不可见。
4、一般get请求用来获取数据,post请求用来发送数据。
其实上面这几点,只有第一点说的是比较靠谱的,第一点post请求也可以把数据放到url里面,get请求其实也没长度限制,post请求看起来参数是隐式的,稍微安全那么一些些,但是那只是对于小白用户来说的,就算post请求,你通过抓包也是可以抓到参数的。所以上面这些面试的时候你说出来就行了。
HTTP状态码
1、200 2开头的都表示这个请求发送成功,最常见的就是200,就代表这个请求是ok的,服务器也返回了。
2、300 3开头的代表重定向,最常见的是302,把这个请求重定向到别的地方了,
3、400 400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404代表没有这个页面
4、500 5开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果
接口测试用例模板
1、项目 是哪个项目的
2、模块 这个接口是属于哪个功能模块的
3、用例id
4、接口名称
5、用例标题 用例是干嘛的
6、请求方式 GET/POST
7、请求url url地址
8、请求参数
9、前置条件 有依赖的时候,比如说要测登录失败3次的
10、结果验证 预期结果
11、请求报文
12、返回报文 1
3、测试结果 通过/失败 1
4、测试人员
Jmeter-http接口脚本
1、添加线程组
2、添加http请求
3、在http请求中写入接口url、路径、请求方式、参数
4、添加查看结果树 5、调用接口、查看返回值
Jmeter-http接口脚本添加header
Jmeter-http接口脚本添加header
Jmeter-webservice脚本
1、在soapui中新建已经soap项目,导入wsdl地址,获取到请求报文、SOAPAction和请求url(在soapui的raw中能找到)
2、打开jmeter新建一个线程组
3、新建一个SOAP/XML-RPC Request
4、把url、soapaction和请求报文写到soaprequest中
5、调用接口、查看返回值
Jmeter-参数化
参数化是干嘛的呢,咱们在调用接口的时候,有入参,那参数里面的值如果经常变化的话,就得每次去改了,很麻烦,这时候咱们就把需要经常变的值,改成可以变化的或者是咱们提前设置好的一些值,这样的话,调用的时候就不用每次都改它的值了。
Jmeter参数化的方式有三种
1、用户定义的变量 这种就是为了方便管理参数,只能有一个值,比如说ip地址不经常变化的
在线程组中添加一个用户定义的变量,然后写key和value就可以了,key就是这个参数的名称,也就是你在脚本里面取的值,value就是具体值了。在取参数化的值的时候,使用${name}这样去取值,name就是你取的变量名称。
2、函数生成器 函数生成器可以参照一定的规则生成数据,这样的比如说生成一些随机数
函数助手的话,可以按照规则生成一些参数,比如说随机数取当前时间,最常用的就是这两种。 随机数__Random,可以在你指定的一个范围内取随机值 取当前时间__time,如果在有一些需要传时间的情况下可以使用,日期格式是: yyyy-MM-dd HH:mm:ss 年-月-日-小时:分钟:秒 取唯一id,__UUID,这个就是每次会生成一个随机的uuid,都是唯一的
3、从文件中读取 文件读取就是事先写好一些数据,然后从文件中读取,这样的话,比如说登录接口,账号和密码都是我们事先注册好的
从文件中读取的话,三个步骤 1、读取文件 2、取文件内容里面的参数,给它一个名字 3、使用值 从文件读取的话,需要在线程组里面添加一个CSV Data Set Config,它就是做前面两步的操作的
Jmeter断言
断言是什么呢,它是用来检查返回结果对不对的。 用来验证结果是否正确,如果正确的话,就代表这个请求的返回是正确的,如果没有的话就代表这个请求的结果和我们预期的不一致,这样我们就可以通断言来检查返回结果,测试是否通过。
Jmeter关联
我们知道断言是从返回结果中检查有没有预期的值,现在有一个问题,有一个购买商品的接口,必须要先登录才能够购买商品, 那么你调用接口的时候怎么知道是否已经登录了,一般这样的都会在调用的时候传一个token的参数,服务端判断token是否过期或者token是否正确,如果正确的话,那就是登录成功了就可以买东西了。 那么这样的话,你就要先获取到token,token是从呢来的呢,肯定是从登录接口返回的,因为要先登录嘛,那这样就得先调用登录接口, 获取到token,然后把获取到的token传给购买商品的这个接口。 关联就是做这个事的,它就是获取到返回的值,然后保存起来,给别的请求使用,或者做一些其他的处理。
Jmeter操作mysql
1、导入jdbc的jar包,因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql(网上下载mysql-connector-java-5.1.7-bin.jar)
2、创建数据库连接配置,mysql的url、端口号、账号、密码
Jmeter配置mysql连接
1、添加一个JDBC Connection Configuration
2、配置mysql连接池的名称,后面发sql请求的时候指定连接哪里
3、数据库的url:jdbc:mysql://118.24.3.40:3306/jxz?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
4、数据库驱动:这里就是指定连接什么类型的数据库,mysql、oracle、SqlServer等等
5、账号密码 :jxz 123456
3、写sql,执行sql 4、查看结果
查询语句:
insert语句
delete语句:
update语句
jmeter添加压力机
我们在压测的时候,可能并发比较大, 一台机子已经启动不了那么多并发了,这个时候我们就要使用多台机子一起来发压力,就要添加压力机,添加压力机怎么添加呢,首先要在做压力机的机子上启动jmeter的代理,然后做为控制机的机子上添加上压力机的ip即可。 Jmeter的bin目录下有一个jmeter-server,启动它即可,windows机子作为压力机的话,运行jmeter-sever.bat,linux作为压力机的话,运行jmeter-server。 然后在作为控制机的jmeter配置文件里添加压力机ip即可,jmeter的配置文件在bin目录下jmeter.properties,添加压力机的时候,在配置文件里面找到remote_hosts添加ip,然后重启jmeter就可以看到远程压力机了
1、其它的电脑上也有安装jmeter,你的电脑就是master 其他的压力机就是slave
2、和其他的电脑能ping通
3、启动其他电脑上的jmeter-sever
4、在master上修改jmeter的配置文件,找到remote_hosts,在后面加上对于ip即可remote_hosts=192.168.1.109:1099,192.168.1.107:1088(添加完需要重启jmeter才能实现)
在LINUX下面运行JMETER
1、首先在windows下面做好脚本
2、传到LINUX上面
3、操作步骤:
cd xxx/jmeter/bin
./jmeter-n -t ~Desktop/baidu.jmx -l ~/Desktop/baidu.jtl (linux)
windows:/jmeter-n -t ~Desktop/baidu.jmx -l ~/Desktop/baidu.jtl
如果windows想通过cmd进去哪个目标只需要在地址栏直接输入cmd
dir查看当前目前的内容
/jmeter-n -t ~Desktop/baidu.jmx -l ~/Desktop/baidu.jtl
打开jmeter添加线程组然后通过聚合报告和查看结果树来看运行结果: