接口自动化-代码实现

接口自动化基础

1、接口自动化测试

  • 接口自动化:使用工具或代码代替人对接口进行测试的技术
  • 测试目的: 防止开发修改代码时引入新的问题
  • 测试时机:
    • 开发进行系统测试转测前,可以先进行接口自动化脚本的编写
    • 开发进行系统测试转测后,优先进行系统测试用例的执行,再进行接口自动化脚本的编写

2、接口自动化测试流程

1)选取自动化测试用例

  • 优先级高(先实现业务流程用例、后实现单接口用例)
  • 功能稳定

2)搭建自动化测试环境

  • 核心技术
    • 编程语言:Python
    • 测试框架:pytest
    • 接口请求:requests
      • 安装:pip3 install requests
      • 验证:pip3 show requests

3)搭建自动化测试框架

4)代码实现自动化

5)输出测试报告

6)实现持续集成

3、接口自动化测试框架

1)接口自动化框架

接口自动化框架就是基于应用服务器和数据库进行case管理,具体包含API封装、数据库封装、测试数据参数化和代码优化断言封装等

2)接口自动化框架设计思路

  1. 搭建集成框架------定义项目目录结构
  2. 通用功能类封装------封装通用功能如:数据库工具等
  3. 接口对象封装与调用------封装接口API对象+PyTest框架编写测试脚本
  4. 测试数据参数化------测试数据json文件设计、参数化实现
  5. 用例组织运行------组织测试用例运行,生成测试报告

3)搭建基础框架---定义项目目录结构

  • api------封装接口信息
  • scripts------编写测试脚本
  • data------存放测试数据
  • report------存放测试报告
  • common------存放通用工具类
  • config.py------定义项目配置信息
  • pytest.ini------pytest配置文件

Requests库

1.介绍
  • requests库:python中的"浏览器",基于urllib的HTTP库
  • 安装:pip install requests
  • 操作步骤
    • 导包
    • 发送接口请求
    • 查看响应数据
2.Requests发送请求

1)requests处理json类型

python 复制代码
requests.请求方法(url, params=None, data=None, json=None, headers=None)
  • 常见方法:get,post,put,delete
  • url:请求的url地址
  • params:请求的查询参数
  • data:请求体为form表单参数
  • json:请求体为json参数
  • headers:请求头参数

2)requests处理multipart/form-data类型

python 复制代码
requests.请求方法(url, data=None, json=None, headers=None, files=None)
  • files:上传的文件
3.Requests查看响应
属性/方法 说明
response.status_code 状态码
response.json() json形式的响应内容
response.text 文本形式的响应内容
response.url 请求url
response.encoding 查看响应头部字符编码
response.headers 头信息
response.cookies cookies信息
登录接口调试-登录
  • 需求:使用requests访问登录接口,并查看响应结果
  • 接口信息
    • url:http://kdtx-test.itheima.net/api/login
    • 方法:post
    • 请求数据
      • 请求头:Content-Type:application/json
      • 请求体:{"username":"admin","password":"HM_2023_test","code":"2","uuid":"验证码接口返回结果中的数据值"}
python 复制代码
# 需求:登录成功

# 导包
import requests

# 发送请求
url = "http://kdtx-test.itheima.net/api/login"
header_data = {
    "Content-Type": "application/json"
}
login_data = {
    "username": "admin",
    "password": "HM_2023_test",
    "code": 2,
    "uuid": "26bdc08fac934d6b805e49645b2701ae"
}
response = requests.post(url=url, headers=header_data, json=login_data)

# 查看响应
print(response.status_code)
print(response.json())

接口对象封装

1、接口自动化代码核心思想?

核心思想:代码分层思想

  • 测试脚本层
    • 重点关注测试数据准备和断言
    • 重点关注业务流程的处理
    • 直接调用接口对象层发送请求
  • 接口对象层
    • 根据接口API文档封装
    • 重点关注如何调用接口
    • 请求参数从测试脚本层传递
    • 接口响应结果返回给脚本层
      2、代码中如何解决接口之间的数据依赖?
      使用python中变量或属性传递接口依赖数据
      例如:
      #提取登录成功之后的token数据并保存在类的属性中TestContractBusniess.token = res_l.json().get("token")
      3、Requests中如何处理multipart/form-data请求数据?
