web自动化测试平台开发之核心执行器

在这里插入图片描述


web自动化测试平台开发之核心执行器

  • 一、如何从自动化框架到核心执行器
  • 二、核心执行器框架逻辑梳理
  • 三、核心执行器利用命令驱动执行

一、如何从自动化框架到核心执行器

脚本:底层用了三个内容:python+pytest+selenium,线性脚本,只是单纯的把功能测试用例转化成代码的过程。——》脚本
缺点:

  • 企业成本高:落地难
  • 测试难度高:维护脚本
  • 时间成本高:WEB不好做,成本高、落地难

目标:维护成本不要太高

解决方案:python+pytest+selenium 组合,进行二次开发。

再次降低测试人员的基础 ——》 写web自动化测试case
数据驱动(DDT): 逻辑代码 和 数据进行分离,测试人员只需要写数据。Yaml、Excel -——》写完之后传入框架中

核心执行器:

# 这是一个 同一个 测试用例执行器
# 读取到所有的 用例配置信息, 一个个执行# 1. 读取所有指定文件夹下面的 yaml文件内容
import osimport allure
import pytest
import yamlall_case = []
for file in os.listdir("./yaml_cases"):  # 读取所有文件with open(f"./yaml_cases/{file}", "r", encoding="utf-8") as rfile:data = yaml.safe_load(rfile)  # 加载yaml内容all_case.append({"用例名称": file.split(".")[0],"用例步骤": data})print("所有测试用例信息:", all_case)@pytest.mark.parametrize("test_case", all_case)  # pytest 参数化 数据驱动
def test_ui_case(keywords, test_case):  # 一个函数执行所有的测试用例,不用每一个用例都写代码allure.dynamic.title(test_case['用例名称'])  # 测试报告里面 展示用例名称for step_name, step_args in test_case['用例步骤'].items():with allure.step(step_name):  # allure 记录每一个操作步骤key_function = keywords.__getattribute__(step_args["关键字"])  # 根据配置找到关键字方法key_function(**step_args)  # 调用关键字keywords.截图()

通过main.py文件找到测试用例,读取数据源,进行数据驱动,再进行反射到对应的关键字方法,并将数据传递过去,这就是数据驱动。

准备工作:
1.读取数据
2.进行参数化
3.结合关键字反射到对应的方法
4.调用对应的方法传不定长参数

二、核心执行器框架逻辑梳理

操作步骤:
1、创建虚拟环境
2、安装依赖包:pip install -r requirements.txt

  • 注意:pyyaml-include==1.3.1

3、运行入口:webrun——》cil.py
4、examples

  • 存放测试用例的文件夹
  • 编号_XXXXXX.yaml——测试用例文件——用例标题、前置用例、后置用例

程序入口文件:cli.py
其中:"-s", "-v", "--capture=sys", 是自带参数
--capture=sys在报告中也能展示
"--clean-alluredir", 自带参数
"--alluredir=allure-results", 自带参数
"--type=yaml", 指定运行的文件类型
"--cases=C:\\Users\Lenovo\Desktop\huace\huace_web_platform\class1\web-engine\examples", 指定测试用例的执行目录
"--keyDir=C:\\Users\Lenovo\Desktop\huace\huace_web_platform\class1\web-engine\webrun\extend\script":拓展功能

执行入口文件:

