news 2026/1/29 16:40:26

接口自动化测试思路和实战之手把手【编写线性测试脚本实战 】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
接口自动化测试思路和实战之手把手【编写线性测试脚本实战 】

接口自动化测试框架目的

测试工程师应用自动化测试框架的目的: 增强测试脚本的可维护性、易用性(降低公司自动化培训成本,让公司的测试工程师都可以开展自动化测试)。

以下框架以微信公众平台开放文档实战

地址:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

自动化测试框架根据思想理念和深度不同,渐进式的分为以下几种:

线性脚本框架

模块化思想==>模块化测试脚本框架

库思想==>测试库框架。

数据驱动思想==>数据驱动测试框架

关键字驱动思想==>关键字驱动或表驱动的测试框架

上述思想融合完成企业实际自动化==>混合测试自动化框架

编写线性测试脚本实战

接口用例excel;

步骤1、新建项目名API_TEST_FRAME,在项目的下面新建不同层级;如下图

步骤2、根据接口文档的层级,在项目中的testcase层下新建层级;如下图

步骤3、在begin_dev下新建test_get_access_token_api.py文件,并编写代码

编写代码:

# encoding: utf-8 # @author: Jeffrey # @file: test_get_access_token_api.py # @time: 2022/7/24 18:08 # @desc: 导入模块顺序:内置模块、第三方模块、自定义模块 import unittest import requests import jsonpath class TestGetAccessTokenApi(unittest.TestCase): def setUp(self) -> None: self.session = requests.session() def tearDown(self) -> None: self.session.close() def test_case_01(self): '''[api_case_01] 测试获取access_token能否正常调用''' url_params = {"grant_type":"client_credential", "appid":"wxf14419077f707856", "secret":"92a113bd4b5ffdc72144740dc7123c99"} response = self.session.get(url="https://api.weixin.qq.com/cgi-bin/token", params = url_params) # 获取响应json中的access_token的值 actual_result = jsonpath.jsonpath(response.json(), "$.access_token") print(actual_result) self.assertTrue(actual_result, "api_case_01 执行失败") #非空,非0 都返回True为真 def test_case_02(self): '''[api_case_02] 测试获取access_token接口在appid错误时,能否正常处理错误''' url_params = {"grant_type":"client_credential", "appid":"wxf14419077f707", "secret":"92a113bd4b5ffdc72144740dc7123c99"} response = self.session.get(url="https://api.weixin.qq.com/cgi-bin/token", params = url_params) # 获取响应json中的errcode的值,因为jsonpath返回的是列表,故加上下标0 actual_result = jsonpath.jsonpath(response.json(), "$.errcode")[0] print(actual_result) self.assertEqual(actual_result,40013, "api_case_02 执行失败") if __name__ == '__main__': unittest.main(verbosity=2)

执行查看结果:

步骤4、按照开发文档中的用户标签管理,新建test_create_user_tag_api.py文件

编写代码:

# encoding: utf-8 # @author: Jeffrey # @file: test_create_user_tag_api.py # @time: 2022/7/24 19:02 # @desc: import unittest import requests import jsonpath import json class TestCreateUserTagApi(unittest.TestCase): def setUp(self) -> None: self.session = requests.session() def tearDown(self) -> None: self.session.close() def test_case_01(self): '''[api_case_03] 测试正常进行创建标签接口调用''' url_params = {"grant_type":"client_credential", "appid":"wxf14419077f707856", "secret":"92a113bd4b5ffdc72144740dc7123c99"} response = self.session.get(url="https://api.weixin.qq.com/cgi-bin/token", params = url_params) # 获取响应json中的access_token的值 token_value = jsonpath.jsonpath(response.json(), "$.access_token")[0] tag_url_params = {"access_token":token_value} tag_boby = { "tag": { "name":"深圳人2" } } # 解决中文乱码问题;模拟post请求时,携带json 数据包含中文发送给服务器会转码 # 方式一:json.dumps() tag_str = json.dumps(tag_boby, ensure_ascii=False) response = self.session.post(url="https://api.weixin.qq.com/cgi-bin/tags/create", params = tag_url_params, data=tag_str.encode('utf-8')) print(response.json()) # # 方式二:修改requests中的models.py中的源码,修改完后 # response = self.session.post(url="https://api.weixin.qq.com/cgi-bin/tags/create", # params=tag_url_params, # json=tag_boby) # print(response.json()) # 获取响应json的tag的name值,因为jsonpath返回的是列表,故加上下标0 actual_result = jsonpath.jsonpath(response.json(), "$.tag.name")[0] self.assertEqual(actual_result,"深圳人2", "api_case_03 执行失败") if __name__ == '__main__': unittest.main(verbosity=2)