python 复制代码
# 读取文件
f = open("test.pdf", "rb")
# 设置请求数据
response = requests.post(url=xxx, files={"file": f}

数据驱动

数据驱动:以测试数据驱动脚本执行,维护焦点从脚本转向测试数据的一种自动化测试设计模式

好处:代码与测试数据分离,增强代码的可维护性

如何实现?

pytest中parametrize装饰器

  • 作用:遍历所有测试数据并运行测试方法
  • 语法
    • @pytest.mark.parametrize(②保存数据参数名, ①测试数据)
      def test_method(self, ③参数名)
      pass
  • 示例
    • test_data=[("manager", "123456),("","123456"),("itheima","123456")]
    • @pytest.mark.parametrize("mobile, password", test_data)
      def test_method(self, mobile, password)
      pass
json文件实现数据驱动

1)json文件记录测试数据

python 复制代码
[
  {
    "username": "admin",
    "password": "HM_2023_test",
    "status": 200,
    "message": "成功",
    "code": 200
  },
  {
    "username": "",
    "password": "HM_2023_test",
    "status": 200,
    "message": "错误",
    "code": 500
  },
  {
    "username": "admin111",
    "password": "HM_2023_test",
    "status": 200,
    "message": "错误",
    "code": 500
  }
]

2)封装读取json文件

python 复制代码
# 读取json文件
def build_data(json_file):
    # 定义一个空列表
    test_data = []
    # 打开json文件
    with open(json_file, "r", encoding="utf-8") as f:
        # 加载json文件数据
        json_data = json.load(f)
        # 循环遍历测试数据
        for case_data in json_data:
            # 转换数据格式[{}, {}, {}] ==> [(), (), ()]
            username = case_data.get("username")
            password = case_data.get("password")
            status = case_data.get("status")
            message = case_data.get("message")
            code = case_data.get("code")
            test_data.append((username, password, status, message, code))
    # 返回处理后的测试数据
    return test_data

3)测试用例方法中利用参数化取出测试数据

python 复制代码
# 登录成功
    @pytest.mark.parametrize("username, password, status, message, code", build_data(json_file=config.BASE_PATH + "/data/login.json"))
    def test01_login_success(self, username, password, status, message, code):
        login_data = {
            "username": username,
            "password": password,
            "code": 2,
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)
        # 断言响应状态码为200
        assert status == response.status_code
        # 断言响应数据包含'成功'
        assert message in response.text
        # 断言响应json数据中的code值
        assert code == response.json().get("code")

项目配置文件

用于维护项目相关的基本信息,如:URL、项目路径等

python 复制代码
# 导包
import os
# 定义环境域名
BASE_URL = "http://kdtx-test.itheima.net"
# 统一文件路径
BASE_PATH = os.path.dirname(__file__)
print(BASE_PATH)

当测试用例代码中需要用到url或项目路径时,如:

python 复制代码
self.url_verify = config.BASE_URL + "/api/captchaImage"
json_file=config.BASE_PATH + "/data/login.json"

Allure测试报告

  • 介绍
    • 能生成美观易读的报告
    • 支持多种开发语言,如java、python等
    • 能快速上手
  • 操作步骤
    • 生成测试结果文件(json文件)
    • 使用allure命令生成在线报告
  • 帮助文档:https://docs.qameta.io/allure
1)生成测试结果文件

使用步骤:

  1. 将pytest配置文件中的命令行参数加上如下代码

    python 复制代码
    --alluredir report
  2. 编写好测试脚本后,在命令行行中运行pytest

    python 复制代码
    [pytest]
    addopts =-s --alluredir report
    testpaths=./scripts
    python_files = test*.py
    python_classes = Test*
    python_functions = test*
  3. 程序运行结束后,会在项目的report目录中生成一些json文件

2)使用allure命令生成在线报告

安装:

1.https://github.com/allure-framework/allure2/releases 下载 allure

2.解压缩安装包到一个不包含中文路径的目录

3.将压缩包内的 bin 目录配置到 path 系统环境变量

4.右键我的电脑 - 属性 - 高级设置 - 环境变量 - 找到系统环境变量的path项 - 增加 allure到bin目录

5.在命令行中输入 allure--version 命令,能显示allure版本信息,即为成功

总结:

1)终端输入 pytest 运行

2)终端输入 allure serve report 命令 得到报告

一些问题:

①allure依赖于jdk环境,需要先安装jdk1.8.0并配置环境变量(按照csdn上的文章配置了半天都没用,最后是直接将bin文件的绝对路径添加到path环境变量中才成功)

②如果在pycharm终端输入allure serve report 报错提示"allure不是内部或外部命令",可以直接使用allure路径+serve report,即D:\software\allure-2.30.0\bin\allure serve report

相关推荐
在下不上天5 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
SEVEN-YEARS9 分钟前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow
EterNity_TiMe_13 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
Suyuoa25 分钟前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
好看资源平台1 小时前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
进击的六角龙2 小时前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂2 小时前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc2 小时前
Python简介以及解释器安装(保姆级教学)
开发语言·python
孤独且没人爱的纸鹤2 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
羊小猪~~2 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j