从零开发短视频电商 自动化测试WebUI端到端测试-Playwright

news2025/1/24 9:48:55

文章目录

    • Playwright是什么
    • Playwright入门示例
      • 添加Maven依赖
      • 示例代码
      • 启动验证
    • 功能
      • 自动等待
      • 内置Web断言
      • 可视化UI模式
      • 减慢操作
      • 截图
      • 录屏
      • 脚本录制
    • 高级
      • 识别验证码

Playwright是什么

  • https://playwright.dev/

  • https://playwright.dev/java/

Playwright为现代 Web 应用程序提供可靠的端到端测试。

Playwright 是专门为了满足端到端测试的需求而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。在 Windows、Linux 和 macOS 上进行本地或 CI 测试,无头测试或使用本机移动模拟进行测试。

和Selenium的对比

PlaywrightSelenium
是否需要驱动需要,每一种浏览器匹配一种Driver
支持语言JavaScript & TypeScript\Python\C#\Go\JavaJava\PythonRuby\C#\C++\JavaScript
覆盖浏览器Chromium/WebKit/Firefox目前所有主流浏览器上
支持多标签 + 表单更符合直觉的 API通过 switch_to 切换,但不好用
脚本录制基于 playwright codegen 命令录制脚本Selenium IDE可以录制脚本
跨平台在 Windows、Linux 和 macOS 上进行本地测试或在 CI 上进行无头或有头测试
自动等待Playwright 在执行动作之前等待元素可操作。它还具有一组丰富的内省事件。两者的结合消除了人为超时的需要——这是不稳定测试的主要原因。
内置截屏/录屏捕获执行跟踪、视频、屏幕截图
登录一次保存上下文的身份验证状态并在所有测试中重用它。这绕过了每个测试中的重复登录操作,但提供了独立测试的完全隔离
执行效率

Selenium: 需要额外安装下 ChromeDriver 和 Chrome 浏览器。

Playwright: 会自动下载特定版本的浏览器,供其使用。

Playwright入门示例

在线编辑调试 :Try Playwright

添加Maven依赖

<dependency>
  <groupId>com.microsoft.playwright</groupId>
  <artifactId>playwright</artifactId>
  <version>1.37.0</version>
</dependency>

示例代码

在Chrome浏览器将导航到https://blog.csdn.net/abu935009066并在其中截取屏幕截图。

import com.microsoft.playwright.*;
import java.nio.file.Paths;

public class App {
  public static void main(String[] args) {
    try (Playwright playwright = Playwright.create()) {
      Browser browser = playwright.webkit().launch();
      Page page = browser.newPage();
      page.navigate("https://blog.csdn.net/abu935009066");
      page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("example.png")));
    }
  }
}

默认情况下,Playwright 以无头模式运行浏览器。要查看浏览器 UI,请在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度(每个操作减慢 N 毫秒)。

// Chromium, Firefox, or WebKit
playwright.chromium.launch(new BrowserType.LaunchOptions()
  .setHeadless(false)
  .setSlowMo(100));

启动验证

首次启动代码,Playwright 将 Chromium、WebKit 和 Firefox 浏览器下载到操作系统特定的缓存文件夹中:

  • 在 Windows 上 %USERPROFILE%\AppData\Local\ms-playwright
  • 在 MacOS 上 ~/Library/Caches/ms-playwright
  • 在Linux上 ~/.cache/ms-playwright

运行上面的示例后会自动下载,日志如下