Requests模拟post请求时,如何处理携带json 数据包含中文发送给服务器会转码的问题?

方式一:如下图

方式二:如下图

执行结果

继续新建test_update_user_tag_api.py文件和test_delete_user_tag_api.py文件;自己拓展

步骤5、把用例整合一起执行,在runner文件下的run_api_tests.py中编写代码:

编写代码:

# encoding: utf-8 # @author: Jeffrey # @file: run_api_tests.py # @time: 2022/7/24 17:52 # @desc: import os import unittest # 获取当前路径 current_path = os.path.dirname(os.path.abspath(__file__)) # 测试用例路径 case_path = os.path.join(current_path, '../testcases') discover_obj = unittest.defaultTestLoader.discover(start_dir=case_path, pattern='test*.py') all_case_suite = unittest.TestSuite() # 把discover对象发现的用例加载到测试套件中 all_case_suite.addTest(discover_obj) unittest.main(defaultTest="all_case_suite", verbosity=2)

查看执行结果:

步骤6、生成测试报告,把HTMLTestReportCN.py文件放到common文件夹中并在run_api_tests.py文件中调整代码;

编写代码:

# encoding: utf-8 # @author: Jeffrey # @file: run_api_tests.py # @time: 2022/7/24 17:52 # @desc: import os import unittest from common import HTMLTestReportCN # 获取当前路径 current_path = os.path.dirname(os.path.abspath(__file__)) # 测试用例路径 case_path = os.path.join(current_path, '../testcases') discover_obj = unittest.defaultTestLoader.discover(start_dir=case_path, pattern='test*.py') all_case_suite = unittest.TestSuite() # 把discover对象发现的用例加载到测试套件中 all_case_suite.addTest(discover_obj) # unittest.main(defaultTest="all_case_suite", verbosity=2) report_path = os.path.join(current_path, '../reports/result.html') html_file_obj = open(report_path, 'wb') html_runner = HTMLTestReportCN.HTMLTestRunner(stream=html_file_obj, title='接口接口自动化测试', tester='YOU', description='学习接口框架') html_runner.run(all_case_suite)

执行后查看报告:

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和软件测试自学站,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/27 23:11:02

QQ空间历史说说完整备份指南:一键保存你的青春记忆

QQ空间历史说说完整备份指南:一键保存你的青春记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过,那些记录着青春岁月的QQ空间说说,如…

作者头像 李华
网站建设 2026/1/27 6:05:58

立体绿化推广策略:屋顶墙面种植的可行性分析

VibeThinker-1.5B-APP 技术解析:轻量模型如何实现高阶推理突破 在当前大模型军备竞赛愈演愈烈的背景下,动辄千亿参数、耗资数百万美元训练的“巨无霸”AI不断刷新性能纪录。然而,这种资源密集型的发展路径显然难以普惠到大多数开发者与教育机…

作者头像 李华
网站建设 2026/1/16 6:58:54

【VSCode与Claude集成终极指南】:掌握AI编程新范式,效率提升300%

第一章:VSCode与Claude集成概述Visual Studio Code(简称 VSCode)作为当前最受欢迎的代码编辑器之一,凭借其轻量级架构、丰富的插件生态和高度可定制性,成为开发者日常工作的核心工具。随着人工智能技术的发展&#xff…

作者头像 李华
网站建设 2026/1/29 12:33:54

【VSCode智能体会话云端实战】:掌握高效开发的5大核心技巧

第一章:VSCode智能体会话云端的核心价值VSCode 智能体会话云端功能将本地开发环境与远程计算资源无缝集成,极大提升了开发效率与协作能力。开发者可在任意设备上访问完整项目上下文,无需依赖高性能本地机器。跨设备一致的开发体验 通过将开发…

作者头像 李华
网站建设 2026/1/26 15:54:01

细胞内的“油水分离”革命:一文读懂液液相分离技术

想象一下,当你摇晃一瓶油醋汁后静置,油滴和水溶液会逐渐分离成两层。细胞内部也存在着一种精妙的“相分离”艺术,并且每时每刻都在发生。如今这种机制正成为疾病治疗的新靶点。这种被称为液-液相分离(Liquid-Liquid Phase Separat…

作者头像 李华