【接口自动化_06课_Pytest+Excel+Allure完整框架集成】

一、logging在接口自动化里的应用

1、设置日志的配置,并收集日志文件

日志的设置需要在pytest.ini文件里设置。这个里面尽量不要有中文

2、debug日志的打印

pytest.ini文件的开关一定得是true才能在控制台打印日志


import allure
import pytest
from P06_PytestFrame.api_keyword.api_key import ApiKey
import logging

@allure.title("DS01-通过用户名可以正确登录")
def test_login():

    # 1. 最重要的日志打印
    logging.basicConfig(level=logging.DEBUG)
    logging.error("执行用例:DS01-通过用户名可以正确登录")



    url = "http://shop-xo.hctestedu.com/index.php?s=/api/user/login"
    params = {"application": "app", "application_client_type": "weixin"}
    data = {"accounts": "hami", "pwd": "123456", "type": "username"}

    ak = ApiKey()

    # 2. 发送请求
    res = ak.post(url=url, params=params, data=data)
    print(f"响应结果是:{res.json()}")

    # 3.断言
    sj_res = ak.get_text(res.json(), "$.msg")
    qw_res = "登录成功1"
    assert sj_res == qw_res, "结果不一致"


 控制台运行结果

日志收集文件里的存储结果

3、钩子函数

钩子函数放在conftest.py文件里

pytest官网:pytest: helps you write better programs - pytest documentation

return永远不执行后面的

迭代器会往复执行

二、所有接口的区别 

接口四要素不同--数据提取出来--就是数据驱动(DDT)

"数据驱动测试"(Data-Driven Testing,简称DDT)是一种软件测试方法,使用不同的数据集来驱动测试用例的执行。通过将测试数据与测试逻辑分离,DDT可以提高测试覆盖率、增强测试代码的可维护性,并减少重复代码。

1、数据格式

把所有的数据进行提取 - DDT(数据驱动)

格式:
单元素:每次拿一个数据(有多少个就多少次)
()--元组,无序
[] --列表 ,有序
{}--字典 , 有序(python3.7开始字典有序,之前的无序)


嵌套元素:每次拿一组数据,要取其中的值(可以通过下标去获取)
([],[])--元组里套列表 
[(),()]  --列表里套元组,因为元组无序,所以这个不能通过下标获取
[{},{}]  --列表套字典- 用的最多的一种格式 


方法:--装饰器
@pytest.mark.parametrize("变量名",数据源)


在运行过程当中,数据源有多少个就会执行多少次

1)单元素数据驱动

data1 = ("hami", "xiaomi", "sanfeng")  元组类型

获取元素的坐标结果

2)嵌套元素数据--列表里套元组

data2 = [("hami","123456"),("xiaomi","111111"),("sanfeng","22222")]

通过下标获取其一数据

 3)嵌套元素数据--列表里套字典

data3 = [{"name": "hami", "password": "123456"}, {"name": "xiaomi", "password":"11111"},{"name": "sanfeng", "password": "222222"}]

三、接口自动化用例模板的编写

要求:

1、编号和行号一致

 

2、 标黄色都是必填

3、请求数据的参数类型

data是表单形式提交,Json是请求头是json的去提交,files是上传文件的接口需要使用

4、断言的字段

5、程序执行完,自动回写的数据

四、读取文件的程序-FileDataDriver.py

用来读取和写入excel \ yaml文件。

利用数据驱动,把excel文件读取成功

五、config.py

用来存放常用的变量(文件路径、读取的sheet页),其中,常量要大写

要从文件的根目录的下一级开始读取文件,所以,config.py文件要在文件的根目录的下一级

如图,是day06.P06_PytestFrame

自己的代码-根目录是day06,下一级是P06_PytestFrame

 

下载指令:pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

六、data的路径

下面这些文件是在同一级目录里

 

如果是基于上一层目录下的一层(在二级目录里),则是../

如果只是处于同级目录,是./

七、核心执行器--testcase

拿到数据,进行解析,发送请求

1、反射

class ApiKey:
    name = "hami"

    def get(self):
        print("这是get方法")

    def post(self, url, data):
        print("这是post方法")
        print("url", url)
        print("data", data)
        return "ok"


