测试开发体系介绍——测试体系介绍-L3

目录:

  1. 测试框架体系TDDDDTBDDATDD介绍
    1. 测试框架是什么?
    2. 测试框架的价值:
    3. 测试框架的收益:
    4. 常见测试框架类型:
    5. TDD
    6. BDDBehaviorDrivenDevelopment
    7. ATDDAcceptanceTestDrivenDevelopment
    8. MBTModelBasedTesting
    9. DDTDataDrivenTesting:
  2. 持续交付与DevOps体系
    1. 传统开发流程:
    2. 敏捷开发体系:
    3. 持续集成:
    4. GitLabCI流程:
    5. 自动化测试持续集成:
    6. 持续交付介绍:
    7. 持续集成与持续交付:
    8. 持续交付流水线:
    9. 流水线构建
    10. GitLabCD流程:
    11. 持续部署:
    12. 持续集成、持续交付、持续部署:
    13. DevOps体系:
    14. DevOps相关技能示例:
    15. DevOps中的左移与右移:
  3. 测试左移体系
    1. 为什么要做测试左移?
    2. 微软的左移实践:
    3. 测试左移主要实践:
    4. 代码审查CodeReview
    5. 开发人员收益
    6. CodeReview可以发现哪些问题
    7. GerritCodeReview
    8. GitlabMergeRequestCodeReview
    9. 代码审计平台SonarQube
    10. SonarQube项目分析案例
    11. 覆盖率集成
    12. 典型bug案例
    13. SonarQube
  4. 测试右移体系
    1. 测试右移定义:
    2. 测试右移主要实践:
    3. 测试右移案例百度前端性能监控:
    4. 测试右移案例App崩溃监控:
    5. 为什么要搭建监控系统
    6. 常用架构ELKElasticStack
    7. ELKElasticStack应用
    8. 全流程质量监控
    9. 移动端监控
    10. 插桩技术
    11. 常见质量维度的监控类型
    12. 常见数据存储平台
    13. 数据检索
    14. 数据分析
    15. 测试执行分析
    16. 漏测分析
    17. 关联分析
    18. 更多数据收集
    19. 业务建模
  5. 精准测试体系
    1. 什么是精准测试?
    2. 阿里云效精准测试实施案例
    3. 精准测试案例
    4. 精准测试的应用价值
    5. 行业经典案例
    6. 关键技术点
  6. 测试开发体系讲解
    1. 腾讯与阿里的质量保证服务参考:
    2. 测试开发技术体系

1.测试框架体系 TDD DDT BDD ATDD 介绍

测试框架是什么?
  • 测试框架是一组用于创建和设计测试用例的指南或规则。框架由旨在帮助 QA 专业人员更有效地测试的实践和工具的组合组成。 这些指南可能包括编码标准、测试数据处理方法、对象存储库、存储测试结果的过程或有关如何访问外部资源的信息。
测试框架的价值:
  • 测试框架是任何成功的自动化测试过程的重要组成部分。它们可以降低维护成本和测试工作,并为寻求优化其敏捷流程的 QA 团队提供更高的投资回报率 (ROI)。
测试框架的收益:
  • Improved test efficiency 提高测试效率
  • Lower maintenance costs 降低维护成本
  • Minimal manual intervention 最少的人工干预
  • Maximum test coverage 最大测试覆盖率
  • Reusability of code 代码的可重用性
常见测试框架类型:

框架                                        说明

TDD                                        代码风格

DDT                                        数据驱动风格

ATDD                                      验收测试驱动开发

BDD                                        行为驱动开发 (Behavior-driven development)

MBT                                        Model Based Testing 基于模型的测试

TDD

TDD 定义:

  • 测试驱动开发(TDD)是一个软件开发过程,在软件完全开发之前,将软件需求转换为测试用例,并通过针对所有测试用例重复测试软件来跟踪所有软件开发。这与首先 ​​ 开发软件和稍后创建测试用例相反

TDD 流程:

  • 单元测试
  • 重构
  • 覆盖率
  • 可测性提升
  • 模型驱动设计

代表作 JUnit TestNG

    @Test
    void standardAssertions() {
        assertEquals(2, calculator.add(1, 1));
        assertEquals(4, calculator.multiply(2, 2),
                "The optional failure message is now the last parameter");
        assertTrue('a' < 'b', () -> "Assertion messages can be lazily evaluated -- "
                + "to avoid constructing complex messages unnecessarily.");
    }

