短链接系统测试报告

目录

项目背景

项目功能

自动化测试

总结


项目背景

随着互联网的发展,链接(URL)变得越来越长且复杂,这不仅影响用户体验,还可能由于字符限制导致在某些平台或应用中无法完整显示。为了解决这一问题,我们推出了“简洁链接”项目,旨在为用户提供一种快速、简便的方式来缩短和美化他们的URL。

项目目标:

  1. 提供简洁的URL服务: 为用户提供简短的、易于分享和记忆的URL,优化在线体验。
  2. 确保链接安全: 通过多种技术手段确保短链接的跳转安全,防止恶意跳转和钓鱼网站。
  3. 优化性能: 确保短链接的生成和跳转过程快速、稳定。
  4. 提供数据分析: 为用户提供短链接的点击量、来源等数据分析,帮助他们更好地了解用户行为和市场趋势。

项目功能:

  1. 短链接生成: 用户可以将长URL转换为简短的自定义链接。
  2. 链接跳转: 用户点击短链接后,将被安全、快速地重定向到原始链接。
  3. 链接管理: 用户可以管理他们的短链接,包括查看统计、编辑和删除链接。
  4. API接口: 提供API接口,方便第三方开发者集成短链接功能。

技术栈: 

SpringCloudAlibaba + MySQL + Redis + RocketMQ + ShardingJDBC

项目演示

项目测试用例

自动化测试

自动化工具类

package com.sfx.shortLink;import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import java.time.Duration;public class DriverUtils {private static ChromeDriver driver;public static ChromeDriver createDriver() {if(driver == null) {driver = new ChromeDriver();driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));}return driver;}
}

登陆测试

package com.sfx.shortLink;import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;import java.time.Duration;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ShortLinkLoginTest {private static ChromeDriver driver;/*** 在所有的测试用例执行之前,先要创建驱动*/@BeforeAllstatic void createAndGetDriver() {driver = DriverUtils.createDriver();driver.get("http://localhost:5173/");}public void userNameAndPasClear() {driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[1]/div/div/div[2]/input")).clear();driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input")).clear();}@Order(2)@ParameterizedTest@CsvSource({"sfx3214,123456789","dyrrrwww,123456789"})public void testLoginSuccess(String username , String password) {// /html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[1]/div/div/div[2]/input// /html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input// /html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input// 输入正确的用户名和密码userNameAndPasClear();driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[1]/div/div/div[2]/input")).sendKeys(username);driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input")).sendKeys(password);driver.findElement(By.xpath("//*[@id=\"app\"]/div[1]/div[1]/div[1]/form/div[2]/div[2]/button/span")).click();String exceptedTest = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[1]/span")).getText();Assertions.assertEquals(exceptedTest,"创建短链");// /html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[2]/spanexceptedTest = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[2]/span")).getText();Assertions.assertEquals(exceptedTest,"批量创建");driver.navigate().back();}@Test@Order(1)public void testLoginFail(String username,String password) {// 账户名和密码都为空userNameAndPasClear();driver.findElement(By.xpath("//*[@id=\"app\"]/div[1]/div[1]/div[1]/form/div[2]/div[2]/button/span")).click();String text = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[1]/h2")).getText();Assertions.assertEquals(text,"用户登录");// 账户为空,密码不为空userNameAndPasClear();driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input")).sendKeys("123456789");Assertions.assertEquals(text,"用户登录");// 账户不为空,密码为空userNameAndPasClear();driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[1]/div/div/div[2]/input")).sendKeys("sfx3214");Assertions.assertEquals(text,"用户登录");// 账户都不为空,密码不为空userNameAndPasClear();driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[1]/div/div/div[2]/input")).sendKeys("svrfdffed");driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input")).sendKeys("1234eadfvefdwf56789");Assertions.assertEquals(text,"用户登录");// 密码小于8位userNameAndPasClear();driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[1]/div/div/div[2]/input")).sendKeys("svrfdffed");driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input")).sendKeys("1");Assertions.assertEquals(text,"用户登录");}@AfterAllstatic void after() {driver.quit();}
}

注册测试

