go test单元测试

news2024/11/15 13:56:27

go test

  • Go语言中的测试依赖go test命令。

  • go test 命令是用来运行测试代码的工具。测试代码通常与要测试的代码放在同一个包中,并且测试文件通常以 _test.go 结尾。

  • go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中。

  • 测试文件通常与被测试的代码文件命名相同,但以 _test.go 结尾。例如,如果你有一个名为 math.go 的文件,其测试文件应该命名为 math_test.go

源文件: math.go
测试文件:math_test.go
  • 我们执行go test命令时,它会遍历该go包中所有以_test.go结尾的测试文件, 然后调用并执行测试文件中符合go test 规则的函数帮助我们实现自动化测试。
  • go test测试过程为生成1个临时的main包用于调用相应的测试函数,然后构建并运行测试文件中的函数、报告测试结果,最后清理测试中生成的临时文件。

测试代码结构

*_test.go文件中有三种类型的函数,单元测试函数、基准测试函数和示例函数

类型格式作用
测试函数函数名前缀为Test测试程序的一些逻辑行为是否正确
基准函数函数名前缀为Benchmark测试函数的性能
示例函数函数名前缀为Example为文档提供示例文档

单元测试

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。

  • 名称以 Test 开头。
  • 接受一个 *testing.T 参数。
  • 没有返回值。
func TestAdd(t *testing.T) {
    // 测试逻辑
}

其中参数t用于报告测试失败和附加的日志信息。 testing.T的拥有的方法如下

在这里插入图片描述

func (c *T) Cleanup(func())           //注册一个清理函数,该函数将在测试函数结束时执行
func (c *T) Error(args ...interface{})//记录一个错误,但不立即停止测试。它相当于 Log 后跟 Fail
func (c *T) Errorf(format string, args ...interface{}) //使用格式化的字符串记录一个错误,但不立即停止测试
func (c *T) Fail()                    //标记当前测试为失败,但不会停止测试函数的执行
func (c *T) FailNow()                 //立即标记当前测试为失败,并停止测试函数的执行
func (c *T) Failed() bool             //返回一个布尔值,指示当前测试是否失败
func (c *T) Fatal(args ...interface{})//记录一个错误,并立即停止测试函数的执行
func (c *T) Fatalf(format string, args ...interface{}) //使用格式化的字符串记录一个错误,并立即停止测试函数的执行
func (c *T) Helper()                  //标记当前函数为测试辅助函数。如果测试失败,堆栈跟踪将从辅助函数开始,而不是从测试函数开始
func (c *T) Log(args ...interface{})  //记录一条日志信息,通常用于调试
func (c *T) Logf(format string, args ...interface{})   //使用格式化的字符串记录一条日志信息
func (c *T) Name() string             //返回当前测试或基准测试的名称
func (c *T) Skip(args ...interface{}) //跳过当前测试,并记录跳过的原因
func (c *T) SkipNow()                 //立即跳过当前测试,并停止测试函数的执行
func (c *T) Skipf(format string, args ...interface{})   //使用格式化的字符串跳过当前测试,并记录跳过的原因
func (c *T) Skipped() bool            //返回一个布尔值,指示当前测试是否被跳过
func (c *T) TempDir() string          //返回一个临时目录的路径,该目录在测试期间存在,并在测试结束时被删除。

基准测试

测试程序执行时间复杂度、空间复杂度

  • 名称以 Benchmark 开头。
  • 接受一个 *testing.B 参数。
  • 没有返回值。
func BenchmarkAdd(b *testing.B) {
    // 基准测试逻辑
}

示例测试

为调用该功能代码的人提供演示

  • 名称以 Example 开头。
  • 没有参数和返回值。
  • 通常包含一个 Output: 注释,表示期望的输出。
func ExampleAdd() {
    // 示例代码
    // Output: 期望的输出
}