TestNG:

package example1;

import org.testng.annotations.*;

public class SimpleTest {

 @BeforeClass
 public void setUp() {
   // code that will be invoked when this test is instantiated
 }

 @Test(groups = { "fast" })
 public void aFastTest() {
   System.out.println("Fast test");
 }

 @Test(groups = { "slow" })
 public void aSlowTest() {
    System.out.println("Slow test");
 }

}

代表作 Pytest UnitTest

# content of test_sample.py
def inc(x):
    return x + 1


def test_answer():
    assert inc(3) == 5
import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)
BDD Behavior Driven Development
  • 在软件工程中,行为驱动开发 (BDD) 是一种敏捷软件开发过程,它鼓励软件项目中的开发人员、质量保证专家和客户代表之间进行协作。它鼓励团队使用对话和具体示例来形成对应用程序应该如何运行的共同理解。它源于测试驱动开发 (TDD)。行为驱动开发将 TDD 的通用技术和原则与领域驱动设计和对象的思想相结合面向分析和设计,为软件开发和管理团队提供共享工具和共享流程,以便在软件开发方面进行协作。

BDD VS TDD:

BDD:

BDD 与 TDD 

BDD 相关框架:

  • JBehave
  • Cucumber
  • Mspec
  • Specflow

Cucumber:

 

Cucumber 测试用例 Scenario 场景:

Scenario: Finding some cheese
   Given I am on the Google search page
   When I search for "Cheese!"
   Then the page title should start with "cheese"

Cucumber 测试用例步骤定义:

public class ExampleSteps {

    private final WebDriver driver = new FirefoxDriver();

    @Given("I am on the Google search page")
    public void I_visit_google() {
        driver.get("https://www.google.com");
    }

    @When("I search for {string}")
    public void search_for(String query) {
        WebElement element = driver.findElement(By.name("q"));
        // Enter something to search for
        element.sendKeys(query);
        // Now submit the form. WebDriver will find the form for us from the element
        element.submit();
   }

   @Then("the page title should start with {string}")
   public void checkTitle(String titleStartsWith) {
       // Google's search is rendered dynamically with JavaScript
       // Wait for the page to load timeout after ten seconds
       new WebDriverWait(driver,10L).until(new ExpectedCondition<Boolean>() {
           public Boolean apply(WebDriver d) {
               return d.getTitle().toLowerCase().startsWith(titleStartsWith);
           }
       });
   }

   @After()
   public void closeBrowser() {
       driver.quit();
   }
}

cucumber 项目结构:

ATDD Acceptance Test Driven Development

