当前位置: 首页 > news >正文

unittest框架

目录

  框架:

 unittest框架:

 使用的原因:

 核心要素(组成):

TestCase测试用例:

 可能出现的错误:

 TestSuite(测试套件):

 TestRunner(测试执行):

整体步骤:

 查看执行结果:

 TestLoader测试加载:

方法级别Fixture:

类级别Fixture:

 模块级别Fixture:

 用例脚本包含:

断言常用判断方法:

 参数化:

 环境准备:

参数化使用:

测试报告:

使用绝对路径:

跳过:


框架:

  1. framework;
  2. 为了解决一类事情的功能集合.

 unittest框架:

是python自带的单元测试框架

--自带的,可以直接使用,不需要单独安装

--测试人员用来做自动化测试,作为自动化测试的执行框架,即管理和执行用例的

 使用的原因:

  1. 能够组织多个用例去执行;
  2. 提供丰富的断言方法;
  3. 能够生产测试报告.

 核心要素(组成):

  1. TestCase测试用例,这个测试用例是unittest的组成部分,作用是用来书写真正的用例代码(脚本);
  2. Testsuite测试套件,作用是用来组装(打包)TestCase(测试用例)的,即可以将多个用例脚本组装到一起;
  3. TestRunner测试执行(测试运行),作用是用例执行Testsuite(测试套件)的;
  4. Testloader测试加载,是对Testsuite(测试套件)功能的补充,作用是用来组装(打包)TeseCase(测试用例)的;
  5. Fixture测试夹具,是一种代码结构,书写前置方法(执行用例之前的方法)代码和后置方法(执行用例之后的方法)代码,即用例执行顺序 前置-->用例-->后置.

TestCase测试用例:

书写真正的用例代码(脚本)

单独一个测试用例也可以执行

  • 步骤:
    1.导包unittest;
    2.定义测试类,需要继承unittest.TestCase类,习惯性以Test开头;
    3.书写测试方法,必须以test开头;
    4.执行.
  • 注意事项:
    1.代码文件名字要满足标识符的规则;
    2.代码文件名不要使用中文.
"""学习TestCase(测试用例)的使用"""
# 1.导包unittest
import unittest# 2.定义测试类,只要继承unittest.TestCase类,就是测试类
class TestDemo(unittest.TestCase):# 3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头def test_method1(self):print('测试方法一')def test_method2(self):print('测试方法二')# 4.执行
# 4.1 在类名或者方法名后边右键执行
# 4.1.1 在类名后边,执行类中的所有测试方法
# 4.1.2 在方法名后边,只执行当前测试方法
#
# 4.2 在主程序使用unittest.main()来执行if __name__ == '__main__':unittest.main()

 可能出现的错误:

1.文件名包含中文;

2.右键运行没有unittest for......
解决方法:1.新建一个代码文件,将之前的代码复制过来;
                2.在主程序是应用unittest.main()来执行:
                if __name__ == '__main__': unittest.main()

 TestSuite(测试套件):

将多条用例脚本集合在一起,就是套件,即用来组装测试用例的

  1. 导包 unittest;
  2. 实例化套件对象 unittest.TestSuite();
  3. 添加用例方法.

 TestRunner(测试执行):

用来执行套件对象

  1. 导包 unittest;
  2. 实例化执行对象unittest.TextTestRunner();
  3. 执行对象执行 套件对象 执行对象.run(套件对象).

整体步骤:

  1. 导包 unittest;
  2. 实例化套件对象unittest.TestSuite();
  3. 添加用例方法.
    3.1 套件对象.addTest(测试类名('测试方法名'));
    或者 3.2 套件对象.addTest(unittest.makeSuite(测试类名))
    # 3.2 套件对象.addTest(unittest.makeSuite(测试类名));
    suite.addTest(unittest.makeSuite(TestDemo1))
    suite.addTest(unittest.makeSuite(TestDemo2))
  4. 实例化执行对象 unittest.TextTestRunner();
  5. 执行对象执行 套件对象 执行对象.run(套件对象).
