【接口自动化_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、动态生成标题:

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

然后生成的标题

八、离大谱

数据驱动去执行读取excel文件,是通过main方法,不是单独去执行这个用例

而是,通过main文件,执行用例

就可以读取到excel文件的数据了

相关推荐
高梦轩3 小时前
MySQL高可用
android·运维·数据库
hsjcjh6 小时前
Nodemailer使用教程:在Node.js中发送电子邮件
linux·运维·node.js
没有梦想的咸鱼185-1037-16637 小时前
北斗高精度数据解算:破解城市峡谷/长基线/无网区难题,从毫米级定位到自动化交付——(GAMIT/GLOBK底层核心解算技术方法)
运维·arcgis·数据分析·自动化
不怕犯错,就怕不做7 小时前
linux 如何查看自己的帐号密码及samba的帐号和密码
linux·运维·服务器
实在智能RPA7 小时前
Agent 在物流行业能实现哪些自动化?——深度拆解 AI Agent 驱动的智慧物流新范式
运维·人工智能·ai·自动化
张3238 小时前
Linux 启动过程
linux·运维
李彦亮老师(本人)8 小时前
Rocky Linux 9.x 新特性详解
linux·运维·服务器·centos·rocky linux
芳草萋萋鹦鹉洲哦9 小时前
【windows】nginx如何注册为开机自启的服务(WinSW实现)
运维·windows·nginx
猩猩—点灯11 小时前
部署远程利器-RustDesk
运维·服务器·网络