| 点击下方图片有惊喜,精美礼品等你来拿哦 |
|---|
前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
专栏系列(点击解锁) 学习路线指引 知识定位 Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。 语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。 自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。 自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。 数据库开发实战篇 更新中 爬虫入门与实战 更新中 数据分析篇 更新中 前端入门+flask 全栈篇 更新中 django+vue全栈篇 更新中 拓展-人工智能入门 更新中 网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者 网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。 vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。 shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结] WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器 测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得! 测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。 RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。 Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。 MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。
文章目录
- 如何针对正在进行和已知的项目进行接口测试
- 根据接口文档完成手机号注册的接口测试脚本
- 根据接口文档完成登录的接口测试脚本
- 根据接口文档完成查询用户详情接口测试脚本
在前面的几个章节中,我们对接口测试的基本概念、抓包过程、以及怎样通过一个简单 python 脚本实现接口的调用进行了学习,接下来将真正的针对一个接近真实项目的慕旅游网的经典流程进行接口测试的实战演练。
如何针对正在进行和已知的项目进行接口测试下图就是该项目的主页,在该项目中我们可以像访问正常的旅游网站一样、进行注册、登录、浏览经典的景点信息、购买景点门票、好评等常见的功能。当然了,这些都是在 WEB 可视化的角度下去完成的,前文我们也提到过,在实际的开发过程中很多手都是服务端先行,也就是说先有了接口,后有的可视化界面。
在很多公司中,所有的测试都是先要基于后端的接口进行测试,也就是在项目前期 API 的测试会多一些。
在前文的学习中,我们是通过 “fiddler” 抓取请求来获得接口;在实际项目过程中,更多的是使用已经开发好的接口文档,类似于下面这个样子。
比如下图中的接口地址、错误代码及文字信息、手机号注册、用户名密码登录等等… 【见下图:】
依赖于接口文档,我们可以很快速的完成接口测试脚本的编写,这样比抓包来的会更轻松!(更何况实际项目中,只在后端接口完成的情况下,也没办法通过前端抓包获取接口,尴了个尬不? 哈哈哈!)
所以在一个正在进行中的项目中和在一个已知的项目中流程是不同的;已知项目中可能是优先从抓包开始,然后进行我们后续的脚本的编写,而正在开发中的项目往往都是通过接口文档来完成接口测试。(接口文档越清晰越好,)
接下来我们就根据文档的 手机注册开始、然后用户登录、再到查看用户详情这样的几个步骤完成当前这个流程的接口测试。
根据接口文档完成手机号注册的接口测试脚本手机号注册的接口文档内容如下:
地址:/accounts/user/register/
调用方式:POST
参数:
传参字段 是否必填 参数类型 参数说明 username true string 用户名 nickname true string 用昵称 password true string 用户密码
正常返回结果:
{ "user":{ "username":"13500000000", "acatar":"/medias/a.jpg", "intergal":"0", "nickname":"渴望力量的哈士奇", "lever":0 }, "profile":{ "real_name":"哈士奇", "email":"null", "phone_no":"null", "sex":1, "age":0 } }
异常返回结果:
{ "error_code":"400000", "error_msg":"参数错误", "error_list":{ "username":["手机号码已被注册"], "nickname":["用户昵称已被使用"] } }接下来,我们就在 Pycharm 中编写手机注册接口的测试脚本。
代码示例如下:
# coding:utf-8
import requests
'''
url:http://trip.imooc.zhaeedu.com/api
url_regis:http://trip.imooc.zhaedu.com/api//accounts/user/register/
url_login:http://trip.imooc.zhaedu.com/api//accounts/user/login/
url_view:"http://trip.imooc.zhaedu.com/api//accounts/user/detail/"
'''
phone = "13770001231" # API测试数据
nick = "渴望力量"
password = "123456"
# 注册账户API
url_regis = "http://trip.imooc.zhaedu.com/api/accounts/user/register/" # 注册API
data_regis = {"username": phone, "nickname": nick, "password": password} # 定义注册API传入信息
res_regis = requests.post(url=url_regis, data=data_regis)
print(res_regis.text)
运行结果如下:
根据接口文档完成登录的接口测试脚本
用户名、密码登录的接口文档内容如下:
地址:/accounts/user/login/
调用方式:POST
参数:
传参字段 是否必填 参数类型 参数说明 username true string 用户名 password true string 密码
正常返回结果:
{ "user":{ "username":"13500000000", "acatar":"/medias/a.jpg", "intergal":"0", "nickname":"渴望力量的哈士奇", "lever":0 }, "profile":{ "real_name":"哈士奇", "email":"null", "phone_no":"null", "sex":1, "age":0 } }
异常返回结果:
{ "error_code":"400000", "error_msg":"参数格式不正确", "error_list":{ "username":["手机号码已被注册"], "nickname":["用户昵称已被使用"] } }
代码示例如下:
# coding:utf-8
import requests
'''
url:http://trip.imooc.zhaeedu.com/api
url_regis:http://trip.imooc.zhaedu.com/api/accounts/user/register/
url_login:http://trip.imooc.zhaedu.com/api/accounts/user/login/
url_view:"http://trip.imooc.zhaedu.com/api/accounts/user/detail/"
'''
phone = "13770001231" # API测试数据
nick = "渴望力量"
password = "123456"
# 登录API
url_login = "http://trip.imooc.zhaedu.com/api/accounts/user/login/" # 登录API
data_login = {"username": phone, "password": password} # 定义登录API传入信息
res_login = requests.post(url=url_login, data=data_login)
print(res_login.text)
PS:登录接口依赖于已注册的用户信息。
运行结果如下:
根据接口文档完成查询用户详情接口测试脚本
查询用户信息的场景存在这样一个问题,它依赖于已登录的会话;前面的文章我们有介绍过 http协议 是没有 “记忆能力” 的,所以它并不知道客户端已经登陆过了,需要一个中间的传递媒介来帮助记录用户已经登录,而这个媒介就是 cookie 。
当我们在浏览器上访问任何网站的时候,在登录以后无论进行着怎样的操作都 依赖于 cookie 完成登录后的一些其他操作。
所以在这里就需要把 cookie 存下来,方便用户详情查询的调用。
通过 requests.utils.dict_from_cookiejar() 方法来获取登录后的 cookie
即: cookies = requests.utils.dict_from_cookiejar(res_login.cookies)
查询用户详情接口文档内容如下:
地址:/accounts/user/detail/
调用方式:GET
错误结果:状态码401
返回结果:
{ "user":{ "username":"13500000000", "acatar":"/medias/a.jpg", "intergal":"0", "nickname":"渴望力量的哈士奇", "lever":0 }, "profile":{ "real_name":"哈士奇", "email":"null", "phone_no":"null", "sex":1, "age":0 } }
PS:查询用户信息接口依赖于已登录的用户信息。
代码示例如下:
# coding:utf-8
import requests
'''
url:http://trip.imooc.zhaeedu.com/api
url_regis:http://trip.imooc.zhaedu.com/api/accounts/user/register/
url_login:http://trip.imooc.zhaedu.com/api/accounts/user/login/
'''
phone = "13770000000" # API测试数据
nick = "Husky"
password = "123456"
# 注册账户API
url_regis = "http://trip.imooc.zhaedu.com/api/accounts/user/register/" # 注册API
data_regis = {"username": phone, "nickname": nick, "password": password} # 定义注册API传入信息
res_regis = requests.post(url=url_regis, data=data_regis)
print("注册信息:", res_regis.text)
# 登录API
url_login = "http://trip.imooc.zhaedu.com/api/accounts/user/login/" # 登录API
data_login = {"username": phone, "password": password} # 定义登录API传入信息
res_login = requests.post(url=url_login, data=data_login)
print("登录信息:", res_login.text)
# 查询用户信息API [依赖于已经登录的会话 - cookie]
cookies = requests.utils.dict_from_cookiejar(res_login.cookies) # 获取 cookie
print("cookies:", cookies)
url_view = "http://trip.imooc.zhaedu.com/api/accounts/user/detail/" # 查询用户信息API
res_view = requests.get(url=url_view, cookies=cookies)
print("查询信息:", res_view.text)
PS:查询用户信息的接口依赖于已登录用户的登录会话,也就是 cookie 。
运行结果如下:
以上就是该在线旅游网的一个经典流程的接口测试,还是那句话,不多多看,要多敲代码呀。相信大家在操作的过程中,一定能更有体会,更有针对性的了解接口测试到底应该怎么样去做。
OK,今天就先到这里吧。