# 导包 unittest;
import unittestfrom Python.unittest.Testcast1 import TestDemo1
from Python.unittest.Testcast2 import TestDemo2# 实例化套件对象unittest.TestSuite();
suite = unittest.TestSuite()
# 添加用例方法.
# 3.1 套件对象.addTest(测试类名('测试方法名'));
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
suite.addTest(TestDemo2('test_method1'))
suite.addTest(TestDemo2('test_method2'))# 实例化执行对象 unittest.TextTestRunner();
run = unittest.TextTestRunner()
# 执行对象执行 套件对象 执行对象.run(套件对象).
run.run(suite)

 查看执行结果:

 TestLoader测试加载:

和TestSuite作用一样,组装用例代码,同样也需要使用TextTestRunner()去执行

  1. 导包unittest;
  2. 实例化加载对象并加载用例--->得到的是套件对象;
  3. 实例化执行对象并执行.
# 导包unittest;
import unittest# 实例化加载对象并加载用例--->得到的是套件对象;
# suite = unittest.TestLoader().discover('用例所在的目录','用例代码文件名*.py')
suite = unittest.TestLoader().discover('.', '*case*.py')
# 实例化执行对象并执行
# runner = unittest.TextTestRunner
# runner.run(suite)
unittest.TextTestRunner().run(suite)

方法级别Fixture:

        在每个用例执行前后都会自动调用,方法名是固定的.

def setUp(self):    #前置#每个用例执行之前都会自动调用passdef tearDown(self):    #后置#每个用例执行之后都会自动调用pass#方法前置 用例 方法后置
#方法前置 用例 方法后置

类级别Fixture:

        在类中所有的测试方法执行前后,会自动执行的代码,只执行一次

#类级别的FIxture需要写作类方法
@classmethod
def setUpClass(cls):    #类前置pass@classmethod
def tearDowmClass(cls):    #后置pass#类前置 方法前置 用例 方法后置 方法前置 用例 方法后置 类后置

 模块级别Fixture:

        模块,就是代码文件,模块级别,在这个代码文件执行前后执行一次

#在类外部定义函数
def setUpModule():passdef tearDownModule():pass
import unittestclass TestLogin(unittest.TestCase):def setUp(self) -> None:print('2.打开网页,点击登录')def tearDown(self) -> None:print('4.关闭网页')@classmethoddef setUpClass(cls) -> None:print('1.打开浏览器')@classmethoddef tearDownClass(cls) -> None:print('5.关闭浏览器')def test_1(self):print('3.输入用户名密码验证码1,点击登录')def test_2(self):print('3.输入用户名密码验证码2,点击登录')def test_3(self):print('3.输入用户名密码验证码3,点击登录')

 用例脚本包含:

  1. 断言(使用代码自动判断的预期结果和实际结果是否相符);
  2. 参数化(将测试数据定义到json文件中使用);
  3. 跳过(某些用例由于某种原因不想执行,设置为跳过);
  4. 生成测试报告(suite和runner(第三方)).

断言常用判断方法:

  1. assertEqual(预期结果,实际结果)
    ---判断预期结果和实际结果是否相等,如果相等,用例通过,如果不相等,抛出异常,用例不通过
  2. assertIn(预期结果,实际结果)
    ---判断预期结果是否包含在实际结果中,如果存在,用例通过,如果不存在,抛出异常,用例不通过.
import unittestclass TestAssert(unittest.TestCase):def test_equal_1(self):self.assertEqual(10, 10)  # 用例通过def test_equal_2(self):self.assertEqual(10, 12)  # 用例不通过def test_in_1(self):self.assertIn('123', '123123')  # 用例通过def tese_in_2(self):self.assertIn('123', '1243')  # 用例不通过

 参数化:

---通过参数的方式来传递数据,从而实现数据和脚本分离,并且可以实现用例的重复执行.(在书写用例方法的时候,测试数据使用变量代替,在执行的时候进行数据传递)

--unittest测试框架,本身不支持参数化,但是可以通过安装unittest扩展差价parameterized来实现.

 环境准备:

因为参数化的插件不是unittest自带的,所以想要使用,需要进行安装;

