接口测试
咱们先来看看一张图:
接口测试的步骤
一般接口测试的步骤基本就走四步:
- 第一步:准备好要测试的接口;
- 第二步:设置好期望的结果;
- 第三步:使用测试框架或者 API 工具进行测试;
- 第四步:得到结果,看是否符合预期。
但其实实际过程是比这个复杂的,因为还要考虑持续集成、测试逻辑、测试报告这些~
接口测试的方案
接口测试的方案,我分为两种:
- 第一种:使用编程语言的自动化测试框架进行测试。
- 第二种:使用 API 工具进行测试。
而测试框架,比较火的就是 Python+Pytest+Allure。
至于 API 工具,比较火的就是 Apifox。
使用自动化测试框架测试接口
涉及到的技术栈有:
- Requests
- Python
- Pytest
- Allure
Requests
我们可以使用 Requests 来进行接口的请求发送,并获取到返回来的响应结果,Requests 几乎支持所有请求方法。
r = requests.get(url, params, kwargs) r = requests.post(url, data, json, kwargs)
并且我们可以操作、修改响应结果。
r.json()
r.text()
响应里比较重要的参数有:
# HTTP响应的状态码
r.status_code
# 响应失败的原因
r.reason
# 响应对应的请求对象
r.request
# 响应中数据转换成文本
r.text
# 响应来自于哪个url
r.url
# 响应的content
r.content
Requests 同时也支持 Session 的功能,用来做鉴权等操作。
s = requests.Session()
s.header[key] = value
s.auth = (username, password)
Pytest
Pytest 是 Python 的一个自动化测试框架,它的衍生插件包括了 allure-pytest,他支持参数话,并且可以与 jenkins 集成,支持参数化等功能。
基本的测试代码,可以这么写:
@pytest.mark.login
def test_login():
pass
@pytest.mark.logout
def test_logout():
pass
Pytest 支持具体执行某个类、某个函数、某个文件,非常灵活。
main文件里的调试
# 指定运行单个测试目录
pytest.main(['./test_case'])
# 指定运行单个测试文件
pytest.main(['./test_case/test_func.py'])
# 指定运行测试类
pytest.main(['./test_case/test_func.py::TestFunc'])
# 指定运行测试类中的某个方法
pytest.main(['./test_case/test_func.py::TestFunc::test_add_by_class'])
# 指定运行单个测试函数
pytest.main(['./test_case/test_func.py::test_add_by_func_aaa'])
Pytest.ini 支持对日志直接输出。
[pytest]
log_cli = 1
log_cli_level = DEBUG
log_cli_date_format = %Y-%m-%d-%H-%M-%S
log_cli_format = %(asctime)s - %(filename)s - %(module)s - %(funcName)s - %(lineno)d - %(levelname)s - %(message)sv
log_file_level = DEBUG
log_file_date_format = %Y-%m-%d-%H-%M-%S
log_file_format = %(asctime)s - %(filename)s - %(module)s - %(funcName)s - %(lineno)d - %(levelname)s - %(message)s
log_file = ./log/Test.log
Allure
Allure 是用来做测试报告的,它被集成在很多框架中,比如 Pytest、Junit、TestNG 等等。
Allure 提供了一些装饰器,用来改造 Pytest 的测试用例,其实都是为了最后的测试报告做准备。
@allure.feature # 用于描述被测试产品需求
@allure.story # 用于描述feature的用户场景,即测试需求
with allure.step # 用于描述测试步骤,将会输出到报告中
allure.attach # 用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图等
@pytest.allure.step # 用于将一些通用的函数作为测试步骤输出到报告,调用此函数的地方会向报告中输出步骤
使用 Apifox 测试接口
为什么使用 Apifox 来做接口测试呢,因为使用 Apifox 的话,并不需要你做太多操作,只需要点点点就行了,也不需要你写很多代码,只需要写最基本的测试脚本就行。
Apifox 自动化测试
Apifox 提供了 自动化测试的功能,但是前提是你得先定义好你所需要测试的接口们,就像我这里定义了五个接口,并且每个接口写了两个简单的测试脚本。
- 测试状态码是否为 200
- 测试响应时间是否小于 200ms
定义好接口我们需要进入 自动化测试 中去,把接口导进去,Apifox 支持导入 接口、接口用例,看你想要哪个,很灵活,然后你需要设置一些参数,比如:
- 循环数:运行循环次数
- 延迟数:每次循环的延迟数
- 线程数:想开几个线程
- 环境:运行环境
等等,这些参数,其实都比较语义化比较好理解。
Apifox 测试报告
设置好参数,我们需要运行一下,查看到了运行之后的结果,Apifox 提供了一键导出报告的功能,等到运行完毕之后,我们可以导出测试报告查看。
导出后,我们可以看到 HTML 页面的测试报告,报告包含了测试的一些重要信息,以及每个接口的测试情况。
关于Apifox
欢迎体验一下,完全免费的哦:在线使用 Apifox。
Apifox 是一体化 API 协作平台,可以实现 API 文档、API 调试、API Mock、 API 自动化测试,是更先进的 API 设计/开发/测试工具。
Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。
个人使用体验还是不错的,推荐使用~
知识扩展: