全国测试开发大赛
https://mp.weixin.qq.com/s/hi5Ke1W6fihVQscYc6bSMw
测试开发赛道:https://mp.weixin.qq.com/s/wyCY-pFyvHvi27vvnJ7YXQ
比赛报名地址:https://ccf.org.cn/cat2026
目前比赛报名时间截止到 5月27日
测试开发赛道官方选手通知QQ群:1102401108
考试范围
业务测试、算法、web 自动化测试和接口自动化测试相关的技能。
赛前技能准备
- 掌握一门编程语言:python/java
- 掌握对应语言的单元测试框架:pytest/JUnit
- 软件测试的基础理论
- web 自动化测试:selenium
- 接口自动化测试:python 推荐使用 requests,java 推荐使用 restassured
目录
- 学习路径
- 环境搭建
- requests 基本用法
- 宠物商店接口自动化测试实战
学习路径
环境搭建
- Python 安装配置:
- 推荐 Python 版本:3.8 以上
- 官方下载地址
- 操作步骤:
- 下载系统对应的安装程序。
- 运行安装包。
- 检查是否安装成功。
- PyCharm 安装:
- 推荐版本:社区版。
- 官方地址
- Pytest 安装:
pip install pytest- PyCharm 直接安装
- Requests 安装
pip install requests- PyCharm 直接安装
HTTP 协议
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。
HTTP 协议:超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。是用于分布式、协作式和超媒体信息系统的应用层协议。
- HTTP 的默认端口:80
- HTTPS 的默认端口:443
请求
- 请求行:请求方法、请求资源的 URL、HTTP 版本信息。
- 首部行:请求行的下一行一般为首部行的开始,包括主机域名、连接信息、用户代理等等信息。
- 实体主体:一般不使用。
响应
- HTTP版本/响应码
HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的 3 位数字代码。所有状态码的第一个数字代表了响应的五种状态之一。
-
1xx(临时响应)
-
2xx (成功) :表示服务器成功处理了请求的状态代码,说明网页可以正常访问。
- 200(成功) 找到了该资源,并且一切正常,服务器已成功处理了请求。
-
3xx (重定向):表示要完成请求,需要进一步操作。需要重定向到其它地方。它让客户端再发起一个请求以完成整个处理
- 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
- 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
-
4xx(请求错误) :表示请求可能出错,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等,妨碍了服务器的处理。
- 403 (禁止) 服务器拒绝请求。客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
- 404 (未找到) 服务器找不到请求的网页。在指定的位置不存在所申请的资源。
-
5xx(服务器错误):处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等
- 500 (服务器内部错误) 服务器遇到错误,无法完成请求。 看到这个错误,你就应该查查服务端的日志了,肯定抛出了一堆异常
- 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
接口请求方法
- 标准方法
- r = requests.request(method, url, **kwargs)
- 简化方法
- requests.get(url)
- requests.post(url)
- requests.put(url)
- requests.delete(url)
演练环境
构造 GET 请求
- 打开 pycharm
- 创建 tests 包
- 新建 py 文件:test_rquests.py
- 写脚本
- 快速导包:Alt + Enter
- 格式化:win(Ctrl + Alt + L)mac(Command + Alt + L)
def test_get():
'''
发出一个 get 请求
:return:
'''
get_url = "https://httpbin.ceshiren.com/get"
r = requests.get(get_url)
print(f"接口响应为 {r}")
构造 POST 请求
def test_post():
'''
发出一个 post 请求
:return:
'''
post_url = "https://httpbin.ceshiren.com/post"
r = requests.post(post_url)
print(f"post 请求的接口响应为 {r}")
构造 PUT 请求
def test_put():
'''
发出一个 put 请求
:return:
'''
put_url = "https://httpbin.ceshiren.com/put"
r = requests.put(put_url)
print(f"post 请求的接口响应为 {r}")
构造 DELETE 请求
def test_delete():
'''
发出一个 delete 请求
:return:
'''
delete_url = "https://httpbin.ceshiren.com/delete"
r = requests.delete(delete_url)
print(f"post 请求的接口响应为 {r}")
接口响应数据
| 属性 | 含义 |
|---|---|
r |
响应 Response 对象(可以使用任意的变量名) |
r.status_code |
HTTP 响应状态码 |
r.headers |
返回一个字典,包含响应头的所有信息。 |
r.text |
返回响应的内容,是一个字符串。 |
r.url |
编码之后的请求的 url |
r.content |
返回响应的内容,是一个字节流。 |
r.raw |
响应的原始内容 |
r.json() |
如果响应的内容是 JSON 格式,可以使用该方法将其解析成 Python 对象。 |
接口请求数据
- payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
- r = requests.get(url, params=payload)
定制请求头
- headers = {‘user-agent’: ‘my-app/0.0.1’}
- r = requests.get(url, headers=headers)
传递表单
- payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
- r = requests.post(url, data=payload)
传递 json 数据
- payload = {‘some’: ‘data’}
- r = requests.post(url, json=payload)
上传文件
- files = {‘file’: open(‘report.xls’, ‘rb’)}
- r = requests.post(url, files=files)
接口测试断言
get_url = "https://httpbin.ceshiren.com/get"
def test_status_code():
r = requests.get(get_url)
# 获取响应状态码
print(r.status_code)
assert r.status_code == 200
复杂断言处理
- JSON 格式的响应体指的是 HTTP 响应中的消息体(message body),它是以 JSON 格式编码的数据。
{
"name": "John",
"age": 30,
"city": "New York"
}
import requests
get_url = "https://httpbin.ceshiren.com/get"
def test_res_json():
r = requests.get(get_url)
assert r.status_code == 200
assert r.json()["url"] == get_url
宠物医院接口自动化实战
- PetClinic 宠物医院:
- 一个在线的小型的商城。
- 主要提供了增删查改等操作接口。
- 结合 Swagger 实现了接口的管理。
宠物医院需求分析
- 被测产品:宠物医院系统。
- 宠物医院宠物主人搜索接口:
- swagger:Swagger UI
- 接口文档:有道云笔记
接口测试用例设计
- 宠物主人查询单接口用例
接口测试用例设计思路
编写接口自动化测试脚本思路
执行命令生成报告
pytest -v --alluredir=./results --clean-alluredir
allure serve ./results
allure generate --clean alluredir results -o results/html
总结
- 知识点梳理
- 环境搭建
- 知识点回顾
- 实战练习