python中包(插件,模块)的安装,使用pip工具

pip install parameterized   #在终端(cmd)中执行.

参数化使用:

  1. 导包   from parameterized import parameterized;
  2. 修改测试方法,将测试方法中的测试数据使用变量显示;
  3. 组织测试数据,格式[(),(),()],一个元组就是一组测试数据;
  4. 参数化:在测试方法上方使用装饰器@parameterized.expand(测试数据);
  5. 运行(直接TestCase或者使用suite运行).
import unittestfrom Python.unittest.tools import add
from parameterized import parameterizeddata = [(1, 1, 2), (1, 2, 3), (2, 3, 5), (4, 5, 9)]class Addtest(unittest.TestCase):@parameterized.expand(data)def test_add(self, a, b, expect):print(f'a:{a},b:{b},expect:{expect}')self.assertEqual(expect, add(a, b))if __name__ == '__main__':unittest.main

测试报告:

使用第三方的报告模板,生成报告,HTMLTestReport,本质是TestRunner

--安装

pip install HTMLTestReport

--使用

  1. 导包unittest,HTMLTestReport;
  2. 组装用例(套件,loader);
  3. 使用HTMLTestReport中的runner执行套件;
  4. 查看报告
import unittestfrom Python.unittest.Testadd import Addtest
from htmltestreport import HTMLTestReport# 套件
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Addtest))# 运行对象
# runner = HTMLTestReport(报告的文件路径后缀.html,报告的标题,其他的描述信息)
runner = HTMLTestReport('test_add_report.html', '加法用例测试报告')
runner.run(suite)

 

使用绝对路径:

将来的项目是分目录书写的,使用相对路径,可能会出现找不到文件的情况,此时需要使用绝对路径.

方法:

  1. 在项目的根目录,创建一个python文件(app.py或者config.py);
  2. 在这个文件中获取项目的目录,在其他代码中使用路径拼接完成绝对路径的书写.
  3. 获取当前文件的绝对路径:abspath = os.path.abspath(__file__);
  4. 获取文件路径的目录名称:dirname = os.path.dirname(filepath).
import osBASE_DIR = os.path.dirname(__file__)if __name__ == '__main__':print(BASE_DIR)

跳过:

跳过:对于一些未完成的或者不满足测试条件的测试函数和测试类,可以跳过执行(简单来说,不想执行的测试方法,可以设置为跳过)

---直接将测试函数标记成跳过

        @unittest.skip('跳过的原因')

---根据条件判断测试函数是否跳过

        @unittest.skipif(判断条件,reason='原因')        #判断条件为True,执行跳过

import unittestversion = 30class Test_skip(unittest.TestCase):@unittest.skip('跳过测试')def test_1(self):print('测试方法一')@unittest.skipIf(version >= 30, '版本号大于30,测试方法不执行')def test_2(self):print('测试方法二')def test_3(self):print('测试方法三')

相关文章:

unittest框架

目录 框架: unittest框架: 使用的原因: 核心要素(组成): TestCase测试用例: 可能出现的错误: TestSuite(测试套件): TestRunner(测试执行): 整体步骤: 查看执行结果: TestLoader测试加载: 方法级别Fixture: 类级别Fixture: 模块级别Fixture: 用例脚本…...

Python中的__str__和__repr__:揭示字符串表示的奥秘

标题:Python中的__str__和__repr__:揭示字符串表示的奥秘 摘要 在Python中,对象的字符串表示对于调试和日志记录至关重要。__str__和__repr__是两个特殊的方法,用于定义对象的字符串表示形式。尽管它们在功能上相似,…...

gazebo插入一个图片

在下面的目录下添加文件夹 my_ground_plane 文件夹内容如下 model.sdf <?xml version"1.0" encoding"UTF-8"?> <sdf version"1.4"><model name"my_ground_plane"><static>true</static><link na…...

