Selenium基础 —unittest单元测试框架

news2025/8/12 16:03:01

目录

(一)unittest基本简介

(二)unittest基本概念

1、unittest核心的四个概念

2、如何创建一个测试类

3、test fixture常用的四个方法

4、unittest编写测试方法(用例)规范

5、执行测试脚本

6、入门示例

7、结果说明

(三)断言方法

1、断言介绍

2、常用的断言方法

3、断言示例

(四)跳过测试

1、什么是跳过测试

2、常用的跳过测试方法和装饰器

3、跳过测试示例

4、TestCase.skipTest()方法

(五)测试套件

1、测试套件的作用

2、使用测试套件

1、学习思路和方法

2、想学习却无从下手,该如何学习?

3、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

4、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看


(一)unittest基本简介

unittest是Python自带的一个单元测试框架,unittest又被称为PyUnit,是由Java的JUnit衍生而来,基本结构是类似的。对于单元测试,需要设置预先条件,对比预期结果和实际结果。
由于unittest是Python自带的标准模块,所以不需要单独再去安装。引入包import unittest即可使用。

(二)unittest基本概念

1、unittest核心的四个概念

  1. test fixture
    fixture表示test case运行前需要做的准备工作以及结束后的清理工作。比如,创建临时/代理数据库、目录或启动一个浏览器进程。
  2. test case
    test case是单元测试中的最小个体,通常是使用assert方法(断言)检查动作和输入的响应。
    unittest提供了一个基础类TestCase,一般是基于TestCase类进行扩充,来创建test case测试用例。
  3. test suite
    test suite(套件)是test case的合集,通常用test suitetest case按需求汇总后,统一执行。(批量执行用例)
  4. test runner
    test runner是一个执行器,用来执行测试用例或者套件。并将测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。并提供图形界面、文本界面或者返回一个值展示测试结果。

2、如何创建一个测试类

所有测试用例类都要继承TestCase基本类。
# 1. 导入unittest import unittest # 2. 定义一个测试类 class Test_demo(unittest.TestCase):

3、test fixture常用的四个方法

(1)基于函数级别的方法

  • setup():每个测试方法运行前执行一次。测试类中有多少测试用例执行多少次。
  • teardown():每个测试方法运行完后执行一次。测试类中有多少测试用例执行多少次。

(2)基于类级别的方法

  • setUpClass():在测试类执行前执行一次,需要@classmethod装饰器修饰。
  • tearDownClass():在测试类执行完后执行一次,需要@classmethod装饰器修饰。

4、unittest编写测试方法(用例)规范

  1. py文件需要以test开头。(规范,不必须)
  2. 测试类名称需要Test开头。(规范,不必须)
  3. 每个测试方法名称均以test开头,否则是不被unittest识别的。(规范,必须)
  4. 在unittest框架中,测试用例就是TestCase的实例,所以每个测试类必须继承unittestTestCase类来编写用例。
  5. 测试方法必须带self参数,用来单独运行或则组合运行用例。
  6. 测试用例的执行顺序是按照测试方法名的ASCII编码字符集的顺序进行排序的。

5、执行测试脚本

unittest.main():将一个单元测试模块变为可直接运行的测试脚本,main()方法是使用TestLoader类来搜索所有包含在该模块中以test命名开头的测试方法,并自动执行他们。
执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z

6、入门示例

 """
1.学习目标
    掌握unittest框架下测试用例编写方法
2.操作步骤
    2.1 导入unittest
    2.2 创建测试类
        测试类名称需要Test开头
        继承unittest中的TestCase基本类
        class Test_demo(unittest.TestCase):
    2.3 编写test fixture
        setUp()--前置函数
        tearDown()--后置函数
        setUpClass()--+@classmethod
        tearDownClass()+@classmethod
    2.4 编写test case
        测试方法名称均以test开头
        测试用例执行顺序:按照测试用例名称ASCII字符集编码排序。
        所以我们在执行测试类中的测试方法的时候,要注意测试方法的执行顺序。
3.需求
    编写简单的测试类
"""
# 1 导入unittest
import unittest