# 反射:通过[类(实例化对象)和方法名]找到对应的方法
# 反射的语法:getattr(实例化对象, 方法名/属性名)**参数 ,返回值:方法本体

ak = ApiKey()
method = "post"
method_fun = getattr(ak, method)#(类,方法)
method_fun(url="1111",data="2222")

tips:

# eval() # 把字符串 转成[有效的表达式]
#
# a = "1+2"
# print(eval(a)) #3


# data = "{'name':'hami'}"
# print(type(eval(data))) #dict

 2、断言

拿到响应数据,和预期数据,断言比较 

 3、动态生成标题:

使用固定的方法,动态生成标题 

 

然后生成的标题

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java中实现一维数组逆序交换的完整解决方案

引言 ❤❤点个关注吧~~编程梦想家(大学生版)-CSDN博客 在日常编程中,处理数组时经常会遇到需要逆序交换数组元素的情况。逆序交换即是将数组的第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,依此类推…

HCIA学习笔记(6)-ACL+NAT

ACL:访问控制列表 访问控制-------在路由器的入或者出接口上,匹配流量,之后产生动作-----只有允许或拒绝 定义感兴趣流量------帮助其他策略去抓流量 匹配规则:至上而下,逐一匹配,上条匹配按照上条执行&…

JavaSE——集合框架二(4/6)-Map集合的遍历方式(键找值,键值对,Lambda)、Map集合案例(需求与分析,问题解决)

目录 Map集合的遍历方式 键找值 键值对 Lambda Map集合案例 需求与分析 问题解决 Map集合的遍历方式 键找值 先获取Map集合全部的键,再通过遍历键来找值。 键值对 把“键值对”看成一个整体进行遍历(较为复杂) Lambda JDK 1.8 开…

Cadence23学习笔记(二)

原理图设计界面中就可以直接新建PCB: 亲测:需要画完原理图,并且DRC通过之后才可以! 放置完元器件之后要规定元件的Footprint ,注意PCB封装名要和库文件中的名字对应: DRC按钮: 点击图标 N, 生成第一网表&…

MAVSDK动态库与静态库及mavsdk_server程序macOS平台编译与安装

1.克隆mavsdk: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译静态库 cmake -Bbuild/default -H. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF 生成makefile 生成成功,开始编译 cmake --build build/default -j8 成功生成libmavsdk.a 开…

给老笔记本安装双系统,太难了(centos+win10)记录一下过程

为什么要装个centos呢? 大学时期的笔记本,一直在吃灰,开机都卡。于是想废物利用一下,做个linux服务器玩,但是也不想直接删除win10,于是就开始开始装双系统。工作中的服务器基本都是centos的,所…

笔记 2 :linux 0.11 中的重要的全局变量 (a)

通过对全局变量的了解,也有助于了解整个代码的逻辑。就跟学习类一样,了解类有哪些成员变量,也有助于了解类的成员函数的功能。 以下介绍全局变量的顺序,符合这两本书的讲解顺序: (1)内存初始化相…

Python 获取今天(当天)、昨天(前一天)、前天(昨天的前一天)的开始时间、结束时间

描述:我这里是封装成DatetimeHelper工具类来调用 1.今天(当天)开始时间、结束时间 from datetime import datetime, timedeltaclass DatetimeHelper:# 获取当前的开始时间、结束时间(datetime类型)staticmethoddef getTodayStartEnd():# 获取当前的日期now datet…

记一次TIDB开启TLS失败导致PD扩容失败案例

作者: Dora 原文来源: https://tidb.net/blog/8ee8f295 问题背景 集群之前由于TIUP目录被删除导致TLLS证书丢失,后续需要重新开启TLS 在测试环境测试TLS开启步骤,导致后续两台PD扩容失败,步骤如下: …

Animate软件基础:库面板

“库”面板(“窗口”>“库”)是存储和组织在 Animate 中创建的元件的位置。还可以存储导入的文件,包括位图图形、声音文件和视频剪辑。 “库”面板可以在文件夹中组织库项目。 此外,可查看项目在文档中的使用频率,按…