import os
import sys
import pytestfrom webrun.core.CasesPlugin import CasesPlugindef run():# 获取 python运行参数# 1. 读取命令行传入的参数pytest_cmd_config = []for arg in sys.argv:if arg.startswith("-"):pytest_cmd_config.append(arg)print(os.path.join(os.path.dirname(__file__), "core/WebTestRunner.py"))# 2. 构建pytest参数pytest_args = [os.path.join(os.path.dirname(__file__), "core/WebTestRunner.py")]pytest_args.extend(pytest_cmd_config)print("run pytest:", pytest_args)pytest.main(pytest_args, plugins=[CasesPlugin()])if __name__ == '__main__':# 测试执行入口print(os.path.join(os.path.dirname(__file__), 'core', "WebTestRunner.py"))pytest_args = ["-s", "-v", "--capture=sys",  # todo 自带参数  --capture=sys在报告中也能展示os.path.join(os.path.dirname(__file__), 'core', "WebTestRunner.py"),  # todo 指定运行的文件"--clean-alluredir",  # todo 自带参数"--alluredir=allure-results",  # todo 自带参数# todo 自定义参数"--type=yaml",  # todo 指定运行的文件类型# "--cases=C:\\Users\Lenovo\Desktop\huace\web自动化平台\webUI自动化技术之测试开发演讲\web-engine\examples",  #todo 指定测试用例的执行目录"--cases=C:\\Users\Lenovo\Desktop\huace\huace_web_platform\class1\web-engine\examples",    # todo 指定测试用例的执行目录"--keyDir=C:\\Users\Lenovo\Desktop\huace\huace_web_platform\class1\web-engine\webrun\extend\script"]print("run pytest:", pytest_args)# todo pytest_args插件扩展pytest.main(pytest_args, plugins=[CasesPlugin()])  #todo 插件拓展# 集成 allure 示例os.system(r"allure generate -c -o report")  # 等于你在命令行里面执行 allure

在这里插入图片描述

pytest_args是一个pytest(Python的测试框架)中的选项,用于在运行pytest命令时传递额外的命令行参数给测试运行器。它可以接受一个字符串列表,允许用户自定义pytest的配置,例如指定测试套件、过滤特定测试模块、设置环境变量等。

pytest.main(pytest_args, plugins=[CasesPlugin()])

  • 在pytest中,pytest.main() 函数是一个直接与pytest库交互的方式,允许你启动整个测试运行过程。当你传入pytest_args参数时,它会接收到你指定的命令行参数列表,这可以用于控制测试运行的行为,比如选择特定的测试套件、启用插件等。
  • plugins=[CasesPlugin()]这一部分则是指定了一个或多个插件,这里是CasesPlugin(),这是一个自定义插件,可能是你项目中定义的一个处理测试案例特殊需求的插件。在调用pytest.main()时,将这个插件加入,意味着其功能将在测试过程中被加载和应用。

CasesPlugin.py插件文件

  • pytest_addoption():增加pytest运行的配置项
  • pytest_generate_tests:是Pytest框架中用来动态生成测试用例参数的钩子函数。通过它,我们可以在运行时动态地生成测试参数,从而避免手动编写重复的测试用例。https://blog.csdn.net/NHB456789/article/details/139247217
  • pytest_collection_modifyitems:用例收集完毕之后被调用,可以用来调整测试用例执行顺序
import pytestfrom webrun.parse.CaseParser import case_parser
from webrun.core.globalContext import g_contextclass CasesPlugin:"""todo pytest插件 - 用于pytest运行时的用例配置信息加载应用了 pytest 钩子函数 (方法名不能改动)"""def pytest_addoption(self, parser):"""todo 增加pytest运行的配置项"""parser.addoption("--type", action="store", default="yaml", help="测试用例类型")parser.addoption("--cases", action="store", default="../examples", help="测试用例目录")# 添加一个指定的关键字目录parser.addoption("--keyDir",action="store", default="F:\\key_py",help="拓展关键字目录")def pytest_generate_tests(self, metafunc):"""todo method_meta: 运行的方法信息 :测试用例执行之前执行(对测试数据进行处理)"""# 读取用户传过来的参数case_type = metafunc.config.getoption("type")cases_dir = metafunc.config.getoption("cases")key_dir = metafunc.config.getoption("keyDir")# 把这个key_dir 放入到公共变量去g_context().set_dict("key_dir",key_dir)# todo 重点:读取测试用例,同时需要进行参数化data = case_parser(case_type, cases_dir)# case_type:yaml    cases_dir:F:\ProjectHcEdu\platform\web-engine\examplesif "caseinfo" in metafunc.fixturenames:metafunc.parametrize("caseinfo", data['case_infos'], ids = data['case_names'])def pytest_collection_modifyitems(self,items):"""用例收集完毕之后被调用,可以用来调整测试用例执行顺序;"""for item in items:item.name = item.name.encode("utf-8").decode("unicode_escape")item._nodeid = item.callspec.id