package com.sfx.shortLink;import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;public class ShortLinkRegisterTest {private static ChromeDriver driver;/*** 在所有的测试用例执行之前,先要创建驱动*/@BeforeAllstatic void createDriver() {driver = DriverUtils.createDriver();driver.get("http://localhost:5173/");}public void clear() {// 输入用户名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[1]/div/div/div[2]/input")).clear();// 输入邮箱driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[2]/div/div/div[2]/input")).clear();// 输入手机号driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[3]/div/div/div[2]/input")).clear();// 输入姓名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[4]/div/div/div[2]/input")).clear();// 输入密码driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[5]/div/div/div[2]/input")).clear();}@Testpublic void testRegisterSuccess() {clear();// 点击去注册driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[3]/button/span")).click();// 输入用户名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[1]/div/div/div[2]/input")).sendKeys("dyrrrwww");// 输入邮箱driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[2]/div/div/div[2]/input")).sendKeys("89@qq.com");// 输入手机号driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[3]/div/div/div[2]/input")).sendKeys("13965896936");// 输入姓名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[4]/div/div/div[2]/input")).sendKeys("dyrrrwww");// 输入密码driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[5]/div/div/div[2]/input")).sendKeys("123456789");// 点击注册driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[6]/div[2]/button/span")).click();String exceptedTest = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[1]/span")).getText();Assertions.assertEquals(exceptedTest,"创建短链");// /html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[2]/spanexceptedTest = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[2]/span")).getText();Assertions.assertEquals(exceptedTest,"批量创建");}@Testpublic void testRegisterFail() {//未输入任何一个// 点击去注册driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[3]/button/span")).click();clear();// 点击注册driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[6]/div[2]/button/span")).click();String text = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/h2")).getText();Assertions.assertEquals(text,"用户注册");clear();//不符合手机号格式// 输入用户名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[1]/div/div/div[2]/input")).sendKeys("dyrrrwww");// 输入邮箱driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[2]/div/div/div[2]/input")).sendKeys("89@qq.com");// 输入手机号driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[3]/div/div/div[2]/input")).sendKeys("1568989");// 输入姓名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[4]/div/div/div[2]/input")).sendKeys("dyrrrwww");// 输入密码driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[5]/div/div/div[2]/input")).sendKeys("123456789");// 点击注册driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[6]/div[2]/button/span")).click();text = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/h2")).getText();Assertions.assertEquals(text,"用户注册");//不符合邮箱格式clear();// 输入用户名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[1]/div/div/div[2]/input")).sendKeys("dyrrrwww");// 输入邮箱driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[2]/div/div/div[2]/input")).sendKeys("89.com");// 输入手机号driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[3]/div/div/div[2]/input")).sendKeys("13846789696");// 输入姓名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[4]/div/div/div[2]/input")).sendKeys("dyrrrwww");// 输入密码driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[5]/div/div/div[2]/input")).sendKeys("123456789");// 点击注册driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[6]/div[2]/button/span")).click();text = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/h2")).getText();Assertions.assertEquals(text,"用户注册");//密码长度小于8位// 输入用户名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[1]/div/div/div[2]/input")).sendKeys("dyrrrwww");// 输入邮箱driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[2]/div/div/div[2]/input")).sendKeys("89@qq.com");// 输入手机号driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[3]/div/div/div[2]/input")).sendKeys("13965896936");// 输入姓名driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[4]/div/div/div[2]/input")).sendKeys("dyrrrwww");// 输入密码driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[5]/div/div/div[2]/input")).sendKeys("111");// 点击注册driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/form/div[6]/div[2]/button/span")).click();text = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/div[2]/h2")).getText();Assertions.assertEquals(text,"用户注册");}@AfterAllstatic void after() {driver.quit();}
}

短链接测试

package com.sfx.shortLink;import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;public class ShortLinkProjectTest {private static ChromeDriver driver;@BeforeAllstatic void createDriver() {driver = DriverUtils.createDriver();driver.get("http://localhost:5173/");loginSuccess();}public static void userNameAndPasClear() {driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[1]/div/div/div[2]/input")).clear();driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input")).clear();}public static void loginSuccess() {// 登陆userNameAndPasClear();driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[1]/div/div/div[2]/input")).sendKeys("sfx3214");driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div[1]/form/div[1]/div[2]/div/div/div[2]/input")).sendKeys("123456789");driver.findElement(By.xpath("//*[@id=\"app\"]/div[1]/div[1]/div[1]/form/div[2]/div[2]/button/span")).click();String exceptedTest = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[1]/span")).getText();Assertions.assertEquals(exceptedTest, "创建短链");// /html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[2]/spanexceptedTest = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[2]/span")).getText();Assertions.assertEquals(exceptedTest, "批量创建");}@Testpublic void createShortLink() {// 点击创建短链driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[1]/span")).click();// 输入正确的短链,创建成功driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[1]/div/div/div/input")).sendKeys("https://xiaolincoding.com/");// 点击描述信息,自动输入描述信息driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[2]/div/div/textarea")).click();// 点击确认创建短连接诶driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[5]/div/div/button[1]/span")).click();}@Testpublic void creatFail() {// 没有输入短链,点击确认,创建失败// 点击创建短链driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[1]/div/button[1]/span")).click();// 输入正确的短链,创建成功driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[1]/div/div/div/input")).sendKeys("");// 点击描述信息,自动输入描述信息driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[2]/div/div/textarea")).click();// 点击确认创建短连接诶driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[5]/div/div/button[1]/span")).click();}@Testpublic void restoreShortLink() {// /html/body/div[1]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[1]/td[3]/div/div/a/spandriver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[1]/td[3]/div/div/a/span")).click();String exceptedTest = driver.getCurrentUrl();Assertions.assertNotEquals(exceptedTest, "https://xiaolincoding.com/");}@Testpublic void updateShortLink() {// /*[name()='svg']/*[name()='use']//  /html/body/div[1]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[1]/td[8]/div/div/i[2]/svg// //*[@id="app"]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[1]/td[8]/div/div/i[2]//*[name()='svg']/*[name()='path']// //*[@id="app"]/*[name()='svg']/*[name()='path']driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[1]/td[8]/div/div/i[2]//*[name()='svg']")).click();WebElement element = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[7]/div/div/div/div/form/div[2]/div/div/textarea"));element.clear();element.sendKeys("i love you");// 点击确认driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[7]/div/div/div/div/form/div[5]/div/div/button[1]/span")).click();}@Testpublic void recycle() {driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[1]/td[8]/div/div/i[3]//*[name()='svg']")).click();driver.findElement(By.xpath("/html/body/div[2]/div[9]/div/div[2]/button[2]")).click();// 点击回收站driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/main/div/div/div[1]/div[2]/div")).click();String text = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[2]/td[3]/div/div/a/span")).getText();Assertions.assertEquals(text, "http://nurl.ink:8001/2CQufK");// 回收站移除driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[2]/td[8]/div/div/i[2]//*[name()='svg']")).click();// 回到默认分组driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[1]/ul/li/div")).click();// 验证String text1 = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[1]/td[3]/div/div/a/span")).getText();System.out.println(text1);}@Testpublic void shortLinkGroup() {driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[1]/div[1]/div[2]/img")).click();driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[4]/div/div/div/form/div/div/div/div/input")).sendKeys("新的分组");driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[4]/div/div/footer/span/button[2]")).click();WebElement element = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[1]/ul/li[2]/div"));System.out.println(element.getText());Assertions.assertEquals(element.getText(), "新的分组\n" +"0");}@Testpublic void shortLinkStats() {// 点击短链接统计按钮能够正常查看统计内容driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[2]/div/div[2]/div[1]/div[3]/div/div[1]/div/table/tbody/tr[1]/td[8]/div/div/i[1]//*[name()='svg']")).click();WebElement element = driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[3]/div/div/div/div[2]/div[1]/div/div/div/div[2]"));Assertions.assertTrue(element.getText() != null);//跳转短链接后,统计的值与原先的有变化//能否正常的从曲线切换到直方图driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[3]/div/div/div/div[2]/div[2]/div[1]/div/div[1]/div[1]/div/button")).click();//能否查看访问记录driver.findElement(By.xpath("/html/body/div[1]/div/section/main/div/div/div[3]/div/div/div/div[2]/div[1]/div/div/div/div[3]")).click();}@AfterAllstatic void after() {driver.quit();}
}