JAVA从入门到精通之入门初阶(二)

1. 自动类型转换 自动类型转换:类型范围小的变量可以赋值给类型范围大的变量 byte->int public class java_7_10 {public static void main(String[] args) {//自动类型转换//类型范围小的变量可以赋值给类型范围大的变量 byte->intbyte a 12;int b a;//自动…

微信小程序密码 显示隐藏 真机兼容问题

之前使用type来控制&#xff0c;发现不行&#xff0c;修改为password属性即可 <van-fieldright-icon"{{passwordType password? closed-eye:eye-o}}"model:value"{{ password }}"password"{{passwordType password ? true: false}}"borde…

Linux rsync文件同步工具

scp的不足 1. 性能问题 单线程传输 SCP只使用单线程进行传输&#xff0c;这意味着在传输大文件或大量小文件时&#xff0c;其传输速度和效率可能不如其他多线程工具。 无法压缩数据传输 SCP不支持内置的压缩机制&#xff0c;这在传输大文件时会导致带宽使用效率较低。 2.…

自动驾驶事故频发,安全痛点在哪里?

大数据产业创新服务媒体 ——聚焦数据 改变商业 近日&#xff0c;武汉城市留言板上出现了多条关于萝卜快跑的投诉&#xff0c;多名市民反映萝卜快跑出现无故停在马路中间、高架上占最左道低速行驶、转弯卡着不动等情况&#xff0c;导致早晚高峰时段出现拥堵。萝卜快跑是百度 A…

WIN10开机突然,过一会就自动重启蓝屏DRIVER_IRQL_NOT_LESS_OR_EQUAL

环境&#xff1a; Win10 专业版 DELL7080 问题描述&#xff1a; WIN10开机突然&#xff0c;过一会就自动重启蓝屏DRIVER_IRQL_NOT_LESS_OR_EQUAL 事件日志 解决方案&#xff1a; 1.找到MEMORY.DMP文件内容&#xff0c;分析一下 Microsoft (R) Windows Debugger Version 10…

OSPF.hello数据包

网络掩码---接口发出hello时会携带该接口的掩码 在建立邻居关系时会比较两端设备的掩码&#xff0c;如果掩码不一致则会导致建邻失败------注意&#xff1a;只有以太网链路才会检擦掩码 hello时间和死亡时间&#xff0c;注意这两个参数如果两端对应不上则会导致建邻失败。 可…

【QT】窗口MainWindow

目录 窗口的组成 菜单栏 图形化创建菜单栏 代码创建菜单栏 给菜单设置快捷键 添加子菜单 添加分割线 添加图标 创建menuBar的细节 工具栏 设置工具栏出现的初始位置&#xff08;上下左右&#xff09; 设置工具栏允许停靠的位置 设置不允许浮动 设置不允许移动…

2024 CCF编程能力等级认证Python认证(GESP)一级介绍

目录 1. GESP概述1.1 CSP-J/S认证1.1.1 证书含金量&#xff1a; 2. GESP一级认证内容3. GESP一级认证形式4. 认证时间与报名5. 政策与福利6. 备考建议 1. GESP概述 CCF编程能力等级认证&#xff08;Grade Examination of Software Programming&#xff0c;简称GESP&#xff09…

第3章 Express 的请求与响应(一)

在本章中&#xff0c;我们将详细探讨如何在 Express 中处理 HTTP 请求与响应。这包括解析请求数据、设置响应数据、处理表单数据、使用查询参数等。理解这些内容是开发高效和功能丰富的 Web 应用程序的基础。 1 解析请求数据 在 Express 中&#xff0c;可以通过 req 对象访问…

如何搭建互联网医院系统源码?医疗陪诊APP开发实战详解

今天&#xff0c;小编将为大家讲解如何搭建一个完整的互联网医院系统源码&#xff0c;并介绍医疗陪诊APP的开发实战。 一、互联网医院系统的架构设计 搭建一个完整的互联网医院系统&#xff0c;需要从架构设计开始。一个典型的互联网医院系统通常包含以下几个核心模块&#xf…