【接口自动化测试】第四节.实现项目核心业务的单接口自动化测试

文章目录

  • 前言
  • 一、登录单接口自动化测试
  •       1.1 登录单接口文档信息
  •       1.2 登录成功
  •       1.3 登录失败(用户名为空)
  • 二、数据驱动的实现
  •       2.1 json文件实现数据驱动
  • 三、课程添加单接口自动化测试
  •       3.1 课程添加单接口文档信息
  •       3.2 课程添加成功
  •       3.3 课程添加失败(未登录)
  • 四、课程查询单接口自动化测试
  •       4.1 课程查询单接口文档信息
  •       4.2 课程查询成功
  •       4.3 课程查询失败(用户未登录)
  • 五、课程修改单接口自动化测试
  •       5.1 课程修改单接口文档信息
  •       5.2 课程修改成功
  •       5.3 课程修改失败(用户未登录)
  • 六、课程删除单接口自动化测试
  •       6.1 课程删除单接口文档信息
  •       6.2 课程删除成功
  •       6.3 课程删除失败(用户名为空)
  • 七、项目配置文件
  • 八、Allure报告
  • 总结


前言


一、登录单接口自动化测试

1.1 登录单接口文档信息

需求:
  • 完成测试脚本的业务实现
  • 针对响应结果进行断言


1.2 登录成功

登录成功接口文档信息:


登录成功测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理

# 导包
from api.login import LoginAPI


# 创建测试类
class TestLoginAPI:
    # 初始化
    uuid = None

    # 前置处理
    def setup(self):
        # 实例化接口类
        self.login_api = LoginAPI()
        # 获取验证码
        response = self.login_api.get_verify_code()
        print(response.json())
        # 提取验证码接口返回的uuid参数值
        TestLoginAPI.uuid = response.json().get("uuid")
        print(TestLoginAPI.uuid)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:创建登录成功方法,并实现获取验证码和登录操作

# 登录成功
    def test01_success(self):
        login_data = {
            "username": "manager",
            "password": "123456",
            "code": "2",
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)

步骤3:针对响应结果进行断言

  # 断言响应状态码为200
        assert 200 == response.status_code
        # 断言响应数据包含'成功'
        assert '成功' in response.text
        # 断言响应json数据中code值
        assert 200 == response.json().get("code")

断言依据:


1.3 登录失败(用户名为空)

登录失败(用户名为空)文档信息:


登录成功测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI


# 创建测试类
class TestLoginAPI:
    # 初始化
    uuid = None

    # 前置处理
    def setup(self):
        # 实例化接口类
        self.login_api = LoginAPI()
        # 获取验证码
        response = self.login_api.get_verify_code()
        print(response.json())
        # 提取验证码接口返回的uuid参数值
        TestLoginAPI.uuid = response.json().get("uuid")
        print(TestLoginAPI.uuid)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:创建登录失败(用户名为空)方法

# 登录失败(用户名为空)
    def test02_without_username(self):
        login_data = {
            "username": "",//此处用户名设置为空
            "password": "123456",
            "code": "2",
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)

步骤3:针对响应结果进行断言

# 断言响应状态码为200
        assert 200 == response.status_code
        # 断言响应数据包含'错误'
        assert '错误' in response.text
        # 断言响应json数据中code值
        assert 500 == response.json().get("code")

断言依据:


二、数据驱动的实现

1.什么是数据驱动?
维护焦点:测试数据
数据驱动:
以测试数据驱动脚本执行,维护焦点从脚本转向测试数据的一种自动化 测试设计模式
图示说明:
维护测试数据:

2.如何实现数据驱动?

图示说明:

pytest中parametrize装饰器
(1)作用:遍历所有测试数据并运行测试方法。
(2) 语法:
@pytest.mark.parametrize ( ②保存数据参数名, ①测试数据 )
def test_method(self, ③参数名 )
pass
示例:
test_data = [( "manager", "123456" ), ("", "123456"), ("itheima", "123456")]
@pytest.mark.parametrize(" mobile, passwd ", test_data )
def test_login(self, mobile, passwd )
pass
对应上面语法。

针对登录接口实现步骤:

需求:
针对登录接口,将请求数据和断言数据组织成JSON文件,完成自动化测试。
步骤1:准备测试数据
# 测试数据①测试数据
 test_data = [
     ("manager", "123456", 200, '成功', 200),
     ("", "123456", 200, '错误', 500),
     ("jack666", "123456", 200, '错误', 500),
 ]

步骤2:所以pytest中parametrize装饰器

#登录单接口实现
@pytest.mark.parametrize(②保存数据参数名"username, password, status, message, code" ,①测试数据test_data)
    def test01_success(self, ③参数名username, password, status, message, code):
        login_data = {
            "username": username,
            "password": password,
            "code": "2",
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)
        # 断言响应状态码为200
        assert status == response.status_code
        # 断言响应数据包含'成功'
        assert message in response.text
        # 断言响应json数据中code值
        assert code == response.json().get("code")

2.1 json文件实现数据驱动

json文件实现数据驱动实现步骤:

步骤1:创建data目录下面的login.json文件用于存储json数据

[
    {
        "username": "manager",
        "password": "123456",
        "status": 200,
        "message": "成功",
        "code": 200
    },
    {
        "username": "",
        "password": "123456",
        "status": 200,
        "message": "错误",
        "code": 500
    },
    {
        "username": "jack666",
        "password": "123456",
        "status": 200,
        "message": "错误",
        "code": 500
    }
]

步骤2:导入json数据文件

# 导包
import json

# 读取json文件
def build_data(json_file):

步骤3:读取json数据文件

# 读取json文件
def build_data(json_file):
    # 1.定义空列表
    test_data = []
    # 2.打开json文件
    with open(json_file, "r") as f:
        # 3.加载json文件数据
        json_data = json.load(f)
        # 4.循环遍历测试数据
        for case_data in json_data:
            # 转换数据格式[{},{}] ==> [(),()]
            username = case_data.get("username")
            password = case_data.get("password")
            status = case_data.get("status")
            message = case_data.get("message")
            code = case_data.get("code")
            test_data.append((username, password, status, message, code))
    # 返回处理之后测试数据
    return test_data

 # 登录成功
    # @pytest.mark.parametrize("username, password, status, message, code", build_data(json_file="../data/login.json"))

三、课程添加单接口自动化测试

3.1 课程添加单接口文档信息

需求:
完成测试脚本的业务实现
针对响应结果进行断言

3.2 课程添加成功

课程添加成功成功测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI
from api.course import CourseAPI