# 2 创建测试类
class Test_demo(unittest.TestCase):
    # 3 编写test fixture
    # setUp我们也称之为前置函数
    def setUp(self) -> None:
        print("setUp在每个测试用例执行前先执行。")
        
    # setUp我们也称之为后置函数
    def tearDown(self) -> None:
        print("tearDown在每个测试用例执行后执行。")

    @classmethod
    # cls等同于self,用于函数和类方便区分。
    def setUpClass(cls) -> None:
        print("setUpClass在测试类执行前先执行。")

    @classmethod
    def tearDownClass(cls) -> None:
        print("tearDownClass在测试类执行后执行。")

    # 4 编写test case
    # 每个测试方法均以test开头,否则是不被unittest识别的。
    def test_case_03(self):
        """测试用例3,这里是测试用例的备注"""
        # 测试方法中,将多行注释写在第一行,就是该方法的备注。
        print("执行测试用例3")

    def test_case_02(self):
        """测试用例2"""
        print("执行测试用例2")

    def test_case_01(self):
        """测试用例1"""
        print("执行测试用例1")


if __name__ == '__main__':
    # 执行当前测试类中,以test开头的所有测试用例
    unittest.main()

"""
输出结果:
setUpClass在测试类执行前先执行。
setUp在每个测试用例执行前先执行。
执行测试用例1
tearDown在每个测试用例执行后执行。
setUp在每个测试用例执行前先执行。
执行测试用例2
tearDown在每个测试用例执行后执行。
setUp在每个测试用例执行前先执行。
执行测试用例3
tearDown在每个测试用例执行后执行。
tearDownClass在测试类执行后执行。
"""

提示:test fixture的四个方法,用到哪个写哪个就好,不用全部都写。

7、结果说明

测试执行完成后,会打印如下信息

# 运行了3个测试用例,执行的时间
Ran 3 tests in 0.008s

# 执行结果
OK

执行结果有如下三种

  • OK :表示测试用例全部通过。
  • F :表示测试用例没通过,代码没有问题。
  • E :表示代码有问题。

(三)断言方法

1、断言介绍

在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的,这时会用到断言方法。
本着没有消息就是最好的消息的原则,如果断言成功不采取任何措施(不输入任何日志),否则就会触发AssertionError(断言错误)的异常。

2、常用的断言方法

断言方法名称使用参数验证
assertEqual()(常用)a,b,[msg='测试失败时打印的信息']断言a和b是否相等,相等则测试用例通过
assertNotEqual()a,b,[msg='测试失败时打印的信息']断言a和b是否相等,不相等则测试用例通过。
assertTrue()(常用)x,[msg='测试失败时打印的信息']断言x是否True,是True则测试用例通过
assertFalse()x,[msg='测试失败时打印的信息']断言x是否false,是false则测试用例通过
assertIs()a,b,[msg='测试失败时打印的信息']断言a是否是b,是则测试用例通过
assertNotIs()a,b,[msg='测试失败时打印的信息']断言a是否是b,不是则测试用例通过
assertIsNone()x,[msg='测试失败时打印的信息']断言x是否None,是None则测试用例通过
assertIsNotNone()x,[msg='测试失败时打印的信息']断言x是否None,不是None则测试用例通过。
assertIn()a,b,[msg='测试失败时打印的信息']断言a是否在b中,在b中则测试用例通过
assertNotIn()a,b,[msg='测试失败时打印的信息']断言a是否在b中,不在b中则测试用例通过
assertIsInstance()a,b,[msg='测试失败时打印的信息']断言a是否是b的一个实例,是则测试用例通过。
assertNotIsInstance()a,b,[msg='测试失败时打印的信息']断言a是否是b的一个实例,不是则测试用例通过。
提示:如果a和b断言失败,则输出msg中定义的信息,如果没有定义msg,则输出系统异常。

3、断言示例

"""
1.学习目标
    必须掌握unittest中断言使用
2.语法
    2.1 编写位置
            在测试用例中去编写,先执行测试用例,最后一行断言。
    2.2 使用的断言方法
        注意:前边a是预期,后边b是测试实际的值
        (1)assertEqual(a,b,msg)
            断言a和b是否相等,如果相等,断言成功,否则断言失败
        (2)assertTrue(x,msg)
            断言条件x是否为True,如果是,断言成功,否则断言失败
        (3)其他断言用法类似。
    2.3 判定断言结果
        断言成功,控制台没有任何提示
        断言失败,控制台AssertionError关键字会出现
3.需求
    编写一个有断言的测试类
"""
# 1 导入unittest
import unittest