ATDD 定义:

  • 验收测试驱动开发 (ATDD) 是一种基于业务客户、开发人员和测试人员之间沟通的开发方法。ATDD 包含许多与示例规范 (SBE)、行为驱动开发 (BDD)、示例驱动开发 (EDD)、和支持驱动开发(也称为故事测试驱动开发(SDD)。所有这些流程都有助于开发人员和测试人员在实施之前了解客户的需求,并使客户能够使用他们自己的领域语言进行交流。

ATDD 相关工具:

  • FitNesse:完全集成的独立wiki和验收测试框架
  • Robot Framework是一个基于python的、可扩展的关键字驱动的自动化框架,用于验收测试、验收测试驱动开发(ATDD)、行为驱动开发(BDD)和机器人过程自动化(RPA)。

 

Robotframework:

Robotframework 介绍:

  • Robot Framework是一个通用的开源自动化框架。它可以用于测试自动化和机器人过程自动化(RPA)。Robot Framework有一个简单的语法,使用人类可读的关键字。它的功能可以通过使用Python、Java或许多其他编程语言实现的库来扩展。Robot Framework有一个丰富的生态系统,包括作为独立项目开发的库和工具。

Robotframework 测试用例:

*** Settings ***
Documentation     Simple example using SeleniumLibrary.
Library           SeleniumLibrary

*** Variables ***
${LOGIN URL}      http://localhost:7272
${BROWSER}        Chrome

*** Test Cases ***
Valid Login
    Open Browser To Login Page
    Input Username    demo
    Input Password    mode
    Submit Credentials
    Welcome Page Should Be Open
    [Teardown]    Close Browser

*** Keywords ***
Open Browser To Login Page
    Open Browser    ${LOGIN URL}    ${BROWSER}
    Title Should Be    Login Page

Input Username
    [Arguments]    ${username}
    Input Text    username_field    ${username}

Input Password
    [Arguments]    ${password}
    Input Text    password_field    ${password}

Submit Credentials
    Click Button    login_button

Welcome Page Should Be Open
    Title Should Be    Welcome Page

 数据驱动风格:

*** Settings ***
Test Template    Login with invalid credentials should fail

*** Test Cases ***                USERNAME         PASSWORD
Invalid User Name                 invalid          ${VALID PASSWORD}
Invalid Password                  ${VALID USER}    invalid
Invalid User Name and Password    invalid          invalid
Empty User Name                   ${EMPTY}         ${VALID PASSWORD}
Empty Password                    ${VALID USER}    ${EMPTY}
Empty User Name and Password      ${EMPTY}         ${EMPTY}

BDD 风格:

*** Test Cases ***
Valid Login
    Given login page is open
    When valid username and password are inserted
    and credentials are submitted
    Then welcome page should be open

 ATDD VS BDD:

                TDD                         ATDD                        BDD

受众         开发                        开发 测试 客户          开发 测试 客户

过程         代码                        DSL                           行为

目标         代码调用功能         验收测试需求             需求

MBT Model Based Testing 
  • 基于模型的测试
  • GraphWalker,一个开源的基于模型的测试工具

edge 代表步骤:

  • 一条边代表一个动作,一个过渡。 操作可以是 API 调用、按钮单击、超时等。任何将您的被测系统移动到您想要验证的新状态的任何事情。但请记住,边缘没有进行验证。这只发生在顶点。 

 vertex 代表断言:

  • 一个顶点代表验证,一个断言。 验证是您的代码中有断言的地方。在这里,您可以验证 API 调用是否返回正确的值、按钮单击是否确实关闭了对话框,或者在应该发生超时时,被测系统触发了预期的事件。

graph 代表测试用例集:

  • 模型是一个图,它是一组顶点和边 从模型中,GrapWalker 将生成一条通过它的路径。一个模型有一个起始元素,一个规则如何生成路径的生成器,以及告诉 GraphWalker 何时停止生成路径的相关停止条件。 

测试用例样板生成:

 @Override
    public void v_Pet() {
        $(By.tagName("h2")).shouldHave(text("Pet"));
    }

    @Override
    public void e_AddPetFailed() {
        $(By.id("name")).clear();
        $(By.id("birthDate")).clear();
        $(By.id("birthDate")).sendKeys("2015/02/05" + Keys.ENTER);
        $(By.id("ui-datepicker-div")).shouldBe(not(visible));
        $(By.id("type")).selectOption("dog");
        $("button[type=\"submit\"]").click();
    }

    @Override
    public void e_VisitAddedFailed() {
        $(By.id("description")).clear();
        $("button[type=\"submit\"]").click();
    }
}
DDT Data Driven Testing:

DDT:

  • 数据驱动测试(DDT),也称为表驱动测试或参数化测试,是一种软件测试方法,用于计算机软件的测试,用于描述使用条件表直接作为测试输入和可验证输出完成的测试以及测试环境设置和控制没有硬编码的过程

DDT 相关工具:

  • DDT 是一种实践,可以跟很多框架结合
  • 单元测试结合 DDT:JUnit4 JUnit5 TestNG
  • RobotFramework DDT
  • YAML JSON CSV 驱动 HttpRunner 

数据驱动应用案例

  • HttpRunner 可以根据代理抓包自动生成测试用例
  • YAPI、Swagger 等工具可以根据数据自动生成测试用例代码
  • JVM-Sandbox-Repeater Gor 录制工具可以把请求保存为测试用例并重放以实现快速回归测试 

HttpRunner测试框架:

HttpRunner 测试用例:

config:
  name: "request methods testcase with functions"
  variables:
    foo1: config_bar1
    foo2: config_bar2
    expect_foo1: config_bar1
    expect_foo2: config_bar2
  base_url: "https://postman-echo.com"
  verify: False
  export: ["foo3"]

