关于接口自动化,你不能不知道的高级技巧——接口自动化神器apin进阶操作

news2025/4/23 12:07:06

一、变量提取和引用

变量提取和引用主要是为了解决接口之间的参数依赖问题

使用场景:接口 A 的参数中需要使用接口 B 返回的某个数据,那么就要在请求 B 接口之后,提取数据保存,给请求 A 接口时使用。

1、变量提取

在用例集或用例数据中,通过 extract 字段指定要提取的变量。

语法:

"extract": {
   "变量名": ("变量保存的级别", "提取方式", "提取表达式"),
}

  • 变量名

保存数据的变量名

  • 变量保存的级别

EVN: 全局变量,settings 文件中的 EVN
env : 为局部变量(只对当前用例集有效):用例集的 env 字段

  • 提取方式

re: 正则表达式提取
jsonpath: 通过 jsonpath 提取

案例:

"extract": {
    # 通过jsonpath提取
   "token": ("env", "jsonpath", "$..token"),
    # 通过正则表达式提取
   'member_id': ("env", "re", r'"id":(.+?),')
}

2、变量引用

变量引用表达式:

$}

引用优先级:

优先引用该用例的局部变量(用例的 env 中的变量),如果局部变量不存在,则会引用全局变量(setting.py 中 ENV 中保存的变量)。

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386      

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a

二、用例断言

关于测试用例预期结果和实际结果的比对的,apin 中封装了一个 verification 字段,只需要在 verification 中定义预期结果,实际结果提取表达式,和断言的方法,即可实现用例的断言!

1、基本语法

verification = [
        [断言方式, 预期结果, 实际结果]
    ] 

2、断言方式

apin 中目前支持两种断言方式:

断言相等 :eq

预期结果和实际结果相等

verification = [
        ['eq', 预期结果, 实际结果]
    ] 

断言包含:contains

实际结果中包含预期结果的内容

verification = [
        ['contains', 预期结果, 实际结果]
    ] 

3、实际结果获取

关于断言的实际结果提取,需要使用V{{表达式}} 来进行提取,表达式支持 jsonpath 正则表达式两种提取方式方式。

正则表达式提取

# 通过正则表达式来提取实际结果中的msg字段。
verification = [
        ['eq', {'msg':"OK"}, {"msg": "V{{msg:'(.+?)'}}"}]
    ] 

通过 jsonpath 提取