# 2 创建测试类
class Test_demo(unittest.TestCase):

    # 3 编写test case
    def test_case_03(self):
        """测试用例3"""
        print("执行测试用例3")
        # 用例步骤执行完成后做断言
        # assertEqual断言a和b是否相等
        self.assertEqual(2, 1 + 1, msg="断言成功")

    """
    执行结果:
        断言成功,控制台没有任何提示
    
    下面是总测试结果的日志:
        执行测试用例3
        # 在0.005秒内进行1次测试
        Ran 1 test in 0.005s
        
        # 测试用例全部通过
        OK
    """

    def test_case_02(self):
        """测试用例2"""
        print("执行测试用例2")
        # assertEqual断言a和b是否相等
        self.assertEqual(3, 1 + 1, msg="断言失败")

        """
        执行结果:
        
            执行测试用例2

            断言失败
            3 != 2

            Expected(预期) :2
            Actual(实际)   :3
            
            下面会有报错信息(主要内容):
                AssertionError: 2 != 3 : 断言失败
                
                # 在0.008秒内进行1次测试
                Ran 1 test in 0.008s
                
                # 失败一个测试用例
                FAILED (failures=1)
                
                # 断言失败
                Assertion failed
        """

    def test_case_01(self):
        """测试用例1"""
        print("执行测试用例1")
        # 断言条件x是否为True
        self.assertTrue(1 > 2, msg="条件不成立,断言失败")

# 4 编写普通方法
if __name__ == '__main__':
    # 执行当前测试类中,以test开头的测试用例
    unittest.main()

(四)跳过测试

1、什么是跳过测试

当测试用例写完后,有些模块有改动时候,会影响到部分用例的执行,这个时候我们希望暂时跳过这些用例。或者前面某个功能运行失败了,后面的几个用例是依赖于这个功能的用例,如果第一步就失败了,后面的用例也就没必要去执行了,为了节省用例执行时间,可选择直接跳过测试。

2、常用的跳过测试方法和装饰器

当执行有想要跳过的测试,我们可以通过skipskipIfskipUnless装饰器跳过某个测试方法或者测试类。

  1. @unittest.skip(reason)
    skip(reason)装饰器,无条件跳过装饰的测试,并说明跳过测试的原因。
  2. @unittest.skipIf(reason)
    skipIf(condition,reason)装饰器,条件为真时,跳过装饰的测试,并说明跳过测试的原因。
  3. @unittest.skipUnless(reason)
    skipUnless(condition,reason)装饰器,条件为假时,跳过装饰的测试,并说明跳过测试的原因。
  4. @unittest.expectedFailure
    测试标记为失败。

3、跳过测试示例

"""
1.学习目标
    了解unittest中跳过测试方法使用
2.语法
    2.1 放置在需要跳过的测试用例之前
        @跳过测试方法
        测试用例
    2.2 分类
        @unittest.skip(跳过原因):表示无条件跳过执行
        @unittest.skipIf(判断条件,跳过原因): 当判断条件为真时,跳过测试
        @unittest.skipUnless(判断条件,跳过原因):当判断条件为假时,跳过测试
        @unittest.expectedFailure:  直接将用例标记为失败
3.需求
    编写测试类,使用跳过测试
"""
# 1 导入unittest
import unittest


# 2 创建测试类
class Test_demo(unittest.TestCase):

    # 3 编写test case
    # 第一条测试用例正常执行
    def test_case_01(self):
        """测试用例1"""
        print("执行测试用例1")

    # 添加skip,不执行测试
    @unittest.skip("无条件跳过")
    def test_case_02(self):
        """测试用例2"""
        print("执行测试用例2")

    # 添加skipif,条件为真跳过测试
    @unittest.skipIf(True, "条件为真,跳过测试")
    def test_case_03(self):
        """测试用例3"""
        print("执行测试用例3")

    # 添加skipIf,条件为假执行测试
    @unittest.skipIf(2 > 3, "条件为假,执行用例")
    def test_case_04(self):
        """测试用例4"""
        print("执行测试用例4")

    # 添加skipUnless,条件为假不执行测试
    @unittest.skipUnless(False, "条件为假,跳过测试")
    def test_case_05(self):
        """测试用例5"""
        print("执行测试用例5")

    # 添加skipUnless,条件为真执行测试
    @unittest.skipUnless(True, "条件为真,执行用例")
    def test_case_06(self):
        """测试用例6"""
        print("执行测试用例6")

    # 添加expectedFailure,直接将用例标记为失败
    @unittest.expectedFailure
    def test_case_07(self):
        """测试用例7"""
        print("执行测试用例7")

    def test_case_08(self):
        """测试用例8"""
        print("执行测试用例8")

if __name__ == '__main__':
    # 执行当前测试类中,以test开头的测试用例
    unittest.main()