# 创建测试类
class TestCourseAPI:
    # 初始化
    TOKEN = None

    # 前置处理
    def setup(self):
        # 初始化接口类
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        # 登录成功
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # 登录
        login_data = {
            "username": "admin",
            "password": "admin123",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        # 提取登录成功的token数据并保存
        TestCourseAPI.TOKEN = res_l.json().get("token")
        print(TestCourseAPI.TOKEN)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:创建课程添加成功方法

 # 课程添加成功
    def test01_add_success(self):
        add_data = {
            "name": "测试开发提升课01",
            "subject": "6",
            "price": 899,
            "applicablePerson": "2"
        }
        response = self.course_api.add_course(test_data=add_data, token=TestCourseAPI.TOKEN)
        print(response.json())

步骤3:针对响应结果进行断言

 # 断言响应状态码
        assert 200 == response.status_code
        # 断言返回数据中包含指定的文字
        assert "成功" in response.text
        # 断言json返回数据code值
        assert 200 == response.json().get("code")

断言依据:


3.3 课程添加失败(未登录)

 课程添加失败(未登录)测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI
from api.course import CourseAPI


# 创建测试类
class TestCourseAPI:
    # 初始化
    TOKEN = None

    # 前置处理
    def setup(self):
        # 初始化接口类
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        # 登录成功
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # 登录
        login_data = {
            "username": "admin",
            "password": "admin123",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        # 提取登录成功的token数据并保存
        TestCourseAPI.TOKEN = res_l.json().get("token")
        print(TestCourseAPI.TOKEN)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:创建课程添加失败(未登录)

# 课程添加失败(未登录)
    def test02_add_fail(self):
        add_data = {
            "name": "测试开发提升课02",
            "subject": "6",
            "price": 899,
            "applicablePerson": "2"
        }
        response = self.course_api.add_course(test_data=add_data, token="xxx")
        print(response.json())

步骤3:针对响应结果进行断言

# 断言响应状态码
        assert 200 == response.status_code
        # 断言返回数据中包含指定的文字
        assert "认证失败" in response.text
        # 断言json返回数据code值
        assert 401 == response.json().get("code")

断言依据:


四、课程查询单接口自动化测试

4.1 课程查询单接口文档信息

需求:
完成测试脚本的业务实现
针对响应结果进行断言

4.2 课程查询成功

 

 课程查询成功测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI
from api.course import CourseAPI


# 创建测试类
class TestCourseAPI:
    # 初始化
    TOKEN = None

    # 前置处理
    def setup(self):
        # 初始化接口类
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        # 登录成功
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # 登录
        login_data = {
            "username": "admin",
            "password": "admin123",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        # 提取登录成功的token数据并保存
        TestCourseAPI.TOKEN = res_l.json().get("token")
        print(TestCourseAPI.TOKEN)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:创建课程查询成功

# 查询存在的课程
    def test01_select_success(self):
        response = self.course_api.select_course(test_data="?name=测试开发提升课01", token=TestCourseAPI.TOKEN)
        print(response.json())

步骤3:针对响应结果进行断言

     # 断言响应状态码
        assert 200 == response.status_code
        # 断言msg中包含指定的文字
        assert "成功" in response.text
        # 断言json返回数据中code值
        assert 200 == response.json().get("code")

断言依据:


4.3 课程查询失败(用户未登录)

 课程查询失败(用户未登录)测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI
from api.course import CourseAPI


# 创建测试类
class TestCourseAPI:
    # 初始化
    TOKEN = None

    # 前置处理
    def setup(self):
        # 初始化接口类
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        # 登录成功
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # 登录
        login_data = {
            "username": "admin",
            "password": "admin123",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        # 提取登录成功的token数据并保存
        TestCourseAPI.TOKEN = res_l.json().get("token")
        print(TestCourseAPI.TOKEN)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:创建课程查询成功

# 查询失败(用户未登录)
    def test02_select_fail(self):
        response = self.course_api.select_course(test_data="?subject=6", token="xxx")
        print(response.json())

步骤3:针对响应结果进行断言

   # 断言响应状态码
        assert 200 == response.status_code
        # 断言msg中包含指定的文字
        assert "认证失败" in response.text
        # 断言json返回数据中code值
        assert 401 == response.json().get("code")

断言依据:


五、课程修改单接口自动化测试

5.1 课程修改单接口文档信息

需求:
完成测试脚本的业务实现
针对响应结果进行断言

5.2 课程修改成功

课程修改成功测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI
from api.course import CourseAPI


# 创建测试类
class TestCourseAPI:
    # 初始化
    TOKEN = None

    # 前置处理
    def setup(self):
        # 初始化接口类
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        # 登录成功
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # 登录
        login_data = {
            "username": "admin",
            "password": "admin123",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        # 提取登录成功的token数据并保存
        TestCourseAPI.TOKEN = res_l.json().get("token")
        print(TestCourseAPI.TOKEN)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:创建课程修改成功

 # 课程修改成功
    def test01_update_success(self):
        update_data = {
            "id": 109,
            "name": "接口测试001",
            "subject": "6",
            "price": 998,
            "applicablePerson": "2",
            "info": "课程介绍001"
        }
        response = self.course_api.update_course(test_data=update_data, token=TestCourseAPI.TOKEN)
        print(response.json())

步骤3:针对响应结果进行断言

# 断言响应状态码
        assert 200 == response.status_code
        # 断言返回消息
        assert "成功" in response.text
        # 断言code值
        assert 200 == response.json().get("code")

断言依据:


5.3 课程修改失败(用户未登录)

 课程修改失败(用户未登录)测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI
from api.course import CourseAPI


# 创建测试类
class TestCourseAPI:
    # 初始化
    TOKEN = None

    # 前置处理
    def setup(self):
        # 初始化接口类
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        # 登录成功
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # 登录
        login_data = {
            "username": "admin",
            "password": "admin123",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        # 提取登录成功的token数据并保存
        TestCourseAPI.TOKEN = res_l.json().get("token")
        print(TestCourseAPI.TOKEN)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:创建课程修改成功

# 课程修改失败(未登录)
    def test02_update_fail(self):
        update_data = {
            "id": 109,
            "name": "接口测试001",
            "subject": "6",
            "price": 998,
            "applicablePerson": "2",
            "info": "课程介绍001"
        }
        response = self.course_api.update_course(test_data=update_data, token="xxx")
        print(response.json())

步骤3:针对响应结果进行断言

# 断言响应状态码
        assert 200 == response.status_code
        # 断言返回消息
        assert "认证失败" in response.text
        # 断言code值
        assert 401 == response.json().get("code")

断言依据:


六、课程删除单接口自动化测试

6.1 课程删除单接口文档信息

需求:
完成测试脚本的业务实现
针对响应结果进行断言

6.2 课程删除成功

课程删除成功测试脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI
from api.course import CourseAPI


# 创建测试类
class TestCourseAPI:
    # 初始化
    TOKEN = None

    # 前置处理
    def setup(self):
        # 初始化接口类
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        # 登录成功
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # 登录
        login_data = {
            "username": "admin",
            "password": "admin123",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        # 提取登录成功的token数据并保存
        TestCourseAPI.TOKEN = res_l.json().get("token")
        print(TestCourseAPI.TOKEN)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:课程删除成功

  # 课程删除成功
    def test01_delete_success(self):
        response = self.course_api.delete_course(course_id=110, token=TestCourseAPI.TOKEN)
        print(response.json())

步骤3:针对响应结果进行断言

 # 断言响应状态码
        assert 200 == response.status_code
        # 断言返回消息
        assert "成功" in response.text
        # 断言code值
        assert 200 == response.json().get("code")

断言依据:


6.3 课程删除失败(用户名为空)

课程删除失败(用户名为空)脚本层编写:

实现步骤:

步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)

# 导包
from api.login import LoginAPI
from api.course import CourseAPI


# 创建测试类
class TestCourseAPI:
    # 初始化
    TOKEN = None

    # 前置处理
    def setup(self):
        # 初始化接口类
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        # 登录成功
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # 登录
        login_data = {
            "username": "admin",
            "password": "admin123",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        # 提取登录成功的token数据并保存
        TestCourseAPI.TOKEN = res_l.json().get("token")
        print(TestCourseAPI.TOKEN)

    # 后置处理
    def teardown(self):
        pass

前置处理是处理获取验证码的uuid信息,用于登录接口使用。


步骤2:课程删除失败(用户名为空)

# 课程删除失败(用户未登录)
    def test03_delete_fail(self):
        response = self.course_api.delete_course(course_id=110, token="xxx")
        print(response.json())

步骤3:针对响应结果进行断言

  # 断言响应状态码
        assert 200 == response.status_code
        # 断言返回消息
        assert "认证失败" in response.text
        # 断言code值
        assert 401 == response.json().get("code")

断言依据:


七、项目配置文件

测试环境 (kdtx-test.itheima.net) 测试通过后,我们的代 码能直接在生产环境
(kdtx.itheima.net)上 运行吗?

apiTestFramework # 项目名称
├── api # 定义封装被测系统的接口
├── script # 定义测试用例脚本
├── data # 存放测试数据文件
├── report # 存放生成的测试报告
├── common # 存放通用工具类
├── config.py # 定义项目的配置信息
└── pytest.ini # pytest配置文件

配置文件config.py的步骤:
# 导包
import os
# 定义环境域名
BASE_URL = "http://kdtx-test.itheima.net"
# 统一文件路径
BASE_PATH = os.path.dirname(__file__)
print(BASE_PATH)

八、Allure报告

(1)Allure介绍

1.介绍
• 能生成美观易读的报告
• 支持多种开发语言,如java、python等
• 能快速上手
 2.操作步骤
① 生成测试结果文件(json文件)
② 使用allure命令生成在线报告

步骤1:生成测试结果文件

安装:pip install allure-pytest
使用步骤:
1. 将pytest配置文件中的命令行参数加上如下代码
--alluredir report
2. 编写好测试脚本后,在命令行行中运行pytest
[pytest]
addopts = -s --alluredir report
testpaths = ./scripts
python_files = test*.py
python_classes = Test*
python_functions = test*
3. 程序运行结束后,会在项目的report目录中生成一些json文件

步骤2:使用allure生成在线报告

安装:
1. https://github.com/allure-framework/allure2/releases 下载 allure
2. 解压缩安装包到一个 不包含中文路径 的目录
3. 将压缩包内的 bin 目录配置到 path 系统环境变量
4. 右键我的电脑 - 属性 - 高级设置 - 环境变量 - 找到系统环境变量的path项 - 增加 allure到bin目录
5. 在命令行中输入 allure --version 命令,能显示allure版本信息,即为成功


总结

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

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

相关文章

N5 使用Gensim库训练Word2Vec模型

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊# 前言 前言 这周学习训练一个Word2Vec模型,并进行一些基本的词向量操作。 Word2Vec 模型 Word2Vec 是一种基于神经网络的词向量表示方法&#x…

Qt Q_ASSERT详解

Q_ASSERT详解 引言一、基本用法二、深入了解三、参考链接 引言 Q_ASSERT是 Qt 框架中的一个宏,用于在调试时检查某个条件是否为真。它是程序调试中的一个重要工具,有助于开发者在开发过程中及时发现并修复潜在的错误。 一、基本用法 只在使用 Qt 的 D…

API 授权最佳实践

API(应用程序编程接口)就像秘密之门,允许不同的软件程序进行通信。但并不是每个人都应该拥有每扇门的钥匙,就像不是每个软件都应该不受限制地访问每个 API 一样。 这些 API 将从银行的移动应用程序到您最喜欢的社交媒体平台的所有…

嵌入式C语言中指针与链表的关系详解

假定给你一块非常小的内存,这块内存只有8字节,这里也没有高级语言,没有操作系统,你操作的数据单位是单个字节,你该怎样读写这块内存呢? 注意这里的限定,再读一遍,没有高级语言,没有操作系统,在这样的限制之下,你必须直面内存读写的本质。 这个本质是什么呢? 本质…

Vuex的基本使用

1.安装vuex npm i vuex3 2.引入 import Vuex from vuex 3.使用 Vue.use(Vuex) 4.在src下的目录创建store,新建index.js import store from ./store 5.编写index.js import Vue from vue import Vuex from vuex Vue.use(Vuex)//用于操作组件中的动作 const actions{a…

Linux安装Node-RED并实现后台运行及开机启动

首先确保系统中已近成功安装Node.js,并保证需要的合适版本: 关于node.js的安装可以参考我的另一篇博文:《AliyunOS安装Node.js》。 然后就可以使用npm工具安装Node-RED了,很简单使用如下命令: sudo npm install -g --unsafe-per…

antd Select前端加模糊搜索

背景&#xff1a;前端的小伙伴经常在开发antd Select的时候后端不提供搜索模糊搜索接口&#xff0c;而是全量返回数据&#xff0c;这个时候就需要我们前端自己来写一个模糊搜索了。 效果 代码截图 代码 <SelectshowSearchmode"multiple"options{studioList}filte…

视频分析、目标检测的过去和未来:目标检测从入门到精通 ------ YOLOv8 到 多模态大模型处理视觉基础任务

文章大纲 计算机视觉项目的关键步骤目标检测入门视频分析项目最佳实践数据集构建数据准备:数据集标注规范与数据规模参考标注工具标注工具:目标检测yolo 极简标注工具综合标注工具:label-studio半自动标注工具:X-AnyLabeling目标检测与多模态哪些多模态模型可以做目标检测?…

构建安全稳定的应用:Spring Security 实用指南

前言 在现代 Web 应用程序中&#xff0c;安全性是至关重要的一个方面。Spring Security 作为一个功能强大且广泛使用的安全框架&#xff0c;为 Java 应用程序提供了全面的安全解决方案。本文将深入介绍 Spring Security 的基本概念、核心功能以及如何在应用程序中使用它来实现…

招聘应聘,HR如何测试候选人的领导能力?

作为企业的HR&#xff0c; 如何通过测评的方式来了解一个人的领导能力&#xff1f; 这里仅仅是说测评的方式&#xff0c;除此以外&#xff0c;还有很多方式&#xff0c;比如&#xff1a;背景调查&#xff0c;无领导小组讨论等等..... 对于一个人的领导能力测试&#xff0c;主要…

网页报错dns_probe_possible 怎么办?——错误代码有效修复

当你在浏览网页时遇到dns_probe_possible 错误&#xff0c;这通常意味着你的浏览器无法解析域名系统&#xff08;DNS&#xff09;地址。这个问题可能是由多种原因引起的&#xff0c;包括网络配置问题、DNS服务问题、或是本地设备的问题。教大家几种修复网页报错dns_probe_possi…

ctfshow-xss(web316-web330)

讲解相当细致 精致练习XSS web316 这道题估计陆陆续续弄了半天 因为xss可以说基本不会 还好最终彻彻底底明白了 首先这道题是反射性xss 也就是必须点击某一个xss链接 才能达到xss效果 这道题的意思就是 写一个祝福语生成链接发送给朋友 这个祝福语的位置就是我们实现XSS的位…

GPT-4预测股票涨跌更更更准了!东京大学新框架LLMFactor提升显著 | ACL 2024

花一秒钟就看透事物本质的人&#xff0c;和花一辈子都看不清的人&#xff0c;注定是截然不同的命运。——唐柯里昂 除了少数天纵奇才&#xff0c;大多数人都是通过知识和阅历的不断积累&#xff0c;才逐渐锻炼出观察和判断事物变化规律的能力。而如果说有一件事&#xff0c;可以…

代码便利工具

【原创】PyCharm 安装MarkDown插件&#xff0c;并修改.md文件默认打开方式_pycharm如何修改markdown-CSDN博客 1.上面是填写README的工具。

DeepFaceLive----AI换脸简单使用

非常强大的软件,官方github https://github.com/iperov/DeepFaceLive 百度云链接: 链接&#xff1a;https://pan.baidu.com/s/1VHY-wxqJXSh5lCn1c4whZg 提取码&#xff1a;nhev 1下载解压软件 下载完成后双击.exe文件进行解压.完成后双击.bat文件打开软件 2 视频使用图片换…

JAVA+SSM+VUE《病人跟踪治疗信息管理系统》

1病人功能模块 病人登录进入病人跟踪治疗信息管理系统可以查看首页、个人中心、病例采集管理、预约管理、医生管理、上传核酸检测报告管理、上传行动轨迹管理、病人治疗状况管理等内容。 病例采集管理&#xff0c;在病例采集管理页面可以查看账号、姓名、住院号、入院时间、病…

2024鲲鹏昇腾创新大赛集训营Ascend C算子学习笔记

异构计算架构&#xff08;CANN&#xff09; 对标英伟达的CUDA CuDNN的核心软件层&#xff0c;向上支持多种AI框架&#xff0c;向下服务AI处理器&#xff0c;发挥承上启下的关键作用&#xff0c;是提升昇腾AI处理器计算效率的关键平台。主要包括有各种引擎、编译器、执行器、算…

[leetcode hot 150]第三题,无重复字符的最长子串

题目&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串的长度。 可以使用"滑动窗口"的方法来解决这个问题。基本思路如下: 使用两个指针(start和end)来定义一个窗口移动end指针来扩大窗口,直到遇到重复字符如果遇到重复字符,移动s…

Spring源码九:BeanFactoryPostProcessor

上一篇Spring源码八&#xff1a;容器扩展一&#xff0c;我们看到ApplicationContext容器通过refresh方法中的prepareBeanFactory方法对BeanFactory扩展的一些功能点&#xff0c;包括对SPEL语句的支持、添加属性编辑器的注册器扩展解决Bean属性只能定义基础变量的问题、以及一些…

每周题解:最大半连通子图

题目链接 最大半连通子图 题目描述 一个有向图 G ( V , E ) G\left(V,E\right) G(V,E) 称为半连通的 (Semi-Connected)&#xff0c;如果满足&#xff1a; ∀ u , v ∈ V \forall u,v\in V ∀u,v∈V&#xff0c;满足 u → v u\to v u→v 或 v → u v\to u v→u&#xff0…