接口测试
1. 接口的分类:webService和http api接口
1) webService接口:是按照soap协议通过http传输,请求报文和返回报文都是xml格式,一般要借助工具来测试接口;
2) http api接口:是按照http协议传输的,请求报文是key-value格式,返回报文json串,一般常用的请求方式是get和post请求。
2. 接口测试其实就是功能测试,也是测试业务逻辑,只不过没有页面可以点;接口测试就是按照接口规范文档提供的调用地址、请求参数、拼接报文,发送请求检查返回结果。
3. 接口测试的必要性:
1) 能够发现很多页面点击发现不了的bug;
2) 提高系统的异常处理能力;
3) 前端随便变,接口测好了,后端不用变。
4. 接口文档至少得包括:
1) 接口的说明;
2) 调用地址的URL;
3) 请求参数,参数的类型,请求参数的说明;
4) 请求方式;
5) 返回值的说明。
5. get和post请求:
1) get请求能直接在浏览器中发送请求;
2) post请求需要借助工具来发送。
3) 两者的区别:
i get请求使用URL或cookie传参,host请求使用请求体body传参;
ii get请求的URL在长度上有限制;post请求没有;
III post请求比get请求安全,因为get请求数据放在URL中;
IV get请求一般用来请求数据,post请求一般用来发送数据;get请求数据发在请求头中,post请求数据放在请求body中。
6. http状态码:http有1个状态码,来标识每次请求是否成功,常见状态码有如下几种。
1) 200:2开头的都表示这个请求发送成功。
2) 300:3开头的表示重定向;常见的是302,把请求重定向到别的URL了。
3) 400:4开头的表示客户端发送的请求有语法错误;
I 常见的401表示访问的页面需身份验证;
II 403表示服务端拒绝访问请求;
III 404表示没有这个页面。
4) 500:5开头的表示服务器有异常:
I 500代表服务器内部有异常,无法完成请求;
II 503表示服务暂时不可用;
III 504代表服务器端超时,无返回结果。
7. 如何测webService接口
前提要知道测试的URL或wsdl文件,直接在soapui中导入即可,导入后能看到所有接口,填写参数调用接口, 查看返回结果即可。
8. 通用的接口用例设计
1) 通过性验证:保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入发送请求,看是否可以返回正确的结果。
2) 参数组合:有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功;id传2时,传入商品id是否删除成功。
3) 接口安全:
1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?
2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功。
3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。
4、密码安全规则,密码的复杂程度校验。
4) 异常验证:异常的,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。
5) 根据业务逻辑设计用例:把业务的测试点列出来,然后造数据验证这些测试点。
9. 练习发送【获取所有学生信息】的请求,发现察看结果树-》响应数据中中文处显示的都是乱码。
解决方法:在jmeter安装目录/bin/jmeter.properties文件中找sampleresult.default.encoding=xx, 后面xx改成utf-8,然后取消注释
10. 练习发送【添加学生信息】接口请求时,在http请求的 Body Data 中写的中文,为什么都是乱码(方框中间有个问号)
解决方法:在jmeter安装目录/bin/jmeter.properties文件找到 JSyntaxTextArea,把注释取消就行了。
11. 练习发送【添加学生信息】接口请求时,传参中有中文,请求成功后,再从【查看所有学生信息】接口看到,中文参数显示的乱码。
解决方法:在content-encoding中写上utf-8,将中文以utf-8格式编码,然后发送请求
jmeter
1. jmeter:跨平台的,windows mac Linux下都可以用,使用前必须装jdk。
2. jmeter参数化:
1) 用户定义的变量;
2) 函数生成器:
3) 从文件中读取
3. 1) jmeter关联:获取返回的值保存起来,给其它请求用,或做其它一些处理。关联是通过jmeter的正则表达式提取器实现的。
例子:有一个购买商品的接口,必须要先登录才能够购买商品, 那么你调用接口的时候怎么知道是否已经登录了,一般这样的都会在调用的时候传一个token的参数,服务端判断token是否过期或者token是否正确,如果正确的话,那就是登录成功了就可以买东西了。token是从哪来的呢,肯定是从登录接口返回的,因为要先登录,那这样就得先调用登录接口, 获取到token,然后把获取到的token传给购买商品的这个接口。
2) 实际练习时候出现1个问题:正则表达式自己手动输入时,运行察看结果树一直提示“未登录”,
而从登录返回的数据中复制json串,修改为"sign":"(.*)",后,运行提示操作成功的
解决方法:后来把两次操作的表达式复制到sublime Text中,就能很明显的看出原因了,提示未登录的那个表达式:后少一个空格,但在jmeter中很难看出来,加上空格即可。
4. jmeter操作mysql
1) 导入jar包:直接在测试计划中导入外部jar包(mysql-connector-java-5.1.7-bin.jar),或者将jar包放在jmeter安装目录的lib包中,重启jmeter即可。
2) 配置数据库连接:mysql的URL、端口号,用户名,密码
3) 写sql 执行sql,查看结果。
4) jdbc request从数据库查出来的结果中文显示???
解决方法:jdbc连接配置的Database URL中加上characterEncoding=UTF-8
5) query type为Callable Statement:执行多条sql语句
5. jmeter path extractor下载地址:https://jmeter-plugins.org/wiki/JSONPathExtractor/