【Python 5】----Pytest接口自动化(实现基础的测试框架)

news2024/9/21 0:44:35
  • 安装准备

  • 安装好pytest的环境及allure环境

1. 安装pytest    pip insatll pytest

2.安装allure (需要确保安装了jdk环境)

  安装allure命令行:  访问allure官网,下载allure2.13.5的安装包,将其bin路径
添加进环境变量path中

  在cmd里面输入allure  version来进行版本的安装
  • 接口关键字封装 

  • 定义:将接口测试过程中常用的操作和验证封装成可复用的关键字 (或称为函数、方法),以提高测试代码的可维护性和可复用性

  • 接口关键字封装方式

  1. 发送请求    2.提取数据
from urllib import response
import requests
import  jsonpath
import json

#关键字驱动

#发送请求 ,8种   post/get
class Apikey():
    def get(self,url,params=None,**kwargs):
        """
        :param url: 请求的URL
        :param params: 需要拼装在URL当中的参数
        :param kwargs: 其它参数,具体参考requests.post()
        :return: 响应数据
        """
        return requests.get(url=url,params=params,**kwargs)

   #发送post请求
    def post(self,url, data=None, json=None, **kwargs):
        """
        :param url: 请求的URL
        :param data: 请求参数
        :param json: json格式请求数据
        :param kwargs: 其他参数
        :return: 响应数据
        """
        return  requests.post(url=url,data=data,json=json,**kwargs)

#提取数据  数据源{msg:"登陆成功" }   jsonpath:$.msg
    def get_text(self,response,key):
        """
        :param response: 响应数据
        :param key: 关键字
        :return: 返回
        """
        value_list = jsonpath.jsonpath(response, key)
        return value_list[0]
#函数入口
if __name__ == '__main__':
 """
 1.实例化对象
 2.通过对应类调用对应方法
 3.提取数据
 """