测试执行

  • -v:详细输出。
  • -run:运行匹配特定模式的测试函数。
  • -cover:输出测试覆盖率。
  • -bench:运行基准测试。
  • -count:运行测试和基准测试的次数。
# 匹配当前目录下*_test.go命令的文件,执行每一个测试函数
go test -v

# 执行 calc_test.go 文件中的所有测试函数,结尾需要标注原函数
go test -v calc_test.go calc.go

# 指定特定的测试函数(其中:-count=1用于跳过缓存)
go test -v -run TestAdd calc_test.go calc.go -count=1

# 执行基准测试
go test -benchmem -bench 

testing.T

func (c *T) Cleanup(f func())

参数

  • f func(): 一个无参数无返回值的函数,它将在测试函数结束时执行

功能

  • 注册一个清理函数 f,该函数将在当前测试函数结束时自动调用
  • 如果测试函数因为 FailNow()SkipNow() 或 panic 而提前退出,清理函数仍然会被调用

示例

package mypackage
import (
    "io/ioutil"
    "os"
    "testing"
)
func TestCreateAndCleanupFile(t *testing.T) {
    // 创建一个临时文件
    tempFile, err := ioutil.TempFile("", "example")
    if err != nil {
        t.Fatalf("Failed to create temp file: %v", err)
    }
    // 注册清理函数,确保在测试结束后删除临时文件
    t.Cleanup(func() {
        tempFile.Close()
        os.Remove(tempFile.Name())
    })
    // 使用临时文件进行测试
    // ...
}
  • 无论测试成功还是失败,Cleanup(func()) 确保了 tempFile.Close()os.Remove(tempFile.Name()) 会被调用,从而清理了创建的临时文件

注意事项

  • 测试函数执行完毕,没有调用FailNow()SkipNow()或遇到panic,那么注册的清理函数将在测试函数返回之后按注册的逆序执行
  • 测试函数调用了FailNow()或遇到了panic,导致测试提前终止,那么注册的清理函数仍然会在测试终止之前按注册的逆序执行
  • 测试函数调用了SkipNow()Skipf()并被跳过,清理函数同样会在跳过操作之后按注册的逆序执行

func (c *T) Error(args …interface{})

参数

  • args ...interface{}: 可以是任意类型的参数,通常是一个格式化的字符串,用于描述测试失败的原因。

功能

  • 记录错误信息。
  • 标记测试为失败。
  • 继续执行测试函数。

示例

package main

import (
    "testing"
)

// 计算两个整数的和
func add(a, b int) int {
    // 返回两数之和
    return a + b
}


// 测试add函数的正确性
func TestAdd(t *testing.T) {
    // 检查正数相加的情况
    if add(1, 2) != 3 {
        t.Error("两个正数相加的测试失败")
    }

    // 检查负数相加的情况
    if add(-1, -2) != -3 {
        t.Error("两个负数相加的测试失败")
    }
}
  • 如果 Add 函数返回的值与预期不符,t.Error 将被调用以报告错误。测试将继续执行到结束,然后测试框架会报告所有由 Error 方法记录的失败

func (c *****T) Errorf(format string, args **…**interface{})

参数

  • format string: 一个格式化字符串,用于指定错误消息的格式
  • args ...interface{}: 可变数量的参数,它们将被格式化并添加到错误消息中

功能

  • 使用格式化字符串记录错误信息
  • 标记测试为失败
  • 继续执行测试函数

示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Errorf("Add(1, 2) = %d; want 3", sum)
    }
}
func Add(a, b int) int {
    return a + b
}
  • 如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.Errorf 方法记录一个格式化的错误消息,并标记测试为失败。测试函数会继续执行,直到 FailNow() 被调用或测试函数的自然结束
  • 使用 Errorf(format string, args ...interface{}) 方法,可以更清晰地报告错误信息,使得测试失败的原因更加直观

func (c *****T) Fail()