teststeps:
  - name: get with params
    variables:
      foo1: bar11
      foo2: bar21
      sum_v: "${sum_two(1, 2)}"
    request:
      method: GET
      url: /get
      params:
        foo1: $foo1
        foo2: $foo2
        sum_v: $sum_v
      headers:
        User-Agent: HttpRunner/${get_httprunner_version()}
    extract:
      foo3: "body.args.foo2"
    validate:
      - eq: ["status_code", 200]
      - eq: ["body.args.foo1", "bar11"]
      - eq: ["body.args.sum_v", "3"]
      - eq: ["body.args.foo2", "bar21"]
  - name: post raw text
    variables:
      foo1: "bar12"
      foo3: "bar32"
    request:
      method: POST
      url: /post
      headers:
        User-Agent: HttpRunner/${get_httprunner_version()}
        Content-Type: "text/plain"
      data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
    validate:
      - eq: ["status_code", 200]
      - eq:
          [
            "body.data",
            "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32.",
          ]
  - name: post form data
    variables:
      foo2: bar23
    request:
      method: POST
      url: /post
      headers:
        User-Agent: HttpRunner/${get_httprunner_version()}
        Content-Type: "application/x-www-form-urlencoded"
      data: "foo1=$foo1&foo2=$foo2&foo3=$foo3"
    validate:
      - eq: ["status_code", 200]
      - eq: ["body.form.foo1", "$expect_foo1"]
      - eq: ["body.form.foo2", "bar23"]
      - eq: ["body.form.foo3", "bar21"]

数据驱动风格为什么广受欢迎

  • 维护成本最低,录制回放技术越来越成熟,可以与数据驱动很好的结合。低代码、用例生成技术的流行,会让数据驱动风格更受欢迎。

2.持续交付与 DevOps 体系

传统开发流程:

敏捷开发体系:

 

持续集成:
  • 持续集成是一种 DevOps 软件开发实践。采用持续集成时,开发人员会定期将代码变更合并到一个中央存储库中,之后系统会自动运行构建和测试操作。持续集成通常是指软件发布流程的构建或集成阶段,需要用到自动化组件(例如 CI 或构建服务)和文化组件(例如学习频繁地集成)。持续集成的主要目标是更快发现并解决缺陷,提高软件质量,并减少验证和发布新软件更新所需的时间。 

 

GitLab CI 流程:

 

自动化测试持续集成:

 

持续交付介绍:
  • 持续交付是一种软件开发实践,通过持续交付,系统可以自动为将代码更改发布到生产环境做好准备。​ 现代应用程序开发的支柱,持续交付通过在构建阶段后将所有代码变更部署到测试环境和/或生产环境中,实现对持续集成的扩展。在正确实施时,开发人员将始终拥有已通过标准化测试流程的部署就绪构建构件 ​。 采用持续交付时,开发人员可以自动执行单元测试以外的测试,这样他们就可以在部署到客户环境前跨多个维度对应用程序更新进行验证。这些测试可能包括 UI 测试、负载测试、集成测试、API 可靠性测试等。这有助于开发人员更全面地验证更新并抢先发现其中的问题。 
持续集成与持续交付:

持续交付流水线:

 

流水线构建

GitLab CD 流程:

 

持续部署:
  • 通过持续部署,可自动完成从代码提交到生产的全过程。开发与交付阶段之间的触发器是自动的,因此,在代码更改获得验证并通过所有测试后,就会立即发布。这意味着在改进功能可用后客户便可立即获得这些功能。 

 

持续集成、持续交付、持续部署:

 

DevOps 体系:
  • 持续集成
  • 持续交付
  • 微服务
  • 基础设施即代码
  • 监控和日志记录
  • 沟通与合作

 

DevOps 相关技能示例:

 

DevOps 中的左移与右移:

 

 

3.测试左移体系

为什么要做测试左移?

微软的左移实践:

 

测试左移主要实践: 
  • 需求分析与评审{class=column}
  • 代码评审{class=column}
  • 代码审计、代码静态分析{class=column}
  • 自动化测试左移{class=column}
  • 单元测试{class=column}
  • 覆盖率统计{class=column}
  • 应用监控{class=column}
  • 测试用例生成{class=column} {class=“ui grid three column”}
代码审查 Code Review
  • 代码审查是指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。代码审查常以不同的形式进行,例如结对编程、非正式的看过整个代码,或是正式的软件检查。 
