接口自动化测试很难吗?来看看这份超详细的教程!

news2024/9/24 15:27:25

接口自动化测试框架目的

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

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

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

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

线性脚本框架

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

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

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

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

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

 自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

编写线性测试脚本实战

接口用例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)

执行后查看报告:

 

 总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1228145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复杂类型,查询--学习笔记

1&#xff0c;复杂类型 解决问题&#xff1a;一些不容易获取到的数据&#xff0c;例如数组类型&#xff0c;集合类型等&#xff0c;获取他们的数据 -- 1.创建表 create table tb_array_person(name string,city_array array<string> )row format delimited fields term…

hypermesh学习总结(一)

1、hypermesh导入导出 2、hypermesh如何使用拓扑命令,连接多个几何体为一个? 3、hypermesh模式选择 分别有显示动力学模式explicit,标准模式Standard3D(静力学及模态等)

【最新Tomcat】IntelliJ IDEA通用配置Tomcat教程(超详细)

前言 IntelliJ IDEA是一个强大的集成开发环境&#xff0c;能够大大简化Java应用程序的开发和部署过程。而Tomcat作为一个流行的Java Web服务器&#xff0c;其与IntelliJ IDEA的整合能够提供便捷的开发环境&#xff0c;让开发人员更专注于代码的创作与优化。 在配置IntelliJ IDE…

ROS参数服务器(Param):通信模型、Hello World与拓展

参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数&…

【2023云栖】刘一鸣:Data+AI时代大数据平台建设的思考与发布

简介&#xff1a; 本文根据2023云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;刘一鸣 | 阿里云自研大数据产品负责人 演讲主题&#xff1a;DataAI时代大数据平台应该如何建设 今天分享的主题是DataAI时代大数据平台应该如何建设&#xf…

Ubuntu系统安装Python3.6.8-Python源代码编译安装-Python环境安装

一、背景 本文将着重介绍如何在Python环境下&#xff0c;安装Python3.6.8&#xff0c;以满足在Ubuntu系统中使用Python的需求。 二、详细步骤 安装Python的方法有很多&#xff0c;本文中我们采用源代码的方式安装Python&#xff0c;首先我们需要下载Python源代码&#xff1a;源…

一起Talk Android吧(第五百五十四回:分享一个Retorfit使用错误的案例)

文章目录 1. 案例场景2. 案例现象3. 原因分析和解决方案3.1 原因分析3.2 解决方案4. 经验总结各位看官们大家好,上一回中咱们说的例子是"解析Retrofit返回的数据",本章回中将分享一个 Retrofit使用错误的案例。闲话休提,言归正转,让我们一起Talk Android吧! 1. …

Unity中Shader法线贴图(上)

文章目录 前言一、法线纹理的作用二、为什么法线贴图长这样&#xff1f;&#xff08;蓝色&#xff09;三、法线贴图能使纹理采样时&#xff0c;进行偏移采样四、在Shader中使用法线贴图1、在属性面板定义一个变量来接收法线贴图2、在使用前声明 _NormalTex3、在片元着色器中&am…

git使用及常用命令

在初入公司中&#xff0c;若使用的是git管理工具&#xff0c;需要做以下步骤&#xff1a; 1&#xff0c;常用命令在&#xff1a; &#xff08;1&#xff09;&#xff0c;git config --global user.name xxx(名字) //若不设置 那么下次提交代码时会报错 其次该设置名字和…

华为模拟器dhcp实验

实验需求&#xff0c;pc1 pc2 pc3 获取到地址且能ping通&#xff0c;pc1 pc2 为地址池模式&#xff0c;pc3为接口模式 上配置 #sysname AR1# dhcp enable # interface GigabitEthernet0/0/0ip address 10.0.47.254 255.255.255.0 dhcp select relaydhcp relay server-ip 10.0…

李宏毅2023机器学习作业HW05解析和代码分享

ML2023Spring - HW5 相关信息&#xff1a; 课程主页 课程视频 Sample code HW05 视频 HW05 PDF 个人完整代码分享: GitHub | Gitee | GitCode 运行日志记录: wandb P.S. HW05/06 是在 Judgeboi 上提交的&#xff0c;完全遵循 hint 就可以达到预期效果。 因为无法在 Judgeboi 上…

windows上安装MySQL Server.

进入官网 MySQL 找到 下载&#xff0c;并点进入。 往下翻&#xff0c;找到社区下载&#xff0c;进入页面 选择 Mysql community Server 选择系统&#xff0c;下载 之后解压。 将解压文件夹下的bin路径添加到变量值中 配置初始化的my.ini文件 [mysqld] # 设置3306端口 port330…

YOLOv5 学习记录

文章目录 整体概况数据增强与前处理自适应Anchor的计算Lettorbox 架构SiLU激活函数YOLOv5改进点SSPF 模块 正负样本匹配损失函数 整体概况 YOLOv5 是一个基于 Anchor 的单阶段目标检测&#xff0c;其主要分为以下 5 个阶段&#xff1a; 1、输入端&#xff1a;Mosaic 数据增强、…

Parity Game——种类并查集、权值并查集、离散化

题目描述 思路 怎么得到这个序列中每一段的关系&#xff1f; 我们可以把这个只包含0和1的序列看作一个数组&#xff0c;0表示当前位置为0&#xff0c;1表示当前位置为1&#xff0c;利用前缀和的性质可以知道某一段中所包含的1的数量sum1 a[r] - a[l-1] 如果sum1为偶数&…

【0到1学习Unity脚本编程】第一人称视角的角色控制器

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;【0…

深信服AC流量管理技术

拓扑图 一.保证通道针对修仙部&#xff0c;访问网站&#xff0c;邮件&#xff0c;DNS&#xff0c;IM&#xff0c;办工 OA&#xff0c;微博论坛网上银行等常见应用保证带宽最低 50%&#xff0c;最高 100% 1. 先新建线路带宽 2.新增流量管理通道&#xff08;保证关键应用&#x…

吾爱破解置顶的“太极”,太好用了吧!

日常工作和娱乐&#xff0c;都需要用到不同类型的软件&#xff0c;哪怕软件体积不大&#xff0c;也必须安装&#xff0c;否则到用时找不到就非常麻烦了。 其实&#xff0c;很多软件不一定一样不剩地全部安装一遍&#xff0c;一方面原因是用的不多&#xff0c;另一方面多少有点…

安装第三方包报错 error: Microsoft Visual C++ 14.0 or greater is required——解决办法

1、问题描述 手动安装第三方软件时&#xff0c;可以使用setup.py&#xff0c;来安装已经下载的第三方包。一般文件下会存在setup&#xff0c;在所要安装库的目录下的cmd执行&#xff1a;python setup.py install报错&#xff1a;error: Microsoft Visual C 14.0 or greater i…

【LeetCode】二叉树OJ

目录 一、根据二叉树创建字符串 二、二叉树的层序遍历 三、二叉树的层序遍历 II 四、二叉树的最近公共祖先 五、二叉搜索树与双向链表 六、从前序与中序遍历序列构造二叉树 七、从中序与后序遍历序列构造二叉树 一、根据二叉树创建字符串 606. 根据二叉树创建字符串 - …