功能

  • 标记测试为失败。
  • 继续执行测试函数。

示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
}
func Add(a, b int) int {
    return a + b
}
  • 如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.Fail() 方法标记测试为失败。测试函数会继续执行,直到 FailNow() 被调用或测试函数的自然结束

  • 使用 Fail() 方法,可以在测试失败时提供一个简单的标记,而无需记录详细的错误信息。如果需要记录详细的错误信息,可以使用 Errorf(format string, args ...interface{})Error(args ...interface{}) 方法

  • 在 Go 语言的 testing 包中,FailNow() 方法是一个用于立即标记测试失败并停止执行的方法。当测试代码发现一个严重错误时,可以通过调用 FailNow() 来记录错误,并立即停止测试的执行

func (c *T) FailNow()

语法

func (c *T) FailNow()

功能

  • 标记测试为失败。
  • 立即停止测试函数的执行。

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.FailNow()
    }
}
func Add(a, b int) int {
    return a + b
}
  • 在这个例子中,如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.FailNow() 方法标记测试为失败,并立即停止测试的执行。这意味着测试函数中的任何后续代码都不会被执行
  • 使用 FailNow() 方法,可以在遇到严重问题时立即停止测试,避免执行可能会产生更多问题的代码。这种方法通常用于处理测试代码中无法继续执行的情况,例如当依赖的服务不可用或关键资源未正确设置时

func (c *T) Failed() bool

返回值

  • 一个布尔值,如果测试失败,返回 true;否则返回 false

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
    // 检查测试是否失败
    if t.Failed() {
        // 处理测试失败的逻辑
    }
}
func Add(a, b int) int {
    return a + b
}
  • 如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.Fail() 方法标记测试为失败。之后,测试函数会调用 t.Failed() 来检查测试是否失败,并根据结果执行相应的逻辑。

  • 使用 Failed() 方法,可以在测试代码中检查测试是否已经失败,并根据测试状态执行不同的逻辑。这有助于在测试失败后进行额外的检查或清理操作。

  • 在 Go 语言的 testing 包中,Fatal(args ...interface{}) 方法是一个用于报告测试失败并立即停止执行的方法。当测试代码遇到一个无法恢复的错误时,可以通过调用 Fatal(args ...interface{}) 来记录错误信息,并立即停止测试的执行

func (c *T) Fatal(args …interface{})

参数

  • args ...interface{}: 可以是任意类型的参数,通常是一个格式化的字符串,用于描述测试失败的原因。

功能

  • 记录错误信息。
  • 标记测试为失败。
  • 立即停止测试函数的执行。

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fatal("Add(1, 2) failed")
    }
}
func Add(a, b int) int {
    return a + b
}
  • 在这个例子中,如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.Fatal 方法记录一个错误消息,并立即停止测试的执行
  • 使用 Fatal(args ...interface{}) 方法,可以在遇到无法继续测试的情况时立即停止测试,避免执行可能会产生更多问题的代码。这种方法通常用于处理测试代码中无法恢复的严重错误,例如当关键的依赖服务不可用时

func (c *****T) Fatalf(format string, args **…**interface{})

参数

  • format string: 一个格式化字符串,用于指定错误消息的格式
  • args ...interface{}: 可变数量的参数,它们将被格式化并添加到错误消息中

功能

  • 使用格式化字符串记录错误信息
  • 标记测试为失败
  • 立即停止测试函数的执行

示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fatalf("Add(1, 2) failed with unexpected result: %d", sum)
    }
}
func Add(a, b int) int {
    return a + b
}
  • 如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.Fatalf 方法记录一个格式化的错误消息,并立即停止测试的执行。测试函数中的任何后续代码都不会被执行
  • 使用 Fatalf(format string, args ...interface{}) 方法,可以更清晰地报告错误信息,使得测试失败的原因更加直观。当遇到无法继续测试的情况时,Fatalf 是一个非常有用的工具