开发人员收益
  • 工作认真且始终如一
  • 向其他开发人员学习最佳实践和新技术
  • 在代码库中实现一致性和质量 
Code Review 可以发现哪些问题
  • 设计:代码是否经过精心设计并适合代码库?
  • 功能:代码是否按预期以对用户有益的方式执行?
  • 复杂性:其他开发人员能否理解和使用代码?
  • 命名:代码是否包含变量、类和方法等元素的清晰名称?
  • 注释:注释是否具体且完整? 
Gerrit Code Review 

 

Gitlab Merge Request Code Review 

 

代码审计平台 SonarQube 

SonarQube 项目分析案例 

覆盖率集成 

典型 bug 案例 

SonarQube 

总结

  • 测试左移可以让我们更早更快的发现研发阶段引入的 bug,从而可以更好的保障产品质量,降低项目沟通成本,提高研发效率。 

4.测试右移体系

测试右移定义:
  • 右移是在实际条件下在生产中执行测试、质量和性能评估的做法。右移方法确保在生产中运行的应用程序可以承受真实的用户负载,同时确保同样高水平的质量。 通过右移,DevOps 团队测试构建的应用程序以确保性能、弹性和软件可靠性。目标是检测和修复在开发环境中难以预料的问题。
测试右移主要实践: 
  • 应用监控
  • 综合监控 质量监控 Continuous Quality Monitoring
  • A/B 测试
  • 金丝雀部署 Canary releases
  • TIP 线上测试
  • 故障注入 混沌工程 Chaos testing

 

测试右移案例 百度前端性能监控:

测试右移案例 App崩溃监控:

 

 

为什么要搭建监控系统
  • 测试数据收集
  • 测试数据分析
  • 测试数据可视化与分析 
常用架构 ELK ElasticStack 

ELK ElasticStack 应用 

全流程质量监控
  • 研发自测
  • 内部测试
  • 公测
  • 线上监控
  • 监控分析测试覆盖度
  • 定位问题
  • 监控使用人数
  • 监控使用深度
移动端监控
  • 移动端插桩
    • 埋点:硬编码
    • AOP 编程:AspectJ
    • 插桩框架:ASM、JavaAssist
  • 数据收集回传
    • logstash
    • kafka
    • filebeat
 插桩技术
  • 基于编译插桩,需要植入 sdk,NewRelic
  • 基于 dex 插桩:Appetizer
  • Hook:XPosed、Frida
常见质量维度的监控类型
  • app 崩溃监控(Bugly)
  • 应用性能监控(APM)
  • 业务监控(TalkingData、友盟)
  • 质量监控(缺位)
  • 精准化测试平台
常见数据存储平台
  • 数据同步:logstash、flume
  • 数据存储:elasticsearch、influxdb、prometheus
  • 前端展现:kibana、grafana
数据检索 

数据统计

 

数据分析 

测试执行分析

漏测分析 

 
关联分析 

更多数据收集
  • 用户反馈分析:
  • 核心用户在产品内的反馈
  • 应用商店评论
  • 进行汇总分析
  • 产品反馈
  • 外部平台:Bugly 友盟 Flurry
 业务建模
  • 建模
    • UI 模型
    • 接口模型
    • 性能数据
    • 代码流模型
  • 分析
    • 基于规则
    • diff 算法
    • 机器学习+AI

5.精准测试体系 

什么是精准测试?
  • 百度百科:精准测试是一套计算机测试辅助分析系统。精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。
  • 阿里:通过建立测试用例与业务方法的关联关系,在代码发生变化时,精准的推荐出需要运行的用例,进行测试执行与结果反馈。通过精准的圈定测试范围,可以带来效率和速度的双重收益。 
  • Thoughtworks:利用技术手段对测试过程产生的数据进行采集存储,计算,汇总,可视化最终帮助团队提升软件测试的效率、并对项目整体质量进行改进和优化的这一系列操作。
  • 网易:精准测试是一套计算机测试辅助分析系统。使用用例和代码两个关键因子,进行质量综合考量和分析的创新测试理论方法体系,核心组件包含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。
 阿里云效精准测试实施案例

 

精准测试案例 

 

精准测试的应用价值 

基于测试用例与代码的关联数据分析,实现测试覆盖改进的方法:

  • 根据代码变更定位测试用例范围
  • 根据代码覆盖精准改进测试用例
  • 测试用例漏测精准定位
  • 基于大数据反推有效测试用例