测试套件

package com.sfx.shortLink;import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;/*** 套件类*/
@Suite
@SelectClasses({ShortLinkLoginTest.class,ShortLinkProjectTest.class,ShortLinkRegisterTest.class})
public class TestSuite {}

总结

以上便是本次短链接系统的测试报告~ 

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

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

相关文章

OpenHarmony—UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility(例如启动三方支付UIAbility)。 本章节将从如下场…

【ARM架构】ARMv8-A 系统中的安全架构概述

一个安全或可信的操作系统保护着系统中敏感的信息,例如,可以保护用户存储的密码,信用卡等认证信息免受攻击。 安全由以下原则定义: 保密性:保护设备上的敏感信息,防止未经授权的访问。有以下几种方法可以做…

NestJS入门2:创建模块

前文参考: NestJS入门1 1. 创建user模块 在项目目录下输入以下命令 nest g resource user 执行完后会在src文件夹下创建出user文件夹及文件夹下相应的文件,如下 2. 增加打印 3. 测试 (1)POSTBody Postman 服务端的打印 &…

力扣 188. 买卖股票的最佳时机 IV

题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/ C题解:动态规划 思路同力扣 123. 买卖股票的最佳时机 III-CSDN博客,只是把最高2次换成k次。如果思路不清晰,可以将k从0写到4等找找规律…