执行结果:

4、TestCase.skipTest()方法

TestCase.skipTest()方法跳过某个测试方法(了解)。
示例:

# 1 导入unittest
import unittest

# 2 创建测试类
class TestDmeo(unittest.TestCase):

    # 3 编写test case
    def test_case_01(self):
        """测试用例1"""
        print("执行测试用例1")

    #  TestCase.skipTest()方法
    def test_case_02(self):
        """测试用例2"""
        # 跳过测试方法
        self.skipTest('跳过用例test_case2')
        print("执行测试用例2")

if __name__ == '__main__':
    # 执行当前测试类中,以test开头的测试用例
    unittest.main()

结果:

(五)测试套件

1、测试套件的作用

在我们实际工作,使用unittest框架会有两个问题:

  1. 我们知道测试用例的执行顺序是根据测试用例名称顺序执行的,在不改变用例名称的情况下,我们怎么来控制用例执行的顺序。
  2. 一个测试文件,我们直接执行该文件即可,但如果有多个测试文件,怎么实现多个测试文件一起执行行。

要解决上面两个问题,我们就要用到测试套件TestSuite

2、使用测试套件

(1)入门用法
用法:

  1. unittest.TestSuite():创建测试套件。
  2. addTest()addTests()方法是将测试用例添加到测试套件中。
  3. unittest.TextTextRunner():通过该类下面的run()方法来运行suite所组装的测试用例,suite测试套件为run()方法参数。

例如:将test_Demo1模块下的TestDmeo类下的test_case_01测试用例添加到测试套件中。

# 1.创建测试套件
suite = unittest.TestSuite()

# 2.向测试套件中添加测试用例
# 模块名.测试类名('测试用例名')
suite.addTest(test_Demo.TestDmeo('test_case_01'))

# 3.执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

示例:

# 1 导入unittest
import unittest

# 2 创建测试类
class TestDmeo(unittest.TestCase):

    # 3 编写test case
    def test_case_01(self):
        """测试用例1"""
        print("执行测试用例1")

    def test_case_02(self):
        """测试用例2"""
        print("执行测试用例2")

    def test_case_03(self):
        """测试用例3"""
        print("执行测试用例3")


if __name__ == '__main__':
    # 执行当前测试类中,以test开头的测试用例
    # unittest.main()

    # 1. 创建测试套件
    suite = unittest.TestSuite()
    # 2. 向测试套件中添加测试用例
    # 当前模块中的测试用例,可省略模块名(文件名)
    suite.addTest(TestDmeo('test_case_02'))
    suite.addTest(TestDmeo('test_case_03'))
    suite.addTest(TestDmeo('test_case_01'))
    # 3. 执行测试套件中的用例
    runner = unittest.TextTestRunner()
    runner.run(suite)

提示:向测试套件中添加测试用例的顺序,就是测试用例执行的顺序。(此时解决了第一个问题)

注意:
使用PyCharm执行上边代码,会按顺序执行全部测试用例,这是PyCharm问题。
使用命令行直接执行该Python文件,没有问题。

(2)根据不同的条件加载测试用例(了解)
提示:这种方式很少用,了解一下即可。都用下面(3)的方式。

unittest.TestLoader():根据不同的条件加载测试用例,其中有几个方法:

  1. unittest.TestLoader().loadTestsFromName(测试用例名)
  2. unittest.TestLoader().loadTestsFromNames(测试用例名的列表)
  3. unittest.TestLoader().loadTestsFromTestCase(测试类名)
  4. unittest.TestLoader().loadTestsFromModule(模块名)
  5. unittest.TestLoader().discover()