行业经典案例
  • 百度利用覆盖率增量从回归数据中提取有效覆盖
  • 精准定位用例数据与覆盖率关系
  • 代码行为流建模
  • 星云测试
  • 有赞集成测试覆盖率统计实践
  • 蚂蚁金服的代码实时染色
  • 有赞精准测试实践
  • 网易精准测试
  • 阿里云效
关键技术点 
  • 静态分析
    • 语法树分析 javaparser antlr
    • 代码变更 git diff
    • 字节码分析 ASM
  • 动态分析
    • 覆盖率 JaCoCo
    • 插桩 JVM-SANDBOX ByteBuddy
    • 流程追踪 debug trace

6.测试开发体系讲解

腾讯与阿里的质量保证服务参考: 

阿里云效测试能力与架构

腾讯 WeTest 测试能力全景图:

测试开发技术体系 
  • 用户端测试
    • Web/App 测试
    • Web/App 自动化测试
    • 用户端专项测试
    • 用户端安全测试
  • 服务端测试
    • 接口协议与 Mock
    • 接口自动化测试
    • 服务端性能测试
    • 服务端安全测试
  • 持续交付
    • 容器技术 Docker
    • 自动化系统 Jenkins
    • 持续集成
    • 持续交付
  • 测试开发
    • 持续部署 DevOps
    • 测试框架 测试平台
    • 测试左移 精准测试
    • 测试右移 质量监控

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS 签名打包Hap(s)、App(s)

1. 基本概念 HarmonyOS应用通过数字证书&#xff08;.cer文件&#xff09;和Profile文件&#xff08;.p7b文件&#xff09;来保证应用的完整性&#xff0c;数字证书和Profile文件可通过申请发布证书和Profile文件获取。   申请数字证书和Profile文件前&#xff0c;首先需要通…

mySQL数据库用户管理

目录 1.创建外键约束 外键的定义 主键表和外键表的理解 具体操作 2.数据库用户管理 新建用户 查看用户信息 重命名用户 删除用户 修改当前和其他用户登录密码 忘记 root密码的解决办法 3.数据库用户授权 授予权限 查看权限 撤销权限 1.创建外键约束 外键的定义…

又是阿里,通义灵码免费平替GitHub Copilot

毫无疑问&#xff0c;人工智能已经在影响着我们日常生活的方方面面&#xff0c;同样的在软件开发领域&#xff0c;AI正在改变我们的开发方式。在软件开发领域&#xff0c;尽管有许多强大的AI编码工具&#xff0c;但国产&#xff0c;免费&#xff0c;使用门槛低&#xff0c;用起…

Fastjson 常用语法