OpenAI 全新发布文生视频模型 Sora,支持 60s 超长长度,有哪些突破?将带来哪些影响?

Sora大模型简介 OpenAI 的官方解释了在视频数据基础上进行大规模训练生成模型的方法。 我们下面会摘取其中的关键部分罗列让大家快速get重点。 喜欢钻研的伙伴可以到官网查看技术报告: https://openai.com/research/video-generation-models-as-world-simulator…

IDEA报错:无法自动装配。找不到 ... 类型的 Bean。

今天怎么遇见这么多问题。 注:似乎只有在老版本的IDEA中这个报错是红线,新版的IDEA就不是红线了(21.2.2是红的) 虽然会报错无法自动装配,但启动后仍能正常执行 不嫌麻烦的解决做法:Autowired的参数reques…

Django后端开发——ORM

文章目录 参考资料ORM-基础字段及选项字段类型练习——添加模型类应用bookstore下的models.py数据库迁移——同步至mysqlmysql中查看效果 字段选项Meta类定义示例:改表名应用bookstore下的models.py终端效果 练习——改表名字段选项修改应用bookstore下的models.py终…

Web服务器基础

Web服务器基础 【一】前端概述 【1】HTML HTML(超文本标记语言)是用于创建网页结构的标记语言。它定义了网页的骨架,包括标题、段落、列表、链接等元素,但没有样式。可以将HTML视为网页的结构和内容的描述。 【2】CSS css&…

山西电力市场日前价格预测【2024-02-20】

日前价格预测 预测说明: 如上图所示,预测明日(2024-02-20)山西电力市场全天平均日前电价为354.58元/MWh。其中,最高日前电价为579.21元/MWh,预计出现在18:30。最低日前电价为247.23元/MWh,预计…

Git基本操作(超详细)

文章目录 创建Git本地仓库配置Git配置命令查看是否配置成功重置配置 工作区、暂存区、版本库添加文件--场景一概述实例操作 查看.git文件添加文件--场景二修改文件版本回退撤销修改情况⼀:对于工作区的代码,还没有 add情况⼆:已经 add &#…

springboot201基于SpringBoot的论坛系统设计与实现

论坛系统设计与实现 摘 要 如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在世界上遥遥领先,让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这…

推荐12个超级哇塞的工具

今天分享 12 个完全免费的软件工具,包括 5 个电脑软件和 7 个在线工具,每一个都是自己用心挑选,每一个都是良心免费,让你惊艳。 1 WinFR界面版 WinFR界面版是一款基于微软官方命令行工具 Windows File Recovery 的图形界面工具…