playwright自动化项目搭建

chatgpt/2023/9/24 0:40:54

具备功能

关键技术:

  • pylaywright测试库
  • pytest单元测试框架
  • pytest-playwright插件

非关键技术:

  • pytest-html插件
  • pytest-rerunfailures插件
  • seldom 测试框架

实现功能:

  • 元素定位与操作分离
  • 失败自动截图并保存到HTML报告
  • 失败重跑
  • 可配置不同的浏览器执行
  • 可配置headless/headful 模式
  • 实现参数化读取数据文件

一个自动化具备的基本功能差不多就这些了。其实主要是使用了一堆框架和插件,主要是整合能力。

使用方式

  • 安装依赖
$ pip install -r requirements.txt

注:安装requirements.txt指定依赖库的版本,这是经过测试的,有时候新的版本可会有错。

  • 配置

在 config.py 文件配置

class RunConfig:"""运行测试配置"""# 运行测试用例的目录或文件cases_path = "./test_dir/test_parametrize.py"# 配置浏览器驱动类型(chromium, firefox, webkit)。browser = "chromium"# 运行模式(headless, headful)mode = "headful"# 配置运行的 URLurl = "https://www.baidu.com"# 失败重跑次数rerun = "0"# 当达到最大失败数,停止执行max_fail = "5"
  • 运行

运行测试

$ python run.py

设计细节

  • 关于page object设计模式

page object是自动化测试最常用的设计模式。

但 playwright 中的只提供了操作方法,元素定位测试数据都只是参数。

# 输入
page.type('#kw', "playwright")
# 点击
page.click('#su')

我们依然,可以将元素定位单独封装一层。

class BaiduElem:search_input = "#kw"  # 搜索框search_button = "#su"  # 搜索按钮settings = "#s-usersetting-top"  # 设置search_setting = "#s-user-setting-menu > div > a.setpref"  # 搜索设置save_setting = 'text="保存设置"'  # 保存设置

在测试用例中的使用

from element.baidu_element import BaiduElem
from playwright.sync_api import Pagedef test_baidu_search(page: Page, base_url):""""""page.goto(base_url)page.type(BaiduElem.search_input, text="playwright")page.click(BaiduElem.search_button)sleep(2)assert page.title() == "playwright_百度搜索"

这肯定不是什么好的设计。用例层写起来会比较啰嗦, 最好可以page.elem.type("playwright") 的语法实现,这就需要在playwright的基础上再封装一套API, 看playwright 源码还是有些复杂的,主要是用了很多就异步,成本比较大,暂时先这么用。

  • 关于自动截图

自动截图需要 pytest/pytest-html 和 playwright 配合完成, pytest/pytest-html 判断用例实现,并把图片插入到报告中。 playwright 实现截图动作。

@pytest.mark.hookwrapper
def pytest_runtest_makereport(item):"""用于向测试用例中添加用例的开始时间、内部注释,和失败截图等.:param item:"""pytest_html = item.config.pluginmanager.getplugin('html')outcome = yieldreport = outcome.get_result()report.description = description_html(item.function.__doc__)extra = getattr(report, 'extra', [])page = item.funcargs["page"]if report.when == 'call':xfail = hasattr(report, 'wasxfail')if (report.skipped and xfail) or (report.failed and not xfail):case_path = report.nodeid.replace("::", "_") + ".png"if "[" in case_path:case_name = case_path.split("-")[0] + "].png"else:case_name = case_pathcapture_screenshots(case_name, page)img_path = "image/" + case_name.split("/")[-1]if img_path:html = '<div><img src="%s" alt="screenshot" style="width:304px;height:228px;" ' \'onclick="window.open(this.src)" align="right"/></div>' % img_pathextra.append(pytest_html.extras.html(html))report.extra = extradef capture_screenshots(case_name, page):"""配置用例失败截图路径:param case_name: 用例名:return:"""global driverfile_name = case_name.split("/")[-1]if RunConfig.NEW_REPORT is None:raise NameError('没有初始化测试报告目录')else:image_dir = os.path.join(RunConfig.NEW_REPORT, "image", file_name)page.screenshot(path=image_dir)

通过page = item.funcargs["page"] 拿到playwright的驱动,截图判断逻辑有点复杂,不过我已经实现了。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

12、springboot自定义banner

springboot自定义banner ▲ 控制Banner信息是否显示及在哪里显示&#xff1a; 在application.properties这个配置文件里面进行以下的属性设置&#xff1a;spring.main.banner-mode 属性进行设置&#xff0c;该属性支持如下3个属性值&#xff1a;- console&#xff1a;在Spring…

文本生成模型评估方法

“”" 好的&#xff0c;我来通俗易懂地介绍一下这几个指标&#xff0c;并给出一些例子。1. Rouge 指标Rouge 是一组用于自动文本摘要评估的指标&#xff0c;经常用于自然语言处理中。Rouge 包括三种常用的指标&#xff1a;Rouge-1、Rouge-2 和 Rouge-L&#xff0c;它们的…

4090Ti被取消,NVIDIA还要推出新“甜品卡“

不知不觉距离 NVIDIA RTX 40 系显卡发布已快一年&#xff0c;4090 到 4060 从旗舰到甜品也都差不多了。 不过每个男孩子都想要的礼物 - RTX 4090 Ti &#xff0c;至今仅在春晚发布。 从核心架构上来看&#xff0c;RTX 4090 上的 AD 102-300 也确实不是完全体。 仅拥有144组 S…

Stable Diffusion 文字生成图片如何写提示词

Stable Diffusion是一种基于神经网络的技术&#xff0c;通过输入提示词来生成相应的图片。为了获得高质量的图片输出&#xff0c;您需要选择合适的提示词&#xff0c;并确保它们能够激发模型的想象力和创造力。 以下是一些编写提示词的建议&#xff1a; 确定主题&#xff1a;…

【Linux命令200例】mktemp用于创建临时文件或目录

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

类和对象——初始化列表

目录 初始化列表 注意 单/多参数传入 explicit关键字 匿名函数 先前&#xff0c;我们知道有构造函数——用于给各成员变量一个初始值。 但是仍然不能称为是初始化&#xff0c;因为初始化只能初始化一次&#xff0c;但是构造函数里可以多次赋值 初始化列表 以日期类Date…

【Golang 接口自动化08】使用标准库httptest完成HTTP请求的Mock测试

目录 前言 http包的HandleFunc函数 http.Request/http.ResponseWriter httptest 定义被测接口 测试代码 测试执行 总结 资料获取方法 前言 Mock是一个做自动化测试永远绕不过去的话题。本文主要介绍使用标准库net/http/httptest完成HTTP请求的Mock的测试方法。 可能有…

软件测试员,面试常见的18个问题(记得收藏!)

软件测试面试18个常见问题汇总 Q1&#xff1a;项目中相关需求问题&#xff0c;测试可以直接和客户沟通吗&#xff1f; A1&#xff1a;可以&#xff0c;最初与客户沟通需求时&#xff0c;测试人员直接参与&#xff0c;所以我们可以直接和客户方的代表开会进行沟通。 A2&#xff…
推荐文章