一.Json数据格式回顾 1.1 什么是json JSON:(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSO…

省时攻略:快速获得Creo安装包,释放创意天才!

不要再在网上浪费时间寻找Creo的安装包了&#xff0c;一键下载安装&#xff0c; 你要的一切都可以在这里找到&#xff01;我们深知在海量的信息中寻找合适的软件包并非易事&#xff0c;而且往往还伴随着繁琐的安装过程。然而&#xff0c;现在有了我们&#xff0c;一切变得轻松简…

常见激活函数

激活函数是神经网络中的一种非线性变换&#xff0c;它在神经元的输出上引入了非线性性质&#xff0c;使神经网络能够更好地学习和适应复杂的数据模式。以下是一些常见的激活函数&#xff1a; Sigmoid 函数 Sigmoid 函数将输入映射到&#xff08;0&#xff0c;1&#xff09;之间…

模块与包、反序列化校验源码分析、断言、drf之请求、drf之响应

模块与包 什么是模块&#xff1f; 一个py文件&#xff0c;被别的py文件导入使用&#xff0c;它就是模块 如果py文件&#xff0c;直接右键运行&#xff0c;它叫脚本文件 什么是包&#xff1f; 一个文件夹&#xff0c;下有 __init__.py &#xff0c;和很多py文件&#xff0c;这个…

Ubuntu 常用命令之 scp 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 SCP&#xff08;Secure Copy&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;的文件传输协议&#xff0c;它可以在本地和远程主机之间安全地复制文件。在Ubuntu系统下&#xff0c;我们可以使用scp命令来实现这个功…

tcp 的限制 (TCP_WRAPPERS)

#江南的江 #每日鸡汤&#xff1a;青春是打开了就合不上的书&#xff0c;人生是踏上了就回不了头的路&#xff0c;爱情是扔出了就收不回的赌注。 #初心和目标&#xff1a;拿到高级网络工程师 TCP_WRAPPERs Tcp_wrappers 对于七层模型中是位于第四层的安全工具&#xff0c;他…

零成本搭建一款博客网站(基于Vercel+Hexo完美实现)【保姆级教程】

文章目录 &#x1f438;基于VercelHexo零成本搭建博客网站&#x1f43b;实现思路 &#x1f42e;Hexo的配置与安装&#x1f412;Hexo的美化与使用&#x1f42b;Github的推送与部署&#x1f43c;Vercel部署与网站上线&#x1f41b;总结 &#x1f438;基于VercelHexo零成本搭建博客…

冬至·特辑:Note4---二叉树的链式结构

目录 前言&#x1f9f6; 1. 二叉树链式结构的实现&#x1f427; 1.1 要实现的目标&#x1f3af; 2.二叉树的创建&#x1f339; 2.1代码实现 2.1.1 TreeNode.h 2.1.2 TreeNode.c 3.实现二叉树的遍历&#x1f432; 3.1 思路分析&#x1f424; 3.2 前/中/后序遍历&#…

IDEA 中 Tomcat 日志乱码

1、服务器输出乱码 修改 File -> settings -> Editor -> General ->Console 中&#xff0c;utf-8改为GBK&#xff0c;反之改成utf-8 2、Tomcat Localhost Log 或者 Tomcat Catalina Log乱码 进入Tomcat 中的conf文件中的logging.properties 哪个有问题改哪个&…

1223西站坐标更新

1223 西站坐标更新 1.Update for the station’s location def initial_out_map_indoor_points(self):Load the indoor data and update both the wall_matrix and the ditch_matrix.# Initialize the wall_matrix# List of coordinatescoordinates [(417, 287, 417, 290),(4…

Java--抽象工厂设计模式

抽象工厂设计模式 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 在抽象工厂模式中&#xff0c;接口是负责…

考研往应届考生报名流程?

文章目录&#xff1a; 一&#xff1a;考试时间相关 二&#xff1a;公告查询获取信息 三&#xff1a;提供材料 1.基本要求 2.证件要求 四&#xff1a;相关问题 1.报名流程如何操作 2.考点选择 2.1 应届考生考点选择 2.2 往届考生考点选择 3.预报名时间可能不同 4.档…

Python编程 圣诞树教程 (附代码)专属于程序员的浪漫

文章目录 1.turtle库2.python函数的定义规则3.引入库4.定义画彩灯函数5.定义画圣诞树的函数6.定义树下面小装饰的函数7.定义一个画雪花的函数8.画五角星9.写文字10.全部源代码11.html圣诞树代码实现&#xff08;动态音乐&#xff09; 1.turtle库 turtle库是Python语言中一个很…

Java LocalDateTime转Json报错处理

在项目中LocalDateTime 进行json转换时&#xff0c;抛出序列化异常&#xff0c;查找解决方案&#xff0c;记录下来&#xff0c;方便备查。 报错信息 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type java.time.LocalDateT…

【小白攻略】php 小数转为百分比,保留两位小数的函数

php 小数转为百分比 首先&#xff0c;最简单直观的方法是利用PHP内置的number_format函数。该函数可以对一个数字进行格式化&#xff0c;并可以设置小数点后的精度。通过将小数乘以100&#xff0c;再用number_format函数将结果格式化为百分比形式&#xff0c;即可达到将小数转为…

基于Java SSM框架实现多人试卷批改考试命题系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现多人试卷批改考试命题系统演示 摘要 多人命题系统是高校为教师、学生试卷的重要组成部分&#xff0c;是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。我所在学院多采用半手工管理学生试卷…

什么是动态代理?

目录 一、为什么需要代理&#xff1f; 二、代理长什么样&#xff1f; 三、Java通过什么来保证代理的样子&#xff1f; 四、动态代理实现案例 五、动态代理在SpringBoot中的应用 导入依赖 数据库表设计 OperateLogEntity实体类 OperateLog枚举 RecordLog注解 上下文相…