CaseParser.py文件
用例解析器, 根据你传过来的参数,选择不同的解析器
在这里插入图片描述
YamlCaseParser.py
在这里插入图片描述
TestRunner.py执行测试用例
在这里插入图片描述

在这里插入图片描述
CasesPlugin.py文件先执行对数据进行处理,传给WebTestRunner.py后执行

allure报告体现
在这里插入图片描述

重点:
1、关键字我们进行封装:有可能没有封装数据,拓展功能

场景:
1、直接跑对应的脚本
2、慢:指定驱动路径:driver_path
3、需要浏览器的参数:比如无头模式(没有界面)
4、分布式地址:指定grid_url
5、有部分关键字没有的情况,那么这个位置就需要指定:–keyDir=C:\Users\Lenovo\Desktop\huace\huace_web_platform\class1\web-engine\webrun\extend\script"

注意事项:

  1. 文件名、类名、方法名必须一致
  2. 必须有对应的构造方法,实例化的时候必须传对应driver过来

有关键字则去找,没有关键字则动态的进行维护,自己写关键字

在这里插入图片描述

三、核心执行器利用命令驱动执行

通过python setup.py install进行安装
执行对应的测试用例: huace-webrun --cases=./examples -sv --capture=tee-sys --alluredir=allure-data
生成测试报告: allure generate allure-data -c -o allure-report

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

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

相关文章