# 通过jsonpath来提取实际结果中的msg字段。
verification = [
        ['eq', {'msg':"OK"}, {"msg": 'V{{$..msg}}']
    ] 

4、HTTP 状态码的断言

上述两种方式,已可提取结果返回的数据,那如果要断言接口http请求的状态码呢?

apin中也提供了一个内置的字段名,来表示http状态码。

# 断言接口请求的http状态码是否等于200
verification = [
        ['eq', 200, 'status_code']
    ] 

 

三、函数工具的使用

apin 支持在测试用例中调用自定义的函数来处理数据,如对数据进行加密处理、随机生成数据等等。

1、自定义函数

apin 创建的项目中有一个 funcTools.py,在该文件中可以自己定义函数,然后在用例中通过 F{xxx()}来调用。

  • 案例:funcTools.py 文件

import hashlib,random

def md5_encrypt(msg):
    """md5加密"""
    md5 = hashlib.md5()  
    md5.update(msg.encode("utf8"))  
    return md5.hexdigest()

def rand_phone():
    """随机生成手机号的函数"""
    import random
    for i in range(8):
        phone += str(random.randint(0, 9))
    return str(phone)


def get_timestamp():
    """获取时间戳"""
    return time.time()
  • 注意点:函数处理完的数据需要 return 返回哦

2、用例中引用函数

  • 引用表达式:F

  • demo1:用例数据中的 user,引用前面定义的 rand_phone 函数

{
    'title': "普通用户注册",
    'interface': "member/register",
    "method": "post",
    'json': {"user": "F{rand_phone()}", "pwd": "lemon123"},
}
  • demo2:用例数据中的 pwd,引用前面定义的 md5_encrypt 函数对密码进行 md 加密

注意点:引用的函数,传递的参数如果是变量,则不需要在变量应用表达式外加引号

{
    'title': "普通用户登录",
    'interface': "member/login",
    "method": "post",
    'json': {"user": "13109877890", "pwd": "F{md5_encrypt('lemon123')}"},
}

# 引用函数,变量作为参数传递
{
    'title': "普通用户登录",
    'interface': "member/login",
    "method": "post",
    'json': {"user": "${{user}}", "pwd": "F{md5_encrypt(${{pwd}})}"},
}

四、项目全局配置

项目中的 setting.py 文件,是整个项目的配置文件,接下来详细介绍一下项目的配置选项。

1、debug 模式运行

项目创建之后,默认运行是开启了 debug 模式,运行过程中会输出详细的 debug 级别日志。

如果不像看运行日志,则将 settings 中的 DEBUG 设置为 Flase 即可。

# 是否开启debug模式:True为debug模式,False为关闭debug模式
DEBUG = False

2、ENV 全局的变量

将 settings.py 中的 ENV 可以设置项目全局配置

全局的域名

推荐在 ENV 中设置全局的 host,不建议在每一个测试用例中去设置 host,切换测试环境切换也更方便(如果用例数据中没有自己定义 host,会自动引用全局的 host 地址)。

ENV = {
    "host":"http://WWW.XXX.com/",
}

全局的请求头

如果项目接口有必传的请求头数据,也可以直接在 ENV 中设置(如果用例数据中没有定义时,也会自动引用全局的 headers)。

ENV = {
    "host":"http://WWW.XXX.com/",
    "headers": {"UserAgent": "apin-test01"}
}

全局的测试数据

如果用例中需要引用事先准备好的一些测试数据,如测试账号、密码之类的

如:定义一个测试账号、测试密码、用户 id

ENV = {
    "host":"http://WWW.XXX.com/",
    "headers": {"UserAgent": "apin-test01"},
    "user":"musen@qq.com",
    "pwd":"lemon123",
    "user_id":111
}

测试用例中直接使用 ${{}} 即可引用,

# 引用user和pwd
{
 'title': "登录",
 'interface': "member/register",
 "method": "post",
 'json': {"mobile_phone": "${{user}}", "pwd": "${{pwd}}"},
}

注意点:如果局部环境和全局变量重名,优先引用局部变量。

3、测试报告

通过setting中的TEST_RESULT,可以配置测试报告的输出信息。

TEST_RESULT = {
    # 测试报告文件名
    "filename": "report.html",
    # 测试人员
    "tester": "测试员",
    # 报告标题
    "title": "测试报告",
    # 报告样式 :有1,2,三个样式
    "templates": 1,
    # 报告描述信息
    "desc": "XX项目测试生成的报告"
}

4、邮件推送测试结果

如果要将测试结果发送到指定的邮箱中,则在 settings.py 添加 EMAIL 配置即可。

EMAIL = {
    # smtp服务器地址
    "host": 'smtp.qq.com',
    # smtp服务器端口
    "port": 465,
    # 邮箱账号
    "user": "xxxx@qq.com",
    # smtps授权码
    "password": "xxxx",
    # 收件人列表
    "to_addrs": ['xxx@qq.com','xxx@qq.com'],
    # 是否发送附件
    "is_file": True
}

5、测试结果推送到钉钉群

如果要将测试结果推送到钉钉群,则在 settings.py 添加 DINGTALK 配置即可。

DINGTALK = {
    #  钉钉机器人的Webhook地址
    "url": "",
    # 如果钉钉机器人安全设置了关键字,则需要传入对应的关键字
    "key": None,
    # 如果钉钉机器人安全设置了签名,则需要传入对应的密钥
    "secret": None,
    # 钉钉群中要@人的手机号列表,如:[137xxx,188xxx]
    "atMobiles": [],
    # 是否@所有人
    "isatall": False
}

6、测试结果推送到企业微信群

如果要将测试结果推送到企业微信群,则在 settings.py 添加 WECHAT 配置即可。

WECHAT = {
    # 企业微信群ID
    "chatid": "",
    # 调用企业微信API接口的凭证
    "access_token": ""
}

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

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

相关文章

AST入门与实战(三):if节点转switch节点(瑞数5)

原文地址:https://zhuoyue360.com/jsnx/110.html 1. 期望 这是一个瑞数5代解混淆的案例&#xff0c;我们本章节需要做的是把if节点的内容转换成switch-case内容.以此来熟悉AST对JS混淆的对抗. 原始代码: function whileState() {while (1) {aV cA[wU];if (aV < 4) {if (…

metaRTC7 demo mac/ios编译指南

概要 metaRTC7.0开始全面支持mac/ios操作系统&#xff0c;新版本7.0.023 mac os demo 包含有srs/zlm的推拉流演示。发布版自带了x64版第三方类库&#xff0c;arm版第三方类库还需开发者自己编译。 源码下载 下载文件metartc7.023.7z https://github.com/metartc/metaRTC/re…

远程桌面弱口令攻击:网络安全的顽疾与挑战

导语&#xff1a; 随着远程办公和云技术的普及&#xff0c;远程桌面弱口令攻击成为了网络安全的顽疾。本文将深入探讨弱口令攻击的原理、危害以及有效的防范措施&#xff0c;帮助读者提升远程桌面安全性。 第一部分&#xff1a;弱口令攻击的原理与方法 1.1 什么是远程桌面弱口…

页面的滚动及scrollIntoView的穿透效果和解决

朋友今天遇到一个奇怪的问题&#xff0c;我觉得很有意思就记录一下。现象是这样的&#xff0c;页面有一个按钮&#xff0c;点击按钮以后会请求一个接口拿到一个iframe的地址然后创建一个iframe并渲染到页面上&#xff0c;iframe的页面加载完毕后会滑动到对应的某一个元素的位置…

统一门户|WorkPlus整合内部应用,构筑企业统一的智能工作入口

国家“十四五”发展规划中指出加强数字化发展&#xff0c;支持企业建设一体化数字平台&#xff0c;全面整合企业内部系统&#xff0c;提升产业链上下游协同效率。而在数字化经济浪潮下&#xff0c;企业和各类组织随着业务规模、人员规模的不断扩大&#xff0c;在信息化办公中存…

一次暴露面全开的红帽渗透测试【getshell】

0x01、信息收集阶段 注&#xff1a;本次信息收集过程主要使用FOFA网络探测平台 https://fofa.info/ 一开始进行收集的时候&#xff0c;有点迷&#xff0c;直接进行了大面积的"gov.in"域名收集 host"gov.in" && country"IN" 哈哈68465…

buuctf crypto刷题1

目录 (1) 凯撒&#xff1f;替换&#xff1f;呵呵!(替换密码爆破) (2) RSA1(dp泄露) (3) RSA2(dp泄露大整数分解) (4) RSA3(共模攻击) (5) 还原大师(md5爆破) (6) RSA(公钥文件解析) (7) RsaRoll (8) Dangerous RSA(小明文攻击) (9) [GUET-CTF2019]BabyRSA (10) [BJD…

成集云 | 聚水潭售后申请单同步伙伴云 | 解决方案

方案介绍 聚水潭是一款电商平台&#xff0c;提供售后申请功能帮助用户解决购物过程中遇到的问题&#xff0c;售后申请功能为用户提供了便利的售后服务&#xff0c;并促进用户与商家或卖家之间的沟通和协商。用户可以在聚水潭平台上轻松提交售后申请&#xff0c;并随时查看处理…

『赠书活动 | 第十七期』《Python网络爬虫:从入门到实战》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第十七期』 本期书籍&#xff1a;《Python网络爬虫&#xff1a;从入门到实战》 赠书规则&#xff1a;评论区&#xff1a;点赞&#xff5c;收…

国内唯一!腾讯零信任iOA入选全球UEM厂商全景图

近日&#xff0c;国际权威机构Forrester发布《The Unified Endpoint Management Landscape, Q3 2023》&#xff08;以下简称“报告”&#xff09;&#xff0c;对全球24家统一终端管理厂商进行了综合性评估&#xff0c;腾讯安全凭借零信任iOA在DEX&#xff08;数字化员工体验&am…

烂尾30年的楼盘,变身高端豪宅,龙华又多一供应

近日&#xff0c;深圳市规划和自然资源局龙华管理局发布了恒地尊悦花园&#xff08;A807-0632&#xff09;建设工程规划许可证的通告。恒地尊悦花园位于龙华区民治街道民荣北路与民通路交果东侧&#xff0c;项目地块实际上就是烂尾了近30年的福罗拉山庄别墅区。 根据规划&#…

基于大模型的数据血缘异常归因分析

近日&#xff0c;以“元数据技术及应用创新”为主题&#xff0c;最新一季StartDT Hackathon&#xff08;奇点云黑客马拉松&#xff09;正式收官。 本期黑客松共吸引了近50位选手参赛&#xff0c;有的在实时数仓领域显神通&#xff0c;有的则再次请出了大模型。这些小组都有个共…

图像多目标跟踪

目标跟踪&#xff08;Object Tracking&#xff09;是自动驾驶中常见的任务&#xff0c;根据跟踪目标数量的不同&#xff0c;目标跟踪可分为&#xff1a; 单目标跟踪&#xff08;Single Object Tracking&#xff0c;SOT&#xff09;多目标跟踪&#xff08;Multi-Objects Tracki…

推特群推王构建你的流量池

随着社交媒体的兴起&#xff0c;推特已成为了一个信息传播、交流、互动的重要平台。在这个充满了各种声音和观点的数字世界里&#xff0c;如何有效地将自己的声音传达出去&#xff0c;吸引更多的关注和互动&#xff0c;已经成为了一个备受关注的话题。而在这个过程中&#xff0…

浏览器渲染进程的线程有哪些

浏览器的渲染进程的线程 GUI 渲染线程 GUI 渲染线程是在 GUI 应用程序中负责界面渲染的线程。负责渲染浏览器页面&#xff0c;解析 HTML、CSS&#xff0c;构建DOM 树、构建CSSOM树、构建渲染树和绘制页面&#xff1b;当界面需要重绘或由于某种操作引发回流时&#xff0c;该线程…

Scratch 之 如何矢量图中去除矢量刺

如果您曾经在“矢量编辑器”中使用过轮廓&#xff0c;那么您一定已经看到了这一点... 这被称为矢量刺&#xff0c;只有当你正在绘制的形状中有尖锐的点或角时才会发生这种情况&#xff0c;这真的很烦人&#x1f621; 所以在这个视频中&#xff0c;我将向你展示如何摆脱这些令人…

Byzer-LLM环境安装

1.Byzer-LLM简介 Byzer-LLM 是基于 Byzer 的一个扩展&#xff0c;让用户可以端到端的完成业务数据获取&#xff0c;处理&#xff0c;finetune大模型&#xff0c;多场景部署大模型等全流程。 该扩展的目标也是为了让企业更好的将业务数据注入到私有大模型&#xff08;开源或者商…

9.2.1Socket(UDP)

一.传输层: 1.UDP:无连接,不可靠,面向数据报,全双工. 2.TCP:有连接,可靠,面向字节流,全双工. 注意:这里的可不可靠是相对的,并且和安不安全无关. 二.UDP数据报套接字编程: 1.socket文件:表示网卡的这类文件. 2.DatagramPacket:表示一个UDP数据报. 三.代码实现: 1.回显服务…

渠道失灵?新零售迎来数据大屏新“大脑”

前言 **“新零售”**是以消费者需求为中心的数据驱动的泛零售形态,其核心是“人”、 “货”、“场”三者的重新定义与关系重构,而重构背后最根本的驱动因素是数据。新零售时代&#xff0c;数字技术不断进步、消费不断升级&#xff0c;零售业需要借助数据中台&#xff0c;发掘数…

CH348 USB转8串口芯片资料下载(合集)

1、产品手册 CH348DS1.PDF - 南京沁恒微电子股份有限公司CH348技术手册&#xff0c;USB转8串口芯片&#xff0c;支持最高6M波特率与硬件流控&#xff0c;支持USB配置功能&#xff0c;提供RS485方向控制与GPIO等信号引脚&#xff0c;可实现PC等平台扩展多串口或多个串口设备升级…