Pytest-BDD流程性接口测试和自定义测试报告

news2024/11/24 14:33:37

引言

上篇文章《Pytest-BDD实现接口自动化测试,并附全部代码》我们介绍了怎么使用Pytest-BDD实现接口自动化测试,本篇文章主要介绍怎么去做流程性接口测试和自定义测试报告相关内容。

流程性接口测试

流程性接口测试,指的是一个业务流需要多个接口完成,比如查询商品,然后根据查询接口返回的商品ID,去购买商品。实现的方式为,调用查询接口后,将接口返回的商品ID保存,然后购买商品时,使用保存的商品ID去调用购买接口。

feature文件

Feature: 购买商品接口测试

  Scenario: 查询商品接口
    Given 初始化
    Given 登录
    When 调用 "/search" 接口
    When 使用 "post" 请求
    When 参数类型 "json"
    When 请求头 "{'Content-Type': 'application/json'}"
    When 参数 "{'key_word': '茶叶'}"
    When 校验类型 "包含校验"
    When 校验文本 "成功"
    When 保存接口返回字段 "id"

  Scenario: 购买商品接口
    Given 登录
    When 调用 "/buy" 接口
    When 使用 "post" 请求
    When 参数类型 "json"
    When 请求头 "{'Content-Type': 'application/json'}"
    When 参数 "{'Id': '$id'}" 使用保存参数 "id"
    When 校验类型 "包含校验"
    When 校验文本 "成功"
    Then 调用成功

python文件

创建一个save_key字典,将步骤中要保存的参数存到字典中,然后在请求接口时,将$修饰的字符串替换成要使用的参数。其他行为的实现代码,参考上一篇文章。



@when(parsers.parse('保存接口返回字段 "{save_data}"'))
def save_data(api_tool, save_data):
    test_data = {'test_result': {'text': api_tool.result_text, 'type': api_tool.test_result_type,
                                 'result_type': api_tool.result_type, 'key': api_tool.result_key}}
    test_body = {'URL': api_tool.api, 'method': api_tool.methods, 'data_type': api_tool.data_type,
                 'headers': api_tool.headers, 'params': api_tool.params, 'file': api_tool.file}
    response = api_tool.call_api(test_body)
    logging.info('接口返回:' +  str(response.text))
    keys = analysis_dict(response.text, save_data)
    save_key[save_data] = keys
    if api_tool.is_logout:
        do_logout(api_tool.headers['ticket'])
    if api_tool.test_result_type is not None:
        assert_tool(response, test_data)


@when(parsers.parse('参数 "{re_params}" 使用保存参数 "{save_params}"'))
def use_save_data(api_tool, re_params: str, save_params):
    str_params = re_params.replace('$' + save_params, save_key[save_params])
    api_tool.params = ast.literal_eval(str_params)


@then('调用成功')
def asserts(api_tool):
    test_data = {'test_result': {'text': api_tool.result_text, 'type': api_tool.test_result_type, 'result_type': api_tool.result_type, 'key': api_tool.result_key}}
    test_body = {'URL': api_tool.api, 'method': api_tool.methods, 'data_type': api_tool.data_type, 'headers': api_tool.headers, 'params': api_tool.params, 'file': api_tool.file}
    response = api_tool.call_api(test_body)
    logging.info('接口返回:' +  str(response.text))
    if api_tool.is_logout:
        do_logout(api_tool.headers['ticket'])
    if api_tool.test_result_type is not None:
        assert_tool(response, test_data)

测试报告

使用pytest-html和junitxml生成报告

pytest框架中,可以使用pytest执行命令,指定生成junit格式的测试报告,使用方法:

pytest --junitxml=junit.xml test.py

如果想用生成html格式的测试报告,可以使用pytest-html插件,使用方法:
首先安装pytest-html

pip install pytest-html

然后通过pytest命令,执行测试的时候指定生成报告,–self-contained-html这个选项的作用是将 CSS、JavaScript、图片等资源都嵌入到生成的 HTML 文件中,使得测试报告可以独立于外部资源而展示,无需担心样式或脚本文件因路径问题而加载失败。

pytest --html=report.html --self-contained-html test.py

自定义测试报告

在项目根目录下,创建conftest.py文件,使用pytest的钩子函数来实现。没执行一次用例,钩子函数会获取执行结果,根据执行结果来封装自己的测试报告。

import pytest

@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
    # 执行默认的钩子
    outcome = yield
    report = outcome.get_result()

返回的report中,包含了测试结果信息
在这里插入图片描述

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

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

相关文章

【九芯电子】智能声控台灯语音模块,低成本语音识别芯片

在当今数字化时代,智能家居已经逐渐成为现代生活中的一部分。从温度调节到安全监控,我们对家居设备的控制已经更加便捷。然而,随着生活节奏的加快,用户对于更便捷的家庭控制方式的需求也在不断增加。针对这一关键的问题&#xff0…

HBO引爆血腥浪漫,尺度全开必看的影视剧推荐

一直以来我们的僵尸题材电影风靡全国,同时西方也创作出吸血鬼题材、丧尸题材的影视剧也是层出不穷,那今天我们就来探讨下吸血鬼题材的影视剧。 吸血鬼题材的影视剧,一直以来都是观众的宠儿。从光鲜亮丽的《暮光之城》到狗血多角恋的《吸血鬼日…

河北移动:核心系统数据库成功完成整体迁移 ,实现全栈国产|OceanBase案例