func (c *****T) Helper()

功能

  • 标记当前函数为测试辅助函数。
  • 如果测试失败,堆栈跟踪将从辅助函数开始。

示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
    // 标记当前函数为辅助函数
    t.Helper()
    // 辅助函数代码
}
func Add(a, b int) int {
    return a + b
}
  • TestAdd 测试函数调用了 t.Helper(),这意味着如果测试失败,堆栈跟踪将从辅助函数开始,而不是从测试函数开始。这有助于开发者更清晰地理解失败的位置,尤其是在使用嵌套的测试函数时。
  • 使用 Helper() 方法,可以在测试函数中定义辅助函数,这些辅助函数可以包含在测试失败时需要执行的代码,如清理操作。通过标记辅助函数,可以避免在测试失败时产生冗长的堆栈跟踪,从而使调试更加容易。

func (c *T) Log(args …interface{})

参数

  • args ...interface{}: 可以是任意类型的参数,通常是一个格式化的字符串,用于描述日志信息。

功能

  • 记录日志信息。
  • 不会停止测试的执行。

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
    // 记录一些日志信息
    t.Log("Add(1, 2) returned", sum)
}
func Add(a, b int) int {
    return a + b
}
  • 如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.Fail() 方法标记测试为失败。之后,测试函数会调用 t.Log 方法来记录一些日志信息,这些信息会被输出到测试运行器的标准输出中。
  • 使用 Log(args ...interface{}) 方法,可以在测试过程中记录调试信息或操作步骤,这些信息有助于开发者理解和调试测试代码。

func (c *****T) Logf(format string, args **…**interface{})

参数

  • format string: 一个格式化字符串,用于指定日志消息的格式。
  • args ...interface{}: 可变数量的参数,它们将被格式化并添加到日志消息中。

功能

  • 使用格式化字符串记录日志信息。
  • 不会停止测试的执行。

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
    // 记录一些格式化的日志信息
    t.Logf("Add(1, 2) returned: %d", sum)
}
func Add(a, b int) int {
    return a + b
}
  • 如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.Fail() 方法标记测试为失败。之后,测试函数会调用 t.Logf 方法来记录一些格式化的日志信息,这些信息会被输出到测试运行器的标准输出中。
  • 使用 Logf(format string, args ...interface{}) 方法,可以更清晰地记录调试信息或操作步骤,使得日志信息更加易读和易于理解。这有助于开发者理解和调试测试代码。

func (c *T) Name() string

返回值

  • 一个字符串,表示当前测试或基准测试的名称。

示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
}
func Add(a, b int) int {
    return a + b
}
  • TestAdd 测试函数会调用 t.Name() 来获取当前测试的名称。这个名称是在测试函数执行之前由测试运行器指定的,通常与测试文件的名称和测试函数的名称相关联。
  • 使用 Name() 方法,可以在测试代码中根据测试的名称执行特定的逻辑,例如,根据测试的名称选择性地运行某些测试。这有助于在测试框架中实现更复杂的测试逻辑。

func (c *****T) Skip(args **…**interface{})

在 Go 语言的 testing 包中,Skip(args ...interface{}) 方法是一个用于跳过当前测试的方法。当测试代码遇到一个条件,使得当前测试不应该被执行时,可以通过调用 Skip(args ...interface{}) 来跳过当前测试。

语法

func (c *T) Skip(args ...interface{})

参数

  • args ...interface{}: 可以是任意类型的参数,通常是一个格式化的字符串,用于描述跳过测试的原因。

功能

  • 跳过当前测试。
  • 记录跳过测试的原因。

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    // 如果条件不满足,跳过测试
    if condition {
        t.Skip("Skipping test because condition is not met")
    }
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
}
func Add(a, b int) int {
    return a + b
}

