文章目录
一.概要
餐饮后台的API测试报告(Jmeter+Postman+Charles)
Postman+Charles 完成接口测试
Python+Pytest+Allure 完成自动化接口测试和生成报告
Jmeter+Charles 进行压测
二.Postman+Charles接口测试
1.根据开发人员(自己)在foxAPI上面的接口文档管理,我们在Postman中进行接口设计,Xmind中进行测试用例的设计。
2. 在Postman中创建项目,文件层级如下
文件层级及相关配置
3. 编写完成后进行整体的一个测试,编写相关脚本,然后运行后查看接口是否正确。这里给出部分正向测试的运行结果。
Postman也提供了内部的断言脚本供我们使用。
三.Python+Pytest+Allure自动化接口测试
1.框架搭建
这是整体框架的设计,大致与UI自动化相同,除了个别的几个点,详细可以见我的另外一篇文章
2.测试用例
2.1在编写测试用例之前我们对api进行封装,这里给出部分接口的封装,相关返回可以参考开发给出的接口去进行配置。
其实后面的接口封装大同小异,注意一下返回格式就行。
2.2 测试用例编写
conftest.py放我们会经常用到的两个方法,一个是获取code,另一个登录后的token,使用修饰器
@pytest.fixture
可以让这两个方法作用与整个存放测试用例的文件夹。
为接口去编写测试用例,其实在编写的过程中不难发现,使用这种方法,去编写会影响我们代码的一个维护,因为相关的一个测试数据我们直接放在了代码中,如果后续需要进行修改会很麻烦,而且重复代码量也比较大。
3.将测试数据与测试用例代码分离开来
我们使用json来构成我们的一个测试数据,并且使用pytest的修饰器
@pytest.mark.parametrize
来动态的构成我们的一个测试数据。
3.1 json测试数据
我们为ShoppingCard相关接口设计测试数据,正向与反向,在代码中我们不用再去一个测试数据一个方法,简化了我们的开发,提高我们的可维护性。
- Allure生成测试报告
通过测试报告我们可以查看我们接口的一个通过率和一个时间刻度,前者我们可以查看每个测试用例的故障或者失败原因,后者可以给我们分析接口的一个反应时间。
自动化接口这一面我写的比较简略,感兴趣可以去看我的UI自动化接口报告,比较详细餐饮后台UI自动化测试报告。
四.Jmeter+Charles进行压测
1.我们使用Jmeter进行压测,对加入购物车的接口进行测试,从Charles中获取微信小程序返回的凭证。
通过这连接我们可以多次调用返回code,作为我们登录的一个凭证,注意,这个连接有效果时间是2h。
- 在jmeter中新建测试计划,创建线程组,将会用到的接口放到里面,使用JSON提取器获取登录用到的code,登录成功后的token, 使用事务控制器,让http请求按照我们的顺序依次调用。
我们创建了两个线程组,一个普通的,一个可以逐步递增。
jp@gc - Stepping Thread Group填写数据,场景为在5秒内增加10个并发用户数,并运行30秒,再继续在5秒内增加10个并发用户数,重复循环,直至并发用户数达到100个后运行脚本60秒。然后在每1秒内减少5个并发用户数,直到减为0,结束脚本的运行。
“jp@gc - Transactions per Second” 是 JMeter 中的一个插件,它用于监控和显示测试过程中的每秒事务数(TPS)。
“Active Threads Over Time” 是 JMeter 中的一个监听器插件,它用于显示在测试期间线程数的变化情况。这个监听器可以帮助用户监控在性能测试中每个线程组的活动线程数随时间的变化,从而了解系统在不同时间段的负载情况和性能表现。
“jp@gc - Response Times Over Time” 是 JMeterPlugins 套装中的一个监听器插件,它用于在性能测试中监控和展示响应时间随时间的变化趋势。
通过Jmeter给我们提供的插件,我们整体的框架就已经搭建好了。
3.察看结果树、汇总报告、聚合报告、汇总图、TPS(每秒事务数)、RT(响应时间)、AT(活动线程)吞吐量可以在聚合报告看到,具体的测试图,可以看看TPS。
4.分析压测结果
这里测试的时候是因为线程过大了,报异常,TPS就会下降,但是中间会有一段峰值趋于稳定,就是这个接口所能抗住的一个最佳的并发量了。然后接着再去调整最大线程数,重新反复压测,直到获得一个最佳的并发数。
经过多次压测,可以确定在TPS在10-15这个区间达到峰值,且稳定,接下来我们使用默认的线程中将线程调整到15,重新进行压测,看看吞吐量会不会有变化。
测下来TPS平均值在4.7,基于上面的测试过程,可以得出一个大致的结论,这个接口的并发量大概是10-15这个区间 。
五.总结
1. Postman + Charles 接口测试
Postman:
- 用户友好的界面:Postman 提供了一个直观的图形界面,使得创建和发送HTTP请求变得简单。
- 集合和文档:可以创建集合来组织API请求,并生成文档,便于团队共享和API的维护。
- 环境和全局变量:支持环境变量和全局变量,方便在不同的环境之间切换和使用动态数据。
- 测试脚本:内置了对JavaScript的支持,可以在测试脚本中编写复杂的逻辑。
- 集成:可以与其他工具和CI/CD管道集成,实现自动化测试。
Charles:
- 流量捕获:Charles 可以捕获客户端和服务器之间的所有HTTP和SSL/HTTPS通信。
- 修改请求和响应:可以实时修改请求和响应,测试不同的场景。
- 模拟网络条件:可以模拟慢速网络或断网等不同网络条件,测试应用的鲁棒性。
- 重放请求:可以重放请求,用于测试接口的幂等性或一致性。
- SSL代理:支持SSL代理,可以截获和分析HTTPS流量。
2. Python + Pytest + Allure 自动化接口测试
Python:
- 灵活性:Python 是一种非常灵活的编程语言,可以用于编写复杂的测试脚本。
- 库支持:拥有丰富的库支持,如
requests
用于发送HTTP请求,pytest
用于测试框架。 - 易于学习:Python 语法简洁,易于学习,适合快速开发测试脚本。
Pytest:
- 简单的断言和测试结构:Pytest 鼓励简单的测试结构和断言方式,使得测试代码易于编写和理解。
- 强大的插件系统:拥有丰富的插件生态,如
pytest-mock
、pytest-bdd
等,扩展了测试能力。 - 参数化测试:支持参数化测试,可以对同一测试函数使用不同的输入值进行测试。
Allure:
- 丰富的报告:生成的报告非常详细且美观,包括测试步骤、状态、用时等信息。
- 可定制性:报告可以根据需要进行定制,包括添加额外的描述、标签等。
- 易于集成:可以与CI/CD工具集成,提供持续集成过程中的测试结果可视化。
3. Jmeter + Charles 进行压测
Jmeter:
- 性能测试:Jmeter 是专为性能测试设计的,可以模拟大量并发用户对服务器进行压力测试。
- 多协议支持:支持多种协议,如HTTP, JDBC, JMS等,适用于不同类型的性能测试。
- 可扩展性:可以通过添加插件来扩展其功能。
- 结果分析:提供了丰富的图表和统计数据,帮助分析性能测试结果。
Charles(在性能测试中):
- 性能分析:可以分析在性能测试期间客户端和服务器之间的通信性能。
- 安全性测试:可以检测性能测试中的安全问题,如数据泄露等。
总的来说,这些工具和框架提供了从接口测试、自动化测试到性能测试的全面解决方案,帮助测试测试人员发现问题、提高软件质量,并确保软件在不同环境下的稳定性和性能。
版权归原作者 xixiYa_12138 所有, 如有侵权,请联系我们删除。