本文作者:移动通信集团河北有限公司架构规划专家,房瑞 项目背景: 中国移动通信集团河北有限公司一直在积极响应国家及集团的号召,以磐舟&磐基云原生为底座,结合国产浏览器、中间件、数据库、操作系统和服务器等&a…

树莓派4b无法选择声音输入输出设备问题

问题一:选择不了3.5mm音频输出口,也看不到音频输入设备 运行命令 :pactl load-module module-udev-detect tsched0 pactl load-module 命令用于在运行时加载新的模块。module-udev-detect 是PulseAudio的一个模块,它负责自动检测系…

【kubernetes】k8s对外服务之Ingress

一、Ingress介绍 1、Ingress的简介 K8S集群外部的客户端访问K8S集群内部的方案 基于Service实现:NodePort、LoadBalancer、externalIPs 只能支持四层代理转发,如果K8S集群规模较大运行的业务服务较多,NodePort端口/externalIPs管理成本…

Python套接字综合应用(UDP篇)

Python套接字综合应用(UDP篇) 1、 主要功能 UDP客户端实现UDP服务端实现输出字体颜色控制响应捕获键盘CtrlC信号套接字异常捕获及处理通信报文16进制格式化输出 2、 Python UDP套接字应用 Windows程序在WinServer2022上验证运行,Linux程序在银河麒麟V10上验证运…

[Java]面向对象-抽象类/方法接口适配器设计模式

抽象类 一个类中如果存在抽象方法,那么该类就必须申明为抽象类 定义格式: 如果一个类包含抽象方法,那么该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。 abstract class 类名…

haproxy七层代理详解之-完整安装部署流程及负载均衡实现-及热更新方法

一.负载均衡 1.1负载均衡时什么 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了衡将特定的业务(web服务、公司…

嵌入式生物打印是什么?有啥优势?

大家好,今天我们来了解一下这篇《Embedded 3D bioprinting–An emerging strategy to fabricate biomimetic & large vascularized tissue constructs》发表于《Bioactive Materials》的一篇综述,在组织工程和再生医学领域,传统方法存在一…

【JUC】04-synchronized关键字

1. 悲观锁与乐观锁 悲观锁:认为自己在使用数据的时候一定会有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。synchroized和Lock的实现类都是乐观锁:认为自己在使用数据时不会有别的线程修改数据…

激光尘埃粒子计数器在洁净室监测中的关键应用(原理、类型、选型)

激光尘埃粒子计数器的应用 激光尘埃粒子计数器广泛应用于多个领域,包括但不限于: 权威机构:如血液中心、防疫站、疾控中心、质量监督所等。 生产企业和科研部门:如电子行业、制药车间、半导体、光学或精密机械加工、塑胶、喷漆…

构建流水线生产管理创新的RFID智能管理系统应用方案

在当今竞争激烈的制造业环境中,流水线生产的高效、精准和智能化管理已成为企业获取竞争优势的关键。然而,传统的流水线生产管理方式在应对日益复杂的生产需求和多变的市场环境时,逐渐暴露出诸多难点和痛点。 一、流水线生产管理的难点与痛点…

OCR调研

OCR调研 一、介绍 OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字转换为计算机可处理格式的技术。OCR技术经历了从传统OCR到基于深度学习的OCR的转变。深度学习OCR技术通过模拟人脑神经元结构处理文本和图像数据&am…

打造高效存储与访问体验:NFS共享携手Nginx负载均衡,赋能企业级数据流通与性能优化

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团团-CSDN博客 目录: 前言&#…

AIGC实践|AI助力一张照片生成百变写真

前言: 在之前的文章中,我们已经领略了 AI 在动态有声绘本、小游戏开发、视频短片制作以及包装设计等领域的神奇应用,在本篇文章中,我将尝试利用AI辅助,使用一张照片生成个性化写真集。充分满足工作艺术照、各地郊游打…

关于自己部署AI大模型踩的坑(二)—— GPU篇

最近一直在研究如何打算属于我自己的J.A.R.V.I.S.(钢铁侠中的机器人管家)。 上一篇写了我最近在部署自己的大模型,使用llama3.1, 和通义千问2。虽然最终结果也是成功了,过程却十分地坎坷。 所以这一篇文章一是总结其中…

linux学习--第一天

--linux基础命令 -本地安装 1. sudo dpkg -i 软件包 :安装单个软件包 2. sudo dpkg -i * .deb :安装多个软件包 3. sudo dpkg -L 软件包:列出软件在系统中文件路径 4. sudo dpkg -s 软件包:列出软件包的安装状态 5. …

页面布局-1

1.定位 CSS 属性名功能属性值position设置定位 static:不定位,默认值。 relative:相对定位。 absolute:绝对定位。 fixed:固定定位 left与参照点左侧距离长度right与参照点右侧距离长度top与参照点上侧距离长度bottom…

【数据结构初阶】队列

hello! 目录 一、概念与结构 二、队列的实现 Queue.h Queue.c test.c 一、概念与结构 1、概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。 入队列:进行插入操作…

音视频概要

YUV原理的讲解 YUV是一种常见的视频像素格式,经常用在视频编解码上面,YUV分别由Y分量和U、V分量(红色投影Cr)组成。Y分量指的是亮度分量,也就是我们经常说的灰阶值,相当于一副灰色的图像。而U分量和V分量表示的是色度分量&#x…