在这个例子中,如果 conditiontrueTestAdd 测试函数会使用 t.Skip 方法跳过当前测试,并记录跳过测试的原因。这意味着测试函数中的任何后续代码都不会被执行。
使用 Skip(args ...interface{}) 方法,可以在测试代码中根据特定条件跳过测试,例如,当依赖的服务不可用或关键资源未正确设置时。这有助于确保测试的可重复性和可靠性。

func (c *****T) SkipNow()

在 Go 语言的 testing 包中,SkipNow() 方法是一个用于立即跳过当前测试并停止执行的方法。当测试代码遇到一个条件,使得当前测试不应该被执行时,可以通过调用 SkipNow() 来立即跳过当前测试。

语法

func (c *T) SkipNow()

功能

  • 立即跳过当前测试。
  • 停止测试函数的执行。

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    // 如果条件不满足,立即跳过测试
    if condition {
        t.SkipNow()
    }
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
}
func Add(a, b int) int {
    return a + b
}

在这个例子中,如果 conditiontrueTestAdd 测试函数会使用 t.SkipNow 方法立即跳过当前测试,并停止测试的执行。这意味着测试函数中的任何后续代码都不会被执行。
使用 SkipNow() 方法,可以在测试代码中根据特定条件立即停止测试,避免执行可能会产生更多问题的代码。这种方法通常用于处理测试代码中无法继续执行的情况,例如当关键的依赖服务不可用时。

func (c *****T) Skipf(format string, args **…**interface{})

在 Go 语言的 testing 包中,Skipf(format string, args ...interface{}) 方法是一个用于记录跳过测试原因并立即停止执行的方法。当测试代码遇到一个条件,使得当前测试不应该被执行时,可以通过调用 Skipf(format string, args ...interface{}) 来记录跳过测试的原因,并立即停止测试的执行。

语法

func (c *T) Skipf(format string, args ...interface{})

参数

  • format string: 一个格式化字符串,用于指定跳过测试原因的格式。
  • args ...interface{}: 可变数量的参数,它们将被格式化并添加到跳过测试原因中。

功能

  • 使用格式化字符串记录跳过测试的原因。
  • 立即停止测试函数的执行。

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    // 如果条件不满足,记录跳过测试的原因并立即停止执行
    if condition {
        t.Skipf("Skipping test because condition is not met: %s", reason)
    }
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
}
func Add(a, b int) int {
    return a + b
}

在这个例子中,如果 conditiontrueTestAdd 测试函数会使用 t.Skipf 方法记录一个格式化的跳过测试原因,并立即停止测试的执行。这意味着测试函数中的任何后续代码都不会被执行。
使用 Skipf(format string, args ...interface{}) 方法,可以更清晰地记录跳过测试的原因,使得测试跳过的情况更加直观。当遇到无法继续测试的情况时,Skipf 是一个非常有用的工具。

func (c *****T) Skipped() bool

在 Go 语言的 testing 包中,Skipped() bool 方法是一个用于检查当前测试是否被跳过的辅助函数。通过调用 Skipped(),可以检查测试是否在运行过程中被标记为跳过。

语法

func (c *T) Skipped() bool

返回值

  • 一个布尔值,如果测试被跳过,返回 true;否则返回 false

使用示例

package mypackage
import (
    "testing"
)
func TestAdd(t *testing.T) {
    sum := Add(1, 2)
    if sum != 3 {
        t.Fail()
    }
    // 检查测试是否被跳过
    if t.Skipped() {
        // 处理测试被跳过的逻辑
    }
}
func Add(a, b int) int {
    return a + b
}

在这个例子中,如果 Add 函数的实现不正确,TestAdd 测试函数会使用 t.Fail() 方法标记测试为失败。之后,测试函数会调用 t.Skipped() 来检查测试是否被跳过,并根据结果执行相应的逻辑。
使用 Skipped() 方法,可以在测试代码中检查测试是否已经被跳过,并根据测试状态执行不同的逻辑。这有助于在测试被跳过时进行额外的检查或清理操作。