ak=Apikey()
#准备好四要素
# 模拟登陆接口请求
data = {
    "accounts": "hami",
    "pwd": "123456",
    "type": "username"
}
params = {
    "application": "app",
    "application_client_type": "weixin",
}
res = ak.post(url="http://shop-xo.hctestedu.com/index.php?s=api/user/login",params=params, data=data)
print("响应数据:",res.json())
#提取数据
text=ak.get_text(res.json(), "$.msg")
print("提取数据:",text)
  • 案例二:得到数据是字符串,调用方法时怎么实现?

  • 在框架的应用

  • pytest+allure进行报告优化

  • @allure.step("生成对应测试步骤)

  • @allure.title("测试用例标题“)

  • 当一个用例里面调用多个接口时,这样语法更加简洁,生成的报告有对应层级关系

@allure.title("测试用例标题")
def test_case_name():
    with allure.step("第一步:XXXXX接口"):
        # 具体的接口请求代码
    with allure.step("第二步:XXXXX接口"):
        # 具体的接口请求代码
"""
  • 接口测试关联及全局变量的应用

  • 一个方法中对应的变量是可以调用的

  • 不同方法中的变量,可以设置对应的全局变量去进行调用(先定义后赋值)

   

  • 有时候某个变量全局都需要使用。利用pytest的测试夹具对应实现(固定命名 conftest.py)

   

  • 固定变量不会进行修改---常量命名需要大写,用一个文件去维护

  • 日志的封装

  • 在控制台上打印日志

import logging
# 设置全局日志级别为DEBUG
logging.basicConfig(level=logging.DEBUG,format="%(asctime)s %(levelname)s %(filename)s (%(lineno)d) : %(message)s ")
logging.debug("debug信息")
logging.info("info信息")
logging.warning("warning信息")
logging.error("error信息")
logging.critical("critical信息")
  • 日志写入文件里面

import logging
file = open("log.log", mode="a", encoding="utf-8")
# 设置全局日志级别为DEBUG
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(levelname)s %(filename)s 
(%(lineno)d) : %(message)s ",stream=file)
logging.debug("debug信息")
logging.info("info信息")
logging.warning("warning信息")
logging.error("error信息")
logging.critical("critical信息")
  • Pytest框架中打印日志信息

  1. pytest是日志开关  pytest.ini(不能改名字,不能在文件里面写中文)

   

日志格式化:

%(asctime)s :字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(levelname)s : 打印日志级别名称
%(filename)s  : 打印当前执行程序名
%(lineno)d : 打印日志的当前行号
%(message)s : 打印日志信息
  1. 需要每个测试用例都产生对应日志信息  :测试夹具--在conftest里面(当执行一个case会自动调用这个方法,把数据传过来给到call,yield生成器相当于返回对象,调用完成后会回到调用的方法这;而return会返回对象后不回到调用方法这)

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

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

相关文章

flutter选择国家或地区的电话号码区号

1.国家区号列表(带字母索引侧边栏) import package:generated/l10n.dart; import package:widget/login/area_index_bar_widget.dart; import package:flutter/material.dart; import package:flutter_screenutil/flutter_screenutil.dart;class LoginA…

位图、布隆过滤器

普通的哈希表增删查改的效率的确达到了令人满意的O(1),但是本质还是以空间换时间来实现的。并且哈希表中是直接存储数据的,应对一些海量数据处理的问题可能就会造成空间不足的问题。 加入现有40亿个无符号整形数字,设…

RPC基础知识回顾

RPC基础知识回顾 1、先认识一下大家熟悉的HTTP 大家都了解HTTP吧。相信项目中也用过一些。 比如: JDK自带的老旧的HttpURLConnection,封装写的很累,java8之前基于HTTP1.0。在java9开始支持Http2.0Spring的其中RestTemplate都是基于HTTP/1.1的请求。最新的还有Sp…

SpringCloudEureka理论与入门

文章目录 1. 前置工作1.1 搭建 user-server1.1.1 pom1.1.2 po,mapper,controller1.1.3 yml1.1.4 启动类1.1.5 启动并访问 1.2 搭建 order-server1.2.1 pom1.2.2 po mapper controller1.2.3 yml1.2.4 启动类1.2.5 启动并访问 1.3 两个服务通信 2. Eureka2…

当HR问你:“对于你申请的这个岗位,你觉得你欠缺什么?”【文章底部添加进大学生就业交流群】

当HR问这个问题时,你可以展示自我认识和诚实,同时展现你对自己的积极态度和学习能力。以下是一个可能的回答示例: "对于我申请的这个岗位,我认为我可能欠缺一些行业特定的经验。虽然我在相关领域有一定的工作经验和技能&…

H5 网课宣传引导跳转微信单页源码

源码名称:网课宣传引导跳转微信单页 源码介绍:一款网课销售宣传单页源码,源码支持一键复制微信号并跳转打开微信功能。 需求环境:H5 提示:源码仅支持复制微信和跳转打开微信,客户需自行贴贴搜索添加好友…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的石头剪刀布手势识别系统详解(深度学习模型+UI界面代码+训练数据集)

摘要:本篇博客深入探讨了使用深度学习技术开发石头剪刀布手势识别系统的过程,并分享了完整代码。该系统利用先进的YOLOv8、YOLOv7、YOLOv6、YOLOv5算法,并对这几个版本进行性能对比,如mAP、F1 Score等关键指标。文章详细阐述了YOL…

【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

碳实践 | 基于“界、源、算、质、查”五步法,实现企业组织碳核算

碳排放核算是夯实碳排放统计的基础,提高碳排放数据质量的关键,同时,将推动能耗“双控”向碳排放“双控”转变。总体来看,碳核算分为区域层面、组织层面和产品层面的碳核算,这三个层面的意义和计算方法完全不同。本文将…

SingleSpa微前端基本使用以及原理

先说说singleSpa的缺点 不够灵活 不能动态加载css文件css不隔离没有js沙箱的机制 ( 没有全局对象 每次切换的应用 都是同一个window ) 但是刚刚接触微前端 可以了解一下微前端的基础使用 qiankun微前端框架已经很成熟 也是基于singleSpa来实现的 点击跳转qiankun的基础使用 大…

6.同步异步、正则表达式

JS执行机制 js的特点:单线程,同一时间只能做一件事 可以通过多核CPU解决这个问题,允许js脚本创建多个线程,于是js出现了同步和异步 同步 程序执行的时候按照顺序依次执行 异步 程序执行的时候,会跳过某个步骤继续…

装饰者模式-C#实现

可以使用装饰者模式来动态地给一个对象添加额外的职责。 装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能。 在装饰者模式中各个角色有: 抽象构件(Phone)角色&#…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十三)-DL-AoD定位

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

STM32点亮LED灯与蜂鸣器发声

STM32之GPIO GPIO在输出模式时可以控制端口输出高低电平,用以驱动Led蜂鸣器等外设,以及模拟通信协议输出时序等。 输入模式时可以读取端口的高低电平或电压,用于读取按键输入,外接模块电平信号输入,ADC电压采集灯 GP…

EM算法详解

EM(Expectation-Maximum)算法也称期望最大化算法,曾入选“数据挖掘十大算法”中,可见EM算法在机器学习、数据挖掘中的影响力。EM算法是最常见的隐变量估计方法,在机器学习中有极为广泛的用途,例如常被用来学习高斯混合模型(Gaussian mixture model,简称GMM)的参数;隐…

3D产品配置器帮助您更快进入市场的 5 种方式

如果您的电子商务商店可以从产品配置器的使用中受益(而且大多数都可以),您还应该知道,此功能还可以帮助您的公司采用更具创新性的产品开发姿态。 更简单地说:它可以帮助您更快地构建更好的产品。 继续阅读以了解3D 产…

FPGA Vivado环境下实现D触发器

题目要求:使用Verilog HDL语言设计一个D触发器。请提交程序源代码和Word格式的作业文档,作业文档中应给出程序源代码及RTL分析原理图。 D触发器的工作原理: 初始状态下,触发器处于复位状态,输出为复位信号的稳定状态…

springboot266基于Web的农产品直卖平台的设计与实现

农产品直卖平台的设计与实现 摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了&#x…

2024 前端javaScript+ES6

JavaScript 基础 1、基本数据类型: 1.1 基本数据类型: Number(数值):表示数字,包括整数和浮点数。例如:5、3.14。 String(字符串):表示文本数据&#xff…

Docker容器化技术(互联机制实现便捷互访)

容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。 1.自定义容器命名 连接系统依据容器的名称来执行。因此,首先需要自定义一…