Rust 力扣 - 2090. 半径为 k 的子数组平均值

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 半径为 k 的子数组平均值 等价于 子数组长度为2 * k 1的总和 除于 2 * k 1 我们遍历长度为2 * k 1的窗口,我们只需要记录窗口内的平均值即可 题解代码 impl Solution {pub fn get_averages(num…

直接内存、死锁、方法句柄

直接内存 1. 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域 2. 直接内存是在Java堆外、直接向系统申请的内存区间 3. 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存 4. 通常,访问直接内存的速度会优于Java堆&am…

C++《list》

在本篇当中我们将学习STL中的list,在此list就是我们之前在数据结构学习过的链表,在本篇中我们要来了解list当中的成员函数该如何使用,由于list各个函数的接口和之前学习过的vector类型,因此在学习list的使用就较为轻松。在lis篇章…

【牛客刷题实战】二叉树遍历

大家好,我是小卡皮巴拉 文章目录 目录 牛客题目: 二叉树遍历 题目描述 输入描述: 输出描述: 示例1 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码(C语言) 兄弟们共勉 !&…

vmvare启动freebsd操作系统密码忘记了怎么办?

本章教程,主要介绍,通过vmvare安装的freebsd操作系统,密码忘记了,如何重置密码。 一、重启虚拟机 在重启过程中,按键盘中是数字2,进入单用户模式。 二、进入到shell界面 在出现“Enter full pathname of shell or RETURN for /bin/sh:”直接按回车键。 三、输入命令 mou…

【设计模式系列】代理模式(八)

一、什么是代理模式 代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式在不直接访问实际对象的情况下,提供了对目标对象的间接访问。通过引入一个代理对象来间接操作实际对…

WPS查询函数VLOOKUP,匹配寻找值自动带入值

想实现在下表输入物料名称后,把上表中的单位自动带入 那就要用到VLOOKUP函数,获取第2个表第1列的值后去第1个表的第1列匹配,匹配到后得到行数值,把第1个表的第2列赋值给第2个表的第2列。 Vlookup函数参数为Vlookup(查找值&#…

sqoop问题汇总记录

此篇博客仅记录在使用sqoop时遇到的各种问题。持续更新,有问题评论区一起探讨,写得有不足之处见谅。 Oracle_to_hive 1. main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTr…

简单说明vuex

vuex 知识结构配置调用 知识结构 vue用于管理公共数据的仓库 配置 state:所有公共数据的初始状态(初始值) export default {state: {count: 0,} };mutations:修改state内容的方法(必须为同步方法) export …

分类算法——决策树 详解

决策树的底层原理 决策树是一种常用的分类和回归算法,其基本原理是通过一系列的简单决策,将数据集划分为多个子集,从而实现分类。决策树的核心思想是通过树形结构表示决策过程,节点代表特征,边代表决策,叶子…

Nature Electronics 用于语音识别的液体声传感器,基于悬浮在载液的钕-铁-硼磁性纳米颗粒

近年来,工程师们开发了一系列越来越复杂的传感器,用于机器人、便携式、可穿戴甚至植入式监测。然后,可以使用最先进的机器学习来分析这些传感器收集的数据,使设备能够识别音频中的特定声音、图像中的对象或其他信息。加州大学洛杉…

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持视频投放在电视墙上

在当今智能化、数字化的时代,视频监控已经成为各行各业不可或缺的一部分,无论是公共安全、交通管理、企业监控还是智慧城市建设,都离不开高效、稳定的视频监控系统的支持。而在这些应用场景中,将监控视频实时投放到大屏幕电视墙上…

【GeoJSON在线编辑平台】(0)项目启动与前言

前言 事情是这样的…… 有这么一个项目,需要开发一个在线的标注平台。以天地图为底图,在天地图上标注出一些特征地物,比如描出农田耕地房屋建筑之类的要素。 这个需求简化一下其实就是一个在线的矢量编辑平台,通过绘制多边形功能…

豆包,攻克数字是个什么工具?《GKData-挖掘数据的无限可能》(数据爬虫采集工具)

豆包,攻克数字是个什么工具? “攻克数字” 指的是 “攻克数字(GKData)” 这样一款工具。是一款针对网页、APP中数据自动解析转表存入数据库的软件,为数据工作者而生。它是一个不会编程也能用的可视化数据解析为标准二…

【成都新篇】龙信科技电子取证实验室,引领科技取证新时代

文章关键词:电子数据取证实验室、手机取证、介质取证、云取证、现场勘查、电子物证 在科技创新的浪潮中,龙信科技成都实验室以其卓越的电子数据取证服务,成为了中西部地区一颗璀璨的明珠。随着新址的搬迁,我们不仅扩大了业务范围…

【C/C++】字符/字符串函数(1)——由string.h提供

零.导言 什么是字符/字符串函数呢? 其实就是一类用于处理字符和字符串的函数。 而其中一部分函数包含在头文件 string.h 中,有 strlen strcpy strcat strcmp strncpy strncat strncmp strstr strtok strerror 等等 接下来我将逐个讲解这些函数。 一.str…

硅谷甄选(11)角色管理

角色管理模块 10.1 角色管理模块静态搭建 还是熟悉的组件&#xff1a;el-card、el-table 、el-pagination、el-form <template><el-card><el-form :inline"true" class"form"><el-form-item label"职位搜索"><el-…

鸿蒙UI开发——基于全屏方案实现沉浸式界面

1、概 述 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条。 其中状态栏和导航条&#xff0c;通常在沉浸式布局下称为避让区&#xff0c;避让区之外的区域称为安全区。 开发应用沉浸式效果主要指&#xff1a;通过调整状态栏、应用界面和导航条的显示效果来减少状态…

规划误差降低27%,碰撞率降低33%Senna: 大规模视觉-语言模型与端到端自动驾驶相结合

Abstract 端到端自动驾驶在大规模数据中展示了强大的规划能力&#xff0c;但在复杂、罕见的场景中仍然因常识有限而表现不佳。相比之下&#xff0c;大型视觉语言模型&#xff08;LVLMs&#xff09;在场景理解和推理方面表现出色。前进的方向在于融合两者的优势。以往利用LVLMs…

openpnp - 手工修改配置文件(元件高度,size,吸嘴)

文章目录 openpnp - 手工修改配置文件(元件高度,size,吸嘴)概述笔记parts.xmlpackages.xml 手工将已经存在的NT1,NT2拷贝出来改名备注END openpnp - 手工修改配置文件(元件高度,size,吸嘴) 概述 载入新板子贴片准备时&#xff0c;除了引入Named CSV文件&#xff0c;还要在ope…