(已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据

Modals是Bootstrap中用户弹框用的组件,使用时不需要额外引入其他插件,在引入了boostrap.js或者boostrap.min.js前提下就可以使用。 官方的示例: <!-- Button trigger modal --> <button type="button" class="btn btn-primary" data-bs-…...

网络编程介绍(IP)(一)

定义&#xff1a;可以让设备中的程序与网络上其他设备中的程序进行数据交互&#xff08;实现网络通信的&#xff09;。 java.net.*包下提供了网络编程的解决方案。 基本的通信架构&#xff1a; CS架构&#xff08; Client客户端/Server服务端 &#xff09;&#xff1a; Clie…...

C语言 指针——函数指针

目录 什么是函数指针&#xff1f; 函数指针的定义 定义函数指针时的常见错误 函数指针有什么用&#xff1f; 函数指针的主要应用 什么是函数指针&#xff1f; 函数指针 (Function Pointer) 就是指向函数的指针变量 数据类型 ( * 指针变量名 ) ( 形参列表 ); 例如&#x…...

【C++】———list容器

前言 1.list容器简单来说其实就是之前的链表结构。 2.这里的list用的是双向带头结点的循环链表。 目录 前言 一 构造函数 1.1 list (); 1.2 list (size_type n, const value_type& val value_type() ); 1.3 list (InputIterator first, InputIterator last…...

【网络安全技术】——期末复习(冲刺篇)

&#x1f4d6; 前言&#xff1a;快考试了&#xff0c;做篇期末总结&#xff0c;都是重点与必考点。 题型&#xff1a;材料分析题、简答题、看图分析题 课本&#xff1a; 目录 &#x1f552; 1. 计算机网络安全概述&#x1f558; 1.1 安全目标&#x1f558; 1.2 常见的网络安全…...

Python中Web开发-Django框架

大家好&#xff0c;本文将带领大家进入 Django 的世界&#xff0c;探索其强大的功能和灵活的开发模式。我们将从基础概念开始&#xff0c;逐步深入&#xff0c;了解 Django 如何帮助开发人员快速构建现代化的 Web 应用&#xff0c;并探讨一些最佳实践和高级技术。无论是初学者还…...

1882java密室逃脱管理系统 Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java密室逃脱管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…...

LeetCode 两两交换链表中的节点

原题链接24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff0c;请看图片的过程模拟&#xff0c;这里添加了一个哨兵节点0&#xff0c;目的是为了方便操作&#xff0c;得到指向1节点的指针。 class Solution {public:ListNode* swapPairs(ListNod…...

STM32作业实现(五)温湿度传感器dht11

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…...

java mybatis处理大数据量,开启和配置二级缓存,及注意事项,已解决

注意事项&#xff1a; 尽量避免使用下面方式写sql否则会降低服务器性能&#xff1a; mybatis二级缓存开启后&#xff0c;避免使用事务注解&#xff08;加上事务注解后二级缓存数据会导致两次访问不一致问题&#xff09;&#xff1a; 3. 返回的对象实体类&#xff0c;要实现Se…...

在 LLM 架构中应用多专家模型

本文转载自&#xff1a;在 LLM 架构中应用多专家模型 2024年 3月 14日 By Kyle Kranen and Vinh Nguyen https://developer.nvidia.cn/zh-cn/blog/applying-mixture-of-experts-in-llm-architectures/ 文章目录 一、概述二、LLM 架构领域的专家齐聚一堂1、模型容量2、MoE 在降低…...

C语言编程代码软件:深入探索与实战应用

C语言编程代码软件&#xff1a;深入探索与实战应用 在编程的广袤领域中&#xff0c;C语言以其独特的魅力吸引着无数编程爱好者。作为一种基础且强大的编程语言&#xff0c;C语言在软件开发、系统编程、嵌入式系统等领域发挥着不可替代的作用。而要想熟练掌握C语言&#xff0c;…...

【AIGC半月报】AIGC大模型启元:2024.06(上)

AIGC大模型启元&#xff1a;2024.06&#xff08;上&#xff09; (1) ChatTTS&#xff08;语音合成项目&#xff09; (1) ChatTTS&#xff08;语音合成项目&#xff09; 2024.06.01 ChatTTS 文本转语音项目爆火出圈&#xff0c;引来大家极大的关注。短短三天时间&#xff0c;在…...

两款 IntelliJ IDEA 的 AI 编程插件

介绍两款 IntelliJ IDEA 的 AI 编程插件&#xff1a;通义灵码和 CodeGeeX。 通义灵码 这是由阿里推出的一个基于通义大模型的 AI 编码助手。 它提供了代码智能生成、研发智能问答等功能。通义灵码经过海量优秀开源代码数据训练&#xff0c;可以根据当前代码文件及跨文件的上下…...

语义化版本控制:软件工程的实用之道

语义化版本控制&#xff1a;软件工程的实用之道 在软件开发过程中&#xff0c;版本控制是确保项目稳定、有序进行的关键环节。随着项目的发展&#xff0c;功能的增加、错误的修复以及API的修改变得日益频繁。为了有效管理这些变化&#xff0c;并确保团队成员、用户以及依赖该软…...

Java设计模式总结

《武林外传》老白曾经说过这样一句话。高手就是手里无刀&#xff0c;心中也无刀。 类似于设计模式&#xff0c;你不知不觉中已经融进你的代码中了&#xff0c;但你并不知已经运用了。下面我总结几个我觉得比较常用的设计模式。 1&#xff1a;设计模式分类 总体来说设计模式分为…...

小米路由器如何设置去广告功能,如何设置小米路由器的自定义Hosts(小米路由器如何去除小米广告、去除小米电视盒子开屏广告、视频广告)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 实现方案 📒📝 操作步骤📝 注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 小米设备的广告一直是用户头疼的问题,无论是开屏广告、应用内广告还是系统广告,都影响了用户体验。本文将详细介绍如何通过小米路由器实现去除广告…...

HCIP-Datacom-ARST自选题库__EBGP【18道题】

一、单选题 1.在排除EBGP邻居关系故障时&#xff0c;你发现两台直连设备使用Loopback口建立连接&#xff0c;故执行display current-configurationconfiguration bgp查看peer ebgp-max-hop hop-count的配置&#xff0c;下列哪项说法是正确的? hop-count必须大于2 hop-count…...

TypeScript算法每日一题:两数之和(167)

作者&#xff1a;前端小王hs 阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主 题库&#xff1a;力扣 题目序号&#xff1a;167&#xff08;简单&#xff09; 题目&#xff1a; 给你一个下标从1开始的整数数组 numbers &#xff0c;该数组已按非…...

用docker搭建的Vulfocus镜像管理界面没有镜像可以拉取解决办法

ps&#xff1a;截止到今天2023.4.2&#xff0c;kali和vps的docker拉取的vulfocus镜像会有版本的区别&#xff0c;虽然都是拉取的最新版&#xff0c;vps上镜像为3个月以前&#xff0c;kali上为16个月以前&#xff0c;所以在修改 views.py 文件时&#xff0c;可能会发现文件内容不…...

CSPM.pdf

PDF转图片 归档&#xff1a;...

多个短视频剪辑成一个视频:四川京之华锦信息技术公司

多个短视频剪辑成一个视频&#xff1a;创作中的艺术与技术 在数字时代&#xff0c;短视频以其短小精悍、内容丰富的特点&#xff0c;迅速成为社交媒体上的热门内容形式。然而&#xff0c;有时单一的短视频难以完全表达创作者的意图或满足观众的观赏需求。因此&#xff0c;将多…...

算法第三天力扣第69题:X的平方根

69. x 的平方根 (可点击下面链接或复制网址进行做题) https://leetcode.cn/problems/sqrtx/https://leetcode.cn/problems/sqrtx/ 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被…...

异常处理。

异常 是指程序运行中出现了错误。 捕获异常&#xff1a; 对bug进行提醒&#xff0c;使整个程序继续运行。 捕获所有异常&#xff1a; try:#可能出错的代码 except:如果出现异常执行的代码 可以输出异常的类型&#xff1a; try:a1bhuishprint(ab) except Exception as i:…...

MySQL—函数(介绍)—字符串函数(基础)

一、引言 提到函数&#xff0c;在SQL分类中DQL语句中有一个聚合函数&#xff0c;如COUNT()、SUM()、MAX()等等。这些都是一些常见的聚合函数&#xff0c;而聚合函数只是函数的一种&#xff0c;接下来会详细的学习和介绍一下函数的应用场景和以及 mysql 当中文件的函数有哪些。 …...

CTF本地靶场搭建——静态flag题型的创建

静态flag题型的创建 首先这里要说的是静态flag和动态flag。 在CTF&#xff08;Capture The Flag&#xff09;比赛中&#xff0c;静态flag的使用通常与特定的赛制或题目类型关联&#xff0c;而不是直接与题型绑定。静态flag意味着这些flag是预先设定好的&#xff0c;不会随比…...

基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)

上一篇&#xff1a;搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL&#xff08;四&#xff09; 下一篇&#xff1a;基于Django的博客系统之增加类别导航栏&#xff08;六&#xff09; 功能概述 添加搜索框用于搜索博客。 需求详细描述 1. 添加搜索框用于搜索博客 描…...

开源VS闭源:大模型发展路径之争,你站哪一派?

文章目录 引言一、数据隐私1.1开源大模型的数据隐私1.2 闭源大模型的数据隐私1.3 综合考量 二、商业应用2.1 开源大模型的商业应用2.2 闭源大模型的商业应用2.3 商业应用的综合考量 三、社区参与3.1 开源大模型的社区参与3.2 闭源大模型的社区参与3.3 综合考量 结论 引言 在人…...

Python | Leetcode Python题解之第115题不同的子序列

题目&#xff1a; 题解&#xff1a; class Solution:def numDistinct(self, s: str, t: str) -> int:m, n len(s), len(t)if m < n:return 0dp [[0] * (n 1) for _ in range(m 1)]for i in range(m 1):dp[i][n] 1for i in range(m - 1, -1, -1):for j in range(n …...

STM32高级控制定时器应用之检测输入PWM周期和占空比

目录 概述 1 PWM 输入模式 1.1 原理介绍 1.2 应用实例 1.3 示例时序图 2 使用STM32Cube配置工程 2.1 软件环境 2.2 配置参数 2.3 生成项目文件 3 功能实现 3.1 PWM占空比函数 3.2 输入捕捉回调函数 4 功能测试 4.1 测试软件框架结构 4.2 实验实现 4.2.1 测试实…...

[AI Google] 三种新方法利用 Gemini 提高 Google Workspace 的生产力

Workspace 侧边栏中的 Gemini 现在将使用 Gemini 1.5 Pro&#xff0c;新的 Gemini for Workspace 功能即将登陆 Gmail 移动应用&#xff0c;等等。 Gemini for Google Workspace 帮助个人和企业更好地利用 Google 应用——从在 Gmail 中撰写邮件到在 Sheets 中组织项目计划。过…...

【U-Net验证】逐元素乘积将特征投射到极高维隐式特征空间的能力

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需使用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言网络结构编码结构解码结构代码 实验实验设置w/o-ReLU的性能比较with-ReLU的性能比…...

快团团大团长帮卖如何导出单个团购的订单?免费教程教你怎么做!

一、小程序端如何导出单个团购的订单&#xff1f; 进入团购页面&#xff0c;在订单管理——订单导出中&#xff0c;点击订单数据表格&#xff0c;可导出到邮箱&#xff0c;或通过在浏览器中查看下载链接 二、电脑端如何导出单个团购的订单&#xff1f; 1、如何自定义选择订单信…...

services层和controller层

services层 我的理解&#xff0c;services层是编写逻辑代码语句最多的一个层&#xff0c;非常重要&#xff0c;在实际的项目中&#xff0c;负责调用Dao层中的mybatis&#xff0c;在我的项目中它调用的是这两个文件 举例代码如下 package com.example.sfdeliverysystem.servic…...

Pycharm编辑器下自定义模块导入报错:no module named问题

相信很多使用pycharm 社区版编写python 程序的初学者都会遇到这样一个看似简单但是一时半刻找不到解决头绪的问题&#xff1a; 在同个目录下导入自己编写的模块到主程序的过程中&#xff0c;直接import的时候会报错&#xff1a;ModuleNotFoundError。 通过各种方法尝试以后还是…...

C#使用GDI对一个矩形进行任意角度旋转

C#对一个矩形进行旋转GDI绘图&#xff0c;可以指定任意角度进行旋转 我们可以认为一张图片Image&#xff0c;本质就是一个矩形Rectangle,旋转矩形也就是旋转图片 在画图密封类 System.Drawing.Graphics中&#xff0c; 矩形旋转的两个关键方法 //设置旋转的中心点 public v…...

打印机的ip不同且连不上

打印机的ip不同且连不上 1.问题分析2.修改网段3.验证网络 1.问题分析 主要是打印机的网段和电脑不在同一个网段 2.修改网段 3.验证网络...

关于linux程序的查看、前台运行、后台运行、杀死的管理操作。

前言 在Linux中&#xff0c; 程序&#xff08;program&#xff09;是放在磁盘上的程序&#xff0c;是不会执行的。 进程&#xff08;process&#xff09;是程序被触发&#xff0c;从而加载到内存中的&#xff0c;会被CPU随机执行。 Linux中&#xff0c;有非常多的进程在实时运…...

STM32作业设计

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…...

PHPSTOM配置Laradock,xdebug,phpunit

原理图&#xff1a; 片面理解&#xff1a; phpstorm启用一个9000端口&#xff0c;这个端口用来接收到信息后&#xff0c;启用xdebug功能。服务器端(docker), 当客户端访问laravel项目域名后, 并读取xdebug.ini的配置, 把调试的请求数据, 向配置里面的端口发送消息, 配置里面的端…...

使用Java进行数据分析和处理:应用在实际业务场景中的技术

在当今数据驱动的时代&#xff0c;数据分析和处理已经成为各行各业中不可或缺的一部分。Java作为一种广泛应用于企业级开发的编程语言&#xff0c;也在数据领域展现出了强大的能力。本文将探讨如何使用Java进行数据分析和处理&#xff0c;以及在实际业务场景中应用的技术。 ##…...

C++中的List

摘要 C 标准库中的 std::list 是一种双向链表容器&#xff0c;它允许在常数时间内进行插入和删除操作&#xff0c;每个元素包含一个指向前一个和后一个元素的指针。这给我们开发提供了高效的插入和删除操作。 引入头文件 要使用 std::list&#xff0c;需要包含头文件 <li…...

go map 如何比较两个 map 相等

go map 如何比较两个 map 相等 都为 nil非空、长度相等&#xff0c;指向同一个 map 实体对象相应的 key 指向的 value 相等 直接将使用 map1 map2 是错误的。这种写法只能比较 map 是否为 nil。因此只能是遍历map 的每个元素&#xff0c;比较元素是否都是深度相等。...

牛客网刷题 | BC108 反斜线形图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…...

数据的表示和运算

目录 一.各进制间的相互转换 1.各进制转化为10进制 2.二进制和八进制&#xff0c;十六进制之间地相互转化 3.十进制转换为其他进制 二.BCD码&#xff08;Binary-Coded Decimal&#xff0c;用二进制编码的十进制&#xff09; 1.8421码 2.余3码 3.2421码 三.无符号整数 …...

【爬虫工具】油管视频批量采集软件

一、背景介绍 1.1 爬取目标 我用Python独立开发了一款爬虫软件&#xff0c;作用是&#xff1a;通过搜索关键词采集ytb的搜索结果&#xff0c;包含14个关键字段&#xff1a;关键词,页码,视频标题,视频id,视频链接,发布时间,视频时长,频道名称,频道id,频道链接,播放数,点赞数,评…...

【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名

【LeetCode刷题】Day 14 题目1&#xff1a;153.寻找旋转排序数组中的最小值思路分析&#xff1a;思路1&#xff1a;二分查找&#xff1a;以A为参照思路2&#xff1a;二分查找&#xff0c;以D为参照 题目2&#xff1a;LCR 173.点名思路分析&#xff1a;思路1&#xff1a;遍历查找…...