例如:将``test_demo2模块下的TestDmeo类下的test_case_01`测试用例添加到测试套件中。
测试用例名格式:文件名+类名+方法名,一级一级的。
示例:

# 1 导入unittest
import unittest

# 2 创建测试类
class TestDmeo(unittest.TestCase):

    # 3 编写test case
    def test_case_0001(self):
        """测试用例0001"""
        print("执行测试用例0001")

    def test_case_0002(self):
        """测试用例0002"""
        print("执行测试用例0002")

    def test_case_0003(self):
        """测试用例0003"""
        print("执行测试用例0003")


if __name__ == '__main__':
    # 1. 创建测试套件
    suite = unittest.TestSuite()

    # 2. 向测试套件中添加测试用例
    """
    # 2.1 loadTestsFromName
    # 提示:
        name参数是传入文件名,字符串格式
        格式:模块名.测试类名.测试用例名  
    """
    # suite_1 = unittest.TestLoader().loadTestsFromName('test_demo2.TestDmeo.test_case_01')

    """
    # 2.2 loadTestsFromNames
        参数是一个列表,列表中的元素格式同上
    """
    # suite_1 = unittest.TestLoader().loadTestsFromNames(
    #     ['test_demo2.TestDmeo.test_case_01','test_demo2.TestDmeo.test_case_02'])

    """
    # 2.3  loadTestsFromTestCase
        参数一个测试类名
        当前模块直接传如测试类名称即可            
    """
    suite_1 = unittest.TestLoader().loadTestsFromTestCase(TestDmeo)

    # 加入套件
    suite.addTest(suite_1)
    # 3. 执行测试套件中的用例
    runner = unittest.TextTestRunner()
    runner.run(suite)

(3)常用方式(推荐)
unittest.defaultTestLoader():通过该类下面的discover()方法可自动根据测试目录test_dir匹配查找测试用例文件,如test*.py,并将查找到的测试用例组装到测试套件中。
简单示例:
discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
测试套件示例:

  1. 创建test_case包用来存放测试用例。
  2. 以上面两个测试类做例子,把test_demo1test_demo2两个测试用例类文件放入test_case包中。
  3. 编写调用用例脚本run_case.py文件执行多个测试用例。

说明:
test_demo1test_demo2两个文件,就是上面(1)(2)的示例。
下面是run_case.py文件内容,需求是同时执行test_demo1test_demo2两个文件中的测试用例。

"""
1.学习目标
    run_case.py必须会写
2.操作步骤
    2.1 明确测试用例存放路径
    2.2 将要执行的用例添加到测试套件中
    2.3 执行测试套件中的用例
3.注意事项
    1.run_case.py文件需要放置在项目根目录下
    2.所有测试用例都写在test_caset文件夹中
    3.编写用例的py文件需要以test开头
"""
# 1.导入unittest
import unittest

# 2.获取测试用例存放路径---测试用例存放文件夹
case_path = "./test_case"

# 3.添加用例到测试套件中
"""
# 如果只添加一个文件,pattern就直接填写文件名
start_dir, 指定case目录
pattern='test*.py', 匹配文件规则,# 选择文件夹中的写test_开头的py文件
"""
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")  

# 4.执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(discover)

最后我这里给你们分享一下我所积累和真理的文档和学习资料有需要是领取就可以了

1、学习思路和方法

这个大纲涵盖了目前市面上企业百分之99的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习

2、想学习却无从下手,该如何学习?

这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。

3、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

4、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看

最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦

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

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

相关文章

目标检测论文解读复现之十七:融合注意力机制的YOLOv5口罩检测算法

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

视频格式转换器下载哪个好?分享:3种TS到MP4的转换器

对于TS视频格式大家可能接触的比较少,我们先来认识下TS视频格式。 TS是日本高清摄像头拍摄下的视频格式,常用于记录实录片段,比如讲堂、演唱会、监控等等。TS和MP4不同的地方在于TS是一种抢先非高清版视频,其画质并不如MP4&#x…

华为十年架构师实战经验总结:大规模分布式系统架构与设计实战

前言 本篇是从程序员到首席架构师十多年职业生涯的实战经验总结,系统讲解构建大规模分布式系统的核心技术与实现方法,包含开源的Fourinone系统的设计与实现过程,手把手教你掌握分布式技术。 通过学习这个系统的实现方法与相关的理论&#x…

Investment Guide|Star Investors: X METAVERSE PRO‘s Copy Trading System

With the globalization of finance, people around the world are more keenly aware of the role of finance. When financial investment has become a social trend, “how to effectively use every penny and grasp every investment opportunity in a timely manner” h…

SpringCloud - 服务调用

文章目录1. LB负载均衡(Load Balance)2. Ribbon负载均衡服务调用2.1 Ribbon负载均衡演示2.1.1 架构2.1.2 POM2.1.3 RestTemplate操作2.2 Ribbon核心组件IRule2.3 负载均衡规则替换2.4 Ribbon负载均衡算法2.4.1 原理2.4.2 手动实现负载均衡3. OpenFeign服务调用3.1 OpenFeign使用…

[Spring Boot]09 Spring Boot集成和使用Redis

目录前言Spring Boot如何集成RedisSpring Boot如何使用Redis小结前言 Redis全称Remote Dictionary Server(远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilip…

Python 基础(二):搭建 Python 开发环境

搭建 Python 开发环境一、下载 Python 安装包二、安装 Python三、Python开始菜单介绍3.1 IDLE3.2 Python 3.113.3 Python 3.11 Manuals3.4 Python 3.11 Manuals Docs四、Hello World大家好,我是水滴~~ 本篇文章主要介绍如何搭建 Python 的开发环境,主要内…

Eolink钉钉webhook使用教程(超详细)

目录 一、操作步骤 1、空间管理 2、添加服务调用 3、填写添加Webhook信息 4、获取DingDing通知URL 1、需要创建一个至少三个人的群 2、需要添加一个群机器人。 3、选择智能群助手 4、添加机器人 5、点击设置 6、选择【自定义】通过Webhook接入自定义服务 7、确认添…

多元统计分析-----例8.1:今有14名学生的身高和体重数据,做相关图以显示相关变量间的关系。

例8.1:今有14名学生的身高和体重数据,做相关图以显示相关变量间的关系。 x1c(147,171,175,159,155,152,158,154,164,168,166,159,164,177) x2c(32,57,64,1,38,35,44,41,54,57,49,47,46,63)plot(x1,x2,xlim c(145,180),ylimc(25,75))出错: …

Android进阶:6、使用okhttp下载图片

因为在网上找到的资源不只是一些字符串或是一些二进制数字,还是有的是可以肉眼看见的图片,那么我们在发送网络请求时拿到的是一张图片该如何显示在组件上面呢? 这就要使用到okhttp的请求返回结果的一个属性(byteStream&#xff0…

自动驾驶感知算法实战14——感知算法模型生产线

自动驾驶感知算法实战专栏:https://blog.csdn.net/charmve/category_12097938.html目录 一、感知算法生产流程二、算法模型部署流程二、各个阶段交付物数据选择(数据采集、数据增强)数据标注模型训练模型量化模型部署测试与验证一、感知算法生产流程 二、算法模型部署流程 二…

【JavaWeb从零到一】JSPELJSTL

✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:【JavaWeb】 🥭本文…

通过题目入门python基础1

通过题目入门python基础 简介:本文通过,python的基础题目,带领大家入门python的基础语法,以实用主义为主。 差 读取四个整数 A,B,C,D,并计算 (AB−CD) 的值。 输入格式 输入共四行,第一行包含整数 A&am…

GraphQL 实践与服务搭建

原文链接: GraphQL 实践与服务搭建 GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容…

《SystemVerilog Assertion 应用指南》学习01

文章目录0、基于断言的 验证1、SVA 介绍1.1.、什么是断言1.2、为什么使用 SystemVerilog 断言(SVA)1.3、SystemVerilog 的调度1.4、SVA 术语1.4.1、并发断言1.4.2、即时断言1.5、建立 SVA 块1.6、一个简单的序列1.7、边沿定义的序列1.8、逻辑关系的序列1…

云原生安全:4C~

4C是啥? cloudclustercontainercode 4个C是层的关系,外圈不安全,不能指望里面太安全。。。 目录 Cloud cloud Provider Security 基础架构安全 Cluster cluster的组件 cluster中的组件(应用中的) Container …

第二章:Pythonocc官方demo 案例44(几何板条)

源代码: ##Copyright 2009-2016 Jelle Feringa (jelleferingagmail.com) ## ##This file is part of pythonOCC. ## ##pythonOCC is free software: you can redistribute it and/or modify ##it under the terms of the GNU Lesser General Public License as pub…

数据库 Apache Doris 展开了为期两个月的调研测试

2022 年 3 月开始,我们对符合以上特点的数据库 Apache Doris 展开了为期两个月的调研测试。以下是 Apache Doris 1.1.2 在各个方面的满足情况。 基于上述情况,我们决定采用 Apache Doris,除了可以满足上文提到的几个特点,我们还考…

[信息系统项目管理师-2023备考]信息化与信息系统(一)

1.信息的质量特性 精确性:对事物状态描述的精准程度完整性:对事物状态描述的全面程度,完整信息应该包括所有重要事实可靠性:信息的来源、采集方法、传输过程是可以信任的,符合预期及时性:获取信息的时刻与…

(八)RabbitMQ发布确认

发布确认1、发布确认原理2、发布确认策略2.1、开启发布确认的方法2.2、单个确认发布2.3、批量确认发布2.4、异步确认发布2.5、处理异步未确认消息1、发布确认原理 书面文:生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在…