func (c *T) TempDir() string

返回值

  • 一个字符串,表示当前测试的临时目录路径。

使用示例

package mypackage
import (
    "os"
    "testing"
)
func TestFileOperations(t *testing.T) {
    // 获取当前测试的临时目录
    tempDir := t.TempDir()
    // 在临时目录中创建一个文件
    file, err := os.Create(filepath.Join(tempDir, "temp_file.txt"))
    if err != nil {
        t.Fatal(err)
    }
    defer file.Close()
    // 在临时目录中执行其他操作
    // ...
}

在这个例子中,TestFileOperations 测试函数会调用 t.TempDir() 方法来获取一个唯一的临时目录路径。之后,测试函数会在这个临时目录中创建一个文件,并在执行其他操作时使用这个临时目录。
使用 TempDir() 方法,可以在测试中安全地创建临时文件和目录,这些文件和目录在测试结束后会被自动删除,从而避免了清理工作。这有助于简化测试代码,并确保测试的可重复性。

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

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

相关文章

中国星坤拨码开关系列:为电子设备控制的提供可靠连接

在电子设备日益复杂的今天,控制和设置的简便性成为了用户体验的关键。中国星坤推出的拨码开关以其直观的操作界面和高可靠性,正在引领电子设备控制的新纪元。本文将深入探讨星坤拨码开关的主要特性、应用场景及其在现代电子设备中的重要性。 直观的人机界…

连接器表面缺陷检测方案

连接器是一种用于连接电子设备或电路中不同部件之间的组件,通常用于传输电力、信号或数据。连接器的设计和类型各不相同,以适应不同设备和应用的需求。连接器用于连接电子设备之间的电线、电缆或电路板,实现信号传输和电力供应。连接器设计应…

教育杂志教育杂志社教育编辑部2024年第18期目录

卷首语 “浙”里启程,一路“黔”行 张国军; 1 特别关注 普通高中高质量发展的九大要素——以江苏省通州湾中学为例 徐新民; 4-9 专题策划 “四史”教育融入初中历史教育教学活动探索 陈清波; 10-12 新时代加强师德师风建设的实践与认识 吴东林; 13-…

免费获取Windows7专业版ISO镜像!附上详细安装教程

Windows7专业版系统相比家庭版功能更加完善和强大,支持加强的网络功能、高级备份功能、位置感知打印、加密文件系统等多项安全功能,还有Windows XP模式、脱机文件夹和移动中心等便捷功能,特别适合技术爱好者和中小企业用户安装使用。以下系统…

python之贪吃蛇

废话不多说,直接上代码(确保已经安装 pygame) import pygame import random# 基础设置 # 屏幕高度 SCREEN_HEIGHT 480 # 屏幕宽度 SCREEN_WIDTH 600 # 小方格大小 GRID_SIZE 20# 颜色设置 WHITE (255, 255, 255) BLACK (0, 0, 0) GREEN…

关于 Postman 这些你都知道吗?

Postman是接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各种http请求,将请求的数据发送到服务端,获取对应的结果,从而测试接口是否能够满足业务功能要求,很直…

# mongodb副本集,执行 rs.addArb(“172.18.30.110:27019“) 添加仲裁节点,客户端卡住,半天没有反应,解决方法

mongodb副本集,执行 rs.addArb(“172.18.30.110:27019”) 或者rs.add(“172.18.30.110:27019”, true) 添加仲裁节点,客户端卡住,半天没有反应,解决方法 1、可以退出主节点后,重新登录, # Ctrl C 或者&a…

高效学术翻译:2024五大工具助你攻克语言难题!

在学术研究领域,阅读和翻译外文文献是每位学者必备的基本功。然而,语言障碍往往成为制约学术发展的瓶颈。为了帮助广大研究人员提高学术翻译效率,本文将为您推荐五款实用的学术翻译工具 Foxit在线翻译:随时随地,轻松翻…