Downloading Chromium 116.0.5845.82 (playwright build v1076) from https://playwright.azureedge.net/builds/chromium/1076/chromium-win64.zip
|                                                                                |   0% of 116 Mb
|■■■■■■■■                                                                        |  10% of 116 Mb
|■■■■■■■■■■■■■■■■                                                                |  20% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■                                                        |  30% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                |  40% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                        |  50% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                |  60% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                        |  70% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                |  80% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        |  90% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 116 Mb
Chromium 116.0.5845.82 (playwright build v1076) downloaded to C:\Users\laker\AppData\Local\ms-playwright\chromium-1076
Downloading FFMPEG playwright build v1009 from https://playwright.azureedge.net/builds/ffmpeg/1009/ffmpeg-win64.zip
|                                                                                |   1% of 1.4 Mb
|■■■■■■■■                                                                        |  10% of 1.4 Mb
|■■■■■■■■■■■■■■■■                                                                |  20% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■                                                        |  30% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                |  40% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                        |  50% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                |  60% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                        |  70% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                |  80% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        |  90% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 1.4 Mb
FFMPEG playwright build v1009 downloaded to C:\Users\laker\AppData\Local\ms-playwright\ffmpeg-1009
Downloading Firefox 115.0 (playwright build v1422) from https://playwright.azureedge.net/builds/firefox/1422/firefox-win64.zip
|                                                                                |   0% of 79.5 Mb
|■■■■■■■■                                                                        |  10% of 79.5 Mb
|■■■■■■■■■■■■■■■■                                                                |  20% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■                                                        |  30% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                |  40% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                        |  50% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                |  60% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                        |  70% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                |  80% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        |  90% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 79.5 Mb
Firefox 115.0 (playwright build v1422) downloaded to C:\Users\laker\AppData\Local\ms-playwright\firefox-1422
Downloading Webkit 17.0 (playwright build v1883) from https://playwright.azureedge.net/builds/webkit/1883/webkit-win64.zip
|                                                                                |   0% of 45.7 Mb
|■■■■■■■■                                                                        |  10% of 45.7 Mb
|■■■■■■■■■■■■■■■■                                                                |  20% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■                                                        |  30% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                |  40% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                        |  50% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                |  60% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                        |  70% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                |  80% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        |  90% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 45.7 Mb
Webkit 17.0 (playwright build v1883) downloaded to C:\Users\laker\AppData\Local\ms-playwright\webkit-1883

执行完成后,看到生成的截图如下

功能

自动等待

Playwright 在执行操作之前对元素执行一系列可操作性检查,以确保这些操作按预期运行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果在给定的 timeout 内未通过所需的检查,则操作将失败并显示 TimeoutError

内置Web断言

断言描述
assertThat(locator).isChecked()复选框被选中
assertThat(locator).isDisabled()元素被禁用
assertThat(locator).isEditable()元素可编辑
assertThat(locator).isEmpty()容器是空的
assertThat(locator).isEnabled()元素已启用
assertThat(locator).isFocused()元素已聚焦
assertThat(locator).isHidden()元素不可见
assertThat(locator).isVisible()元素可见
assertThat(locator).containsText()元素包含文本
assertThat(locator).hasAttribute()元素具有 DOM 属性
assertThat(locator).hasClass()元素具有class属性
assertThat(locator).hasCount()列表有确切的孩子数量
assertThat(locator).hasCSS()元素具有 CSS 属性
assertThat(locator).hasId()元素有一个 ID
assertThat(locator).hasJSProperty()元素具有 JavaScript 属性
assertThat(locator).hasText()元素与文本匹配
assertThat(locator).hasValue()输入有一个值
assertThat(locator).hasValues()选择框有已选择的选项
assertThat(page).hasTitle()页面有标题
assertThat(page).hasURL()页面有一个 URL
assertThat(response).isOK()响应状态为 OK

可视化UI模式

默认情况下,测试以无头方式运行,这意味着运行测试时不会打开浏览器窗口,并且结果将在终端中看到。如果您愿意,可以使用该launch(new BrowserType.LaunchOptions().setHeadless(false))选项在 head 模式下运行测试。

减慢操作

将 Playwright 操作减慢指定的毫秒数。 很有用,这样您就可以看到发生了什么。

  Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions()
                    .setHeadless(false)
                    .setSlowMo(1000));

截图

以下是捕获屏幕截图并将其保存到文件中的快速方法:

page.screenshot(new Page.ScreenshotOptions()
      .setPath(Paths.get("screenshot.png")))

Screenshots 接受许多图像格式、剪辑区域、质量等参数

全屏截图

全页屏幕截图是完整可滚动页面的屏幕截图,就好像您有一个非常高的屏幕并且页面可以完全容纳它一样。

page.screenshot(new Page.ScreenshotOptions()
  .setPath(Paths.get("screenshot.png"))
  .setFullPage(true));

截图到缓冲区

您可以获取包含图像的缓冲区并对其进行后处理或将其传递给第三方像素差异工具,而不是写入文件。

byte[] buffer = page.screenshot();
System.out.println(Base64.getEncoder().encode(buffer));

元素截图

截取单个元素的屏幕截图

page.locator(".header").screenshot(new Locator.ScreenshotOptions().setPath(Paths.get("screenshot.png")));

录屏

使用 Playwright,您可以录制视频以供测试。

测试结束时浏览器上下文关闭时保存视频。如果您手动创建浏览器上下文,请确保等待 BrowserContext.close()。

context = browser.newContext(new Browser.NewContextOptions().setRecordVideoDir(Paths.get("videos/")));
// Make sure to close, so that videos are saved.
context.close();

您还可以指定视频大小。视频大小默认为缩小到适合 800x800 的视口大小。视口的视频放置在输出视频的左上角,必要时缩小以适合。您可能需要设置视口大小以匹配您所需的视频大小。

BrowserContext context = browser.newContext(new Browser.NewContextOptions()
  .setRecordVideoDir(Paths.get("videos/"))
  .setRecordVideoSize(640, 480));

保存的视频文件将出现在指定的文件夹中。他们都产生了独特的名字。对于多页面场景,您可以通过Page.video()访问与页面关联的视频文件。

path = page.video().path();

脚本录制

当您在浏览器中执行操作时,Playwright 能够为您生成测试代码,这是快速开始测试的好方法。

运行如下代码进行录制

import com.microsoft.playwright.*;

public class Example {
  public static void main(String[] args) {
    try (Playwright playwright = Playwright.create()) {
      BrowserType chromium = playwright.chromium();
      // Make sure to run headed.
      Browser browser = chromium.launch(new BrowserType.LaunchOptions().setHeadless(false));
      // Setup context however you like.
      BrowserContext context = browser.newContext(/* pass any options */);
      context.route("**/*", route -> route.resume());
      // Pause the page, and start recording manually.
      Page page = context.newPage();
      page.pause();
    }
  }
}

高级

识别验证码

1.获取到验证码图片,获取验证码图片的方式,可以直接定位到img元素,对元素截图即可。

# 保存验证码  
page.locator('#imgCode').screenshot(new Locator.ScreenshotOptions()
                                    .setPath(Paths.get("screenshot.png")))

2.处理图片

  • 灰度,把猜测变为黑白
  • 锐化,增强黑白对比
  • 反转,可选,要达到的目标是 白底黑字,如果已经是了就不需要反转。

使用CV库或者其他库处理

3.OCR识别图片

Tesseract是 HP 开发的开源 OCR 引擎,可识别 100 多种语言,并支持表意语言和从右到左的语言。此外,我们还可以训练 Tesseract 识别其他语言

它包含两个用于图像处理的 OCR 引擎——一个 LSTM(长短期记忆)OCR 引擎和一个通过识别字符模式工作的传统 OCR 引擎。

Tess4J 是 Tesseract API 的 Java 包装器,为各种图像格式(如 JPEG、GIF、PNG 和 BMP)提供 OCR 支持。

首先,让我们将最新的tess4j Maven 依赖项添加到pom.xml中:

<!-- Tess4J依赖 -->
<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>5.4.0</version>
</dependency>

然后,下载对应的语言资源,可以手动下载设置也可以使用jar包内置的资源。

手动下载

chi_sim.traineddata(中文简体)、eng.traineddata(英文)、jpn.traineddata(日文)三个语言库,存放在 resources 的 data 目录下(如下图所示,osd.traineddata 与页面分割模式有关,这里也一并下载了)

其他语言库可根据自己需求选择下载,tessdata 语言库下载地址:https://github.com/tesseract-ocr/tessdata

// 设置datapath,假设我们下载后放在c:/data路径
Tesseract tesseract = new Tesseract();
tesseract.setDatapath("c:/data");

使用jar包内置的资源

ITesseract instance = new Tesseract();
// 使用 LoadLibs 加载默认的 tessdata 文件夹
instance.setDatapath(LoadLibs.extractTessResources("tessdata").getParent());

主要实现代码

import java.io.File;
import net.sourceforge.tess4j.*;
public class TesseractExample {
	public static void main(String[] args) {
		File imageFile = new File("eurotext.tif");
		ITesseract instance = new Tesseract();
		instance.setDatapath(LoadLibs.extractTessResources("tessdata").getParent());
        // 自定义设置,也可以用默认值
        tesseract.setLanguage("eng");
		tesseract.setPageSegMode(1);
		tesseract.setOcrEngineMode(1);
		try {
			String result = instance.doOCR(imageFile);
			System.out.println(result);
		} catch (TesseractException e) {
			System.err.println(e.getMessage());
		}
	}
}

问题

1.在Windows环境中出现识别失败问题。

经排查是Windows 路径问题,解决方案是路径设置简单些如c:/data.

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

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

相关文章

QTreeWidget——信号处理

文章目录 基本属性信号一、信号种类二、信号测试1、currentItemChanged、itemCollapsed、itemExpanded三个信号的测试2、itemActivated信号3、 itemChanged信号4、其余信号的测试代码&#xff08;包含以上代码&#xff09; 基本属性 信号 一、信号种类 //当前项发生变化时触…

Docker容器与虚拟化技术:Dockerfile部署LNMP

目录 一、理论 1.LNMP架构 2.背景 3.Dockerfile部署LNMP 3.构建Nginx镜像 4.构建MySQL容器 5.构建PHP镜像 6.启动 wordpress 服务 二、实验 1.环境准备 2.构建Nginx镜像 3.构建MySQL容器 4.构建PHP镜像 5.启动 wordpress 服务 三、问题 1.构建nginx镜像报错 …

库克发文庆祝苹果入华 30 周年

8月18日&#xff0c;苹果CEO蒂姆库克在微博上发布了一条庆祝苹果进入中国30周年的消息&#xff0c;称“我们衷心感谢所有的同事、顾客和合作伙伴&#xff01;” 此外&#xff0c;苹果官方新闻稿也发文庆祝入华 30 周年&#xff0c;库克在新闻稿中表示&#xff1a;“30 年来&am…

公文处理101:高效率的文件管理与优化流程

公文处理是每个企业和机构中不可或缺的日常工作。对公文的高效管理和流程优化不仅能提高工作效率&#xff0c;还能确保文件的安全、准确和及时性。本文为你提供一套公文处理的基础知识和技巧。 1.文件分类与归档 重要性&#xff1a;结构化的文件分类可以确保每个文档都能迅速找…

财务数据分析模板有哪些,能满足决策吗?

虽然企业的业务经营各有不同&#xff0c;但在财务数据分析上却有着相似的需求与流程&#xff0c;因此财务数据分析是可以形成一套标准化模板的。奥威BI数据可视化工具从多年丰富的BI项目中总结经验&#xff0c;形成一套标准化、系统化的财务数据分析模板&#xff0c;内含资产负…

比较20组迭代次数的大小36-12

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让A有3个点&#xff0c;B有1个点&#xff0c;排列组合&#xff0c;统计迭代次数并排序。 其中有20组数据 差值结构 迭代次数 构造平均列A 平均列A …

labelme安装以及标注自己的目标检测数据集

目录 一、labelme安装指令 二、使用教程 三、 快捷键 一、labelme安装指令 winR之后在弹出的对话框中输入cmd按回车进入终端 conda activate 虚拟环境名称 pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple/ 二、使用教程 安装成功之后在终端输入label…

支持多种推送方式的消息推送设计方案

文章目录 1 摘要2 消息推送架构3 数据库设计脚本4 核心代码4.1 消息推送业务实现4.2 消息重试推送 5 可优化思路6 Github 源码 1 摘要 通过邮件、短信等方式向用户发送通知是一项很常见的业务场景。如何设计一套好用、简洁消息推送架构&#xff1f;这是一个问题。本文将介绍一…

AI绘画小程序源码:创业的新机遇

随着AI绘画的兴起&#xff0c;人们对于这项技术的需求与日俱增。现有的小程序和AI绘图软件已经无法满足用户的画图需求&#xff0c;经常出现排队等待的情况&#xff0c;甚至有些人需要等上数小时&#xff0c;或者面对长达数万人的排队队伍。 因此&#xff0c;我们迫切需要新的、…

排污口水质在线监测,实时掌握排口水质助力生态治理

水是生命之源&#xff0c;良好的水生态环境是社会发展的必然要求。然而随着工业化和城市化的发展&#xff0c;人类面临空气和水环境污染等严峻挑战&#xff0c;其中水环境问题尤为突出。排污成为城市和工业生产过程中不可避免的环保问题。 为加快解决生态环境突出问题&#xff…

SparkSQL源码分析系列02-编译环境准备

本文主要描述一些阅读Spark源码环境的准备工作&#xff0c;会涉及到源码编译&#xff0c;插件安装等。 1. 克隆代码。 打开IDEA&#xff0c;在Git下的Clone中&#xff0c;输入 https://github.com/apache/spark&#xff0c;克隆代码到本地&#xff0c;CheckOut到目标版本Spar…

音视频FAQ(一):视频直播卡顿

一、摘要 本文介绍了视频直播卡顿的四个主要原因&#xff0c;用户网络问题、用户设备性能问题、技术路线的选择和实现问题。因本文主要阐述视频直播的卡顿&#xff0c;故技术路线的实现指的是&#xff1a;CDN供应商的实现问题&#xff0c;包含CDN性能不足、CDN地区覆盖不足。对…

修复由于找不到vcruntime140.dll,无法继续执行代码的问题

前段时间时间Office软件出现故障&#xff0c;但是由于一个项目没有做完&#xff0c;就没有卸载重新安装。刚抽时间卸载了Office2019&#xff0c;然后发现CAD、NX、Comsol等软件打开的时候报错&#xff1a;“由于找不到vcruntime140.dll 无法继续执行”。 于是我推测是刚才卸载…

数据集成中的关键挑战与策略:数据安全与隐私保护

在互联网的普及和信息技术的发展下&#xff0c;数据集成成为了现代社会中各个领域中不可或缺的任务。数据集成是指将来自不同数据源的数据整合到一个统一的数据集中&#xff0c;以便进行进一步的分析和利用。然而&#xff0c;由于数据的多样性和复杂性&#xff0c;数据集成过程…

git 开发环境配置

系统&#xff1a;Mac OS 1、下载git&#xff0c;官网已经推荐使用命令下载。 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh) 2、验证git是否安装成功 git --version 3、配置本地git全局变量 git config --global user.n…

面试题-React(三):什么是JSX?它与常规JavaScript有什么不同?

在React的世界中&#xff0c;JSX是一项引人注目的技术&#xff0c;它允许开发者在JavaScript中嵌套类似HTML的标签&#xff0c;用于描述UI组件的结构。本篇博客将通过丰富的代码示例&#xff0c;深入探索JSX语法&#xff0c;解析其在React中的用法和优势。 一、JSX基础语法 在…

决策准则之赫维兹准则、萨维奇遗憾准则、拉普拉斯不充分理由准则、沃尔德准则

一、Hurwicz criteria(赫维兹准则) 赫维兹准则是一种决策准则&#xff0c;用于在不确定条件下进行决策。考虑决策者对不同结果的态度&#xff0c;通过调整“乐观度参数”(optimism parameter)来权衡最优和最坏结果的可能性。 “乐观度参数”在0到1之间取值&#xff1a; 当乐…

推特群推王:引爆您的产品

作为出海市场的营销平台&#xff0c;Twitter的流量不断攀升&#xff0c;已然成为跨境贸易企业的一部分。当前&#xff0c;Twitter已不再是一个简单的社交平台&#xff0c;而是一个强大的营销平台&#xff0c;使企业能够与受众实时互动。然而&#xff0c;与其他社交媒体一样&…

springboot数据库密码加密的配置方法_Java

前言 由于系统安全的考虑&#xff0c;配置文件中不能出现明文密码的问题&#xff0c;本文就给大家详细介绍下springboot配置数据库密码加密的方法&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧 1.导入依赖 <!--数据库密码加密--> <dependency>&…

密码学学习笔记(十九):密码学关键术语的解释1

数据加密标准(DES) 数据加密标准是使用最广泛的加密体制&#xff0c;它于1977年被美国国家标准和技术研究所(NIST)采纳为联邦信息处理标准FIPS PUB 46。 DES3DESAES明文分组长度&#xff08;位&#xff09;6464128密文分组长度&#xff08;位&#xff09;6464128密钥长度&…