摘要:什么是接口测试全称接口是一个位于复杂系统之上能简化任务,像中间人一样不需要你了解详细的所有细节。接口测试与性能测试之间存在接口性能测试,主要通过来进行压测。
很多小伙伴可能会说接口真的有测试的必要吗?
我只要把功能测试好了不就ok了吗?
答案是肯定的,在中大型项目中,后端、前端多人协同开发过程中,接口测试是必要的。
API全称(Application Progarmming Interface),接口是一个位于复杂系统之上能简化任务,像中间人一样不需要你了解详细的所有细节。比如用户登录页面,只需要调用登录接口,就可以达到登录系统的目的。
接口返回的数据类型都是json,json是一种通用的数据类型.
接口自动化测试:让程序代替人为对接口项目进行自动化验证测试的过程
接口测试是一种功能测试,也是一种自动化测试。
功能测试的角度上说只要管输入数据后得到的输出结果是怎么样的,从执行方式上来讲接口必须要借助工具来实现。
接口测试与性能测试之间存在接口性能测试,主要通过jmeter来进行压测。
功能测试必须要等到系统提供可测试的界面后才能进行
接口测试的介入可以更早地发现并解决bug,使得留到功能测试阶段被修复的bug减少,从而缩短整个项目的上线时间
接口测试可以更简单更全面地覆盖到底层的代码逻辑,从而可以发现一些隐藏的bug.
只针对UI层的功能进行测试,就很难发现后端系统对一些异常情况的处理能力.
接口测试常用工具:
常用浏览器
Postman
Jmeter
Fiddler
针对这一部分所需掌握的知识HTTP协议、会话技术,属于基本常识了,有不了解的同学可自行学习。
什么是JSON?
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),JSON是轻量级的文本数据交换格式(数据传递)–xml
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,JSON 解析器和 JSON 库支持许多不同 的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
语法规则:
JSON 语法是 JavaScript 对象表示语法的子集。
数据在名称/值(键值对)对中 如 {“name” : “zs”}
数据由逗号分隔 如 {“name” : “zs” , ”age”:”18”}
大括号保存对象 如 {“name” : “zs” , ”age”:”18”}
中括号保存数组 如 {“score” : [100,80,90]
数据格式:
1.接口文档必备要素
接口说明
调用url
请求参数
请求方式
请求参数、参数类型、请求参数说明
返回参数说明
2.接口请求报文拼接方式
URL拼接:
url拼接规则为:Url?param1=value1¶m2=value2
问号前面是请求url,后面是请求参数和参数值,多个参数用&连接
如:
https://api.douban.com/v2/book/search?q=邹伟伟
JSON串:
需要测试工具完成,如postman、jmeter等。其传参方式符合json的组合规则。
3.接口类型
http api接口
http api 接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式,返回报文一般都是json串,请求方式有get、post等方式,
这两种为最常用的请求方式。
webservice接口
webservice 接口是走soap协议通过http传输,请求报文和返回报文都是xml格式,需要通过工具才能进行测试。
数据库访问接口
数据库访问接口是走jdbc方式连接数据,对数据库进行增删改查操作,需要使用工具进行测试。
GET、POST区别:
get使用url或cookie传参,post将数据存放在body中
get的url在长度上有限制,post数据可以很大
post比get更安全,因为数据在地址栏上不可见
一般get用于获取数据,post用于发送数据
HTTP状态码:
200 2开头表示请求发送成功
300 3开头表示重定向
400 4开头表示客户端发送请求有语法错误
401 访问页面未授权
403 无权访问
404 无此页面
500 5开头表示服务器异常
500 服务器内部异常
504 服务器端超时,未返回结果
1.第一个案例(发送一个get请求)
# coding=utf-8import requests# 请求的链接url = "http://suggest.taobao.com/sug?code=utf-8&q=裤子&callback=cb 用例"# 发送get请求r = requests.post(url)# 请求的状态码 200代表成功status = r.status_codeprint(status)# 请求的内容j = r.json()print(j)
输出结果如下:
2.第二个案例(发送一个post请求)
# 请求的链接url = "http://suggest.taobao.com/sug"# post请求以字典格式传入data = {"code": "utf-8", "q": "裤子", "callback": "cb 用例"}# 发送post请求r = requests.post(url, data)# 请求的状态码 200代表成功status = r.status_codeprint(status)# 请求的内容print(r.content)
输出结果如下:
(接口只返回了一个b,这里只需要明白遇到post接口怎么去请求就好了~)
3.第三个案例(进行接口状态码断言)
# coding=utf-8import requests# 请求的链接url = "http://suggest.taobao.com/sug?code=utf-8&q=裤子&callback=cb 用例"# 发送请求r = requests.post(url)# 请求的状态码 200代表成功status = r.status_code# 进行接口的状态码断言,等于200则认为通过,不是200不通过if status == 200: print("用例测试通过")else: print("测试不通过")print(status)# 请求的内容j = r.json()print(j)
输出结果如下:
4.第四个案例(进行接口内容断言-正常情况)
# coding=utf-8import requests# 请求的链接url = "http://suggest.taobao.com/sug?code=utf-8&q=裤子&callback=cb 用例"# 发送请求r = requests.post(url)# 请求的状态码 200代表成功status = r.status_code# 进行接口的状态码断言,等于200则认为通过,不是200不通过if status == 200: print("用例测试通过")else: print("测试不通过")print(status)# 请求的内容j = r.json()# 判断接口返回内容里面,有没有 裤子女夏 内容if "裤子女夏" in str(j): print("存在此数据")else: print("不存在此数据")print(j)
输出结果如下:
5.第五个案例(进行接口内容断言-异常情况)
# coding=utf-8import requests# 请求的链接url = "http://suggest.taobao.com/sug?code=utf-8&q=裤子&callback=cb 用例"# 发送请求r = requests.post(url)# 请求的状态码 200代表成功status = r.status_code# 进行接口的状态码断言,等于200则认为通过,不是200不通过if status == 200: print("状态码校验过")else: print("状态码校验不通过")print(status)# 请求的内容j = r.json()# 判断接口返回内容里面,有没有 裤子女夏 内容# 裤子女夏 增加了一个1if "裤子女夏1" in str(j): print("存在此数据")else: print("不存在此数据")print(j)
输出结果如下:
6.第六个案例(接口的小封装-接口和逻辑代码分开控制-~)
增加config.py主要存放接口
# coding=utf-8# baseurl 一般接口都是分测试接口和正式接口的,只需要修改ip即可baseurl = "http://suggest.taobao.com"# 假装是登录接口 baseurl=于楼上url_login = baseurl + "/sug?code=utf-8&q=裤子&callback=cb 用例"# 假装是注冊接口url_register = baseurl + "/sug?code=utf-8&q=裤子&callback=cb 用例"# 假装是首页接口url_home = baseurl + "/sug?code=utf-8&q=裤子&callback=cb 用例"
# coding=utf-8import requests# 引入config配置接口的文件import config# 发送请求 使用config.来调用想要的接口 调用首页接口r = requests.get(config.url_home)# 请求的状态码 200代表成功status = r.status_code# 进行接口的状态码断言,等于200则认为通过,不是200不通过if status == 200: print("状态码校验过")else: print("状态码校验不通过")print(status)# 请求的内容j = r.json()# 判断接口返回内容里面,有没有 裤子女夏 内容# 裤子女夏 增加了一个1if "裤子女夏1" in str(j): print("存在此数据")else: print("不存在此数据")print(j)
输出结果如下:
用心的同学已经发现了,这样的话每次接口变了链接等,只需要修改config文件即可 不用去逻辑代码里面去找了。
通过性验证
要保证这个接口功能是正确的,按照接口文档上的参数,正常传入,查看是否可以返回正确的结果
参数组合
如:现有一个操作商品的接口,有个字段type。type传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,这样就要测参数组合,type传1的时候,只传商品名称能不能修改成功;id、名称、价格都传的时候能不能修改成功
接口安全:
绕过验证
如购买了一个商品,价格是300元,提交订单时候,把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?
绕过身份授权
如修改商品信息接口,必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,传一个其他的卖家能不能修改成功
参数是否加密
如登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息。
加密规则是否容易破解
密码安全规则
对密码的复杂程度校验
异常验证
不按照接口文档上的要求输入参数,来验证接口对异常情况的校验
如必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11
必传非必传、参数类型、入参长度。
最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119657.html
摘要:前言这里筑梦师是一名正在努力学习的开发工程师目前致力于全栈方向的学习希望可以和大家一起交流技术共同进步用简书记录下自己的学习历程个人学习方法分享本文目录更新说明目录学习方法学习态度全栈开发学习路线很长知识拓展很长在这里收取很多人的建议以后决 前言 这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程...
摘要:接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。随着案例和执行结果的不断积累,接口测试覆盖会更加充分,统计结果会更加精确。 原文出自【听云技术博客】:http://blog.tingyun.com/web/a... 今年遇到了几个问题,与接口的功能和性能相关,恰巧最近公司也在组织以冒烟测试为主题的活动,于是乎突发奇想,寻思着能否将接口测试与冒烟测试结合起来,发掘一...
阅读 986·2021-10-19 11:42
阅读 2942·2021-09-10 10:51
阅读 638·2021-09-09 09:33
阅读 1692·2021-09-01 10:43
阅读 2737·2019-08-30 12:43
阅读 3490·2019-08-30 11:24
阅读 2051·2019-08-30 10:56
阅读 2754·2019-08-29 11:00