就业!——AI 带来的新职业

在人工智能时代,人工智能不仅改变了我们的生活方式,也为人类带来了许多全新的就业机会。这些新机会主要体现在以下几个方面。 1、人工智能相关技术研发与应用 算法工程师专注于设计、构建及优化多样化的算法体系,旨在赋能并强化人工智能系统…

STM32的内存映射机制详解

目录 前言 一、基本概念 二、内存映射的组成 三、典型布局 四、常用映射 前言 刚开始学习STM32的同学可能只知道按案例配置RAM、Flash的起始地址和容量,但是这个地址是怎么来的,可能并不清楚,接下来让我来给大家介绍一下STM32的内存映射…

【MySQL】表的CRUD{insert 替换 查询 运算符 语句执行顺序 排序 limit 分页 truncate截断表 去重 mysql日志 聚合函数}

文章目录 1.重要点insert -- on duplicate key update替换查询运算符语句执行顺序排序limit 分页truncate截断表去重 2.mysql日志简介3.聚合函数group by CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 1.重要点…

塔子哥的环游之旅-腾讯2023笔试(codefun2000)

题目链接 塔子哥的环游之旅-腾讯2023笔试(codefun2000) 题目内容 塔子哥是一位热衷旅游的程序员。他所在的国家共有 n 个城市,编号从 1 到 n。这些城市之间有 m 条双向的交通线路,分别为飞机线路和火车线路。塔子哥起始位于编号为 1 的城市,他计划前往编号为 n 的城市进行旅游…

基于VScode和C++ 实现Protobuf数据格式的通信

目录 1. Protobuf 概述1.1 定义1.2Protobuf的优势 2. Protobuf 语法3、序列号和反序列化3.1 .pb.h 头文件3.2 序列化3.3 反序列化 4、测试用例 Protobuf详细讲解链接 1. Protobuf 概述 1.1 定义 protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立…

大模型算法面试题(十八)

本系列收纳各种大模型面试题及答案。 1、P-tuning v2 思路、优缺点是什么 P-tuning v2是清华大学自然语言处理实验室(THUDM)等研究机构提出的一种新的预训练模型优化方法,主要关注如何通过动态构建任务相关的提示序列来引导预训练模型进行更…

点可云ERP进销存V8版本—购货入库单的操作使用及各单据状态说明

本章我们讲解购货入库单的操作使用,包括导入导出功能、资金结算、生成其他关联单据、以及各单据状态的说明处理。 购货入库单用于收货、验收、接受采购的商品,并进行验收确保质量和数量。而购货入库单和购货订单的区别在于购货订单的审核后只会记录单据&…

【考研数学】概率论:4 种方法解答一道题,你觉得哪种方法又快又好呢?

今天要给大家分享的笔记是:《用画图的方式求解概率论题目很方便,但难点在于如何画和怎么理解》 在这篇考研笔记中,「荒原之梦考研数学」为同学们提供了 4 种不同的方法解答这一道题目,其中最特别的是第一种通过画图求解的方法。 …

rocketMq的使用和消费模式(异步消息,单项消息(使用mq处理日志),推迟任务(占座买票),批量消息)

rocketMq开始使用 rocketmq是怎么使用的消费模式异步消息单项消息:使用mq处理日志延迟任务(占座买票)批量 rocketmq是怎么使用的 public class ASimpleTest {Testpublic void simpleProduce() throws Exception{DefaultMQProducer producer …

分享IP 地址混淆知识

由于IPv4 地址资源的枯竭促使 IPv6 技术的广泛应用,从而形成了 IPv4 和 IPv6 并存的局面。这就逐渐出现了 IP 地址混淆导致的网络问题。 IP 地址混淆的表现形式 地址分配错误 在同时支持两种协议的网络中,可能会出现将 IPv4 地址错误地分配给 IPv6 接口…