单元测试之自动化测试工具

发布者:beta12最新更新时间:2022-07-01 来源: csdn关键字:单元测试  自动化测试  工具 手机看文章 扫描二维码
随时随地手机看文章

一般测试流程

单元测试-》集成测试-》系统测试-》域测试


其中单元测试、集成测试、系统测试区别:


一、测试方法不同


1、单元测试属于白盒测试范畴。


2、集成测试属于灰盒测试范畴。


3、系统测试属于黑盒测试范畴。


二、考察范围不同


1、单元测试主要测试单元内部的数据结构、逻辑控制、异常处理等。


2、集成测试主要测试模块之间的接口和接口数据传递关系,以及模块组合后的整体功能。


3、系统测试主要测试整个系统相对于需求的符合度。


三、评估基准不同


1、单元测试的评估基准主要是逻辑覆盖率。


2、集成测试的评估基准主要是接口覆盖率。


3、系统测试的评估基准主要是测试用例对需求规格的覆盖率。


什么是域测试?

域测试是一种软件测试方法,它涉及提供一组输入并评估应用程序的合适输出。域测试是一种确保软件程序在一定范围内获取数据并且输出符合用户期望的技术。


域测试是一个有用的工具。使用少量输入检查系统的输出,以确保系统不接受错误数据并且不接受超出范围的输入值。它是最常见的白盒测试技术之一。它还确保系统不会接受超出设置参数的输入。


领域测试是否需要领域知识?

一个人很难在他们不熟悉的领域中有效地开展工作。因此,对我们将要工作的领域有一个基本的了解是至关重要的。这也很重要,因为如果我们没有基本的领域知识,我们就无法有效地完成任务:


域的例子

(1) 银行领域


测试人员应该对银行概念有基本的了解,例如登录、账单支付和转账。如果测试人员知识渊博,他将能够快速执行域测试。


(2) 零售领域


要成功执行域测试,测试人员必须了解各个级别的工作原理。示例:仓库管理、店内解决方案和其他零售相关服务。


(3) 医疗领域


一个了解领域知识的人可以有效地管理医疗保健系统。如果某人不具备医疗保健领域的专业知识,则存在多种风险。


何为单元测试(unit test)

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。


其实,对“单元”的定义取决于自己。如果你正在使用函数式编程,一个单元最有可能指的是一个函数。你的单元测试将使用不同的参数调用这个函数,并断言它返回了期待的结果;在面向对象语言里,下至一个方法,上至一个类都可以是一个单元(从一个单一的方法到一整个的类都可以是一个单元)。


众所周知bug越早发现,解决问题的代价就越小


在这里插入图片描述
在这里插入图片描述

单元测试怎么做

单元测试的实现方式包括:人工静态检查、动态执行跟踪

人工静态检查

就是通常所说的“代码走读”,主要是保证代码逻辑的正确性动态执行跟踪:就是把程序代码运行起来,检查实际的运行结果和预期结果是否一致


人工静态检查人工静态检查包含的主要内容:


检查算法的逻辑正确性

模块接口的正确性检查

输入参数有没有作正确性检查

调用其他方法接口的正确性

异常错误处理

保证表达式、SQL语句的正确性

检查常量或全局变量使用的正确性

程序风格的一致性、规范性

检查代码注释是否完整

动态执行跟踪

动态执行跟踪需要编写测试脚本调用业务代码进行测试,为了更好的管理维护测试脚本,一般会采用单元测试框架来管理,不同的语言有不同的单元测试框架:

Java:JUnit、TestNG

Python:UintTest、pyTest单元测试的一个重要的衡量标准就是代码覆盖率,尽量做到代码的全覆盖。常见单元测试覆盖标准:


语句覆盖

分支覆盖

条件覆盖

分支-条件覆盖

条件组合覆盖

路径覆盖

入门示例:针对开发人员编写的实现计算操作的方法进行单元测试


# 开发人员编写的业务代码

class CalUtil:

    """计算器"""


    @staticmethod

    def add(x, y):

        """加法"""

        return x + y


    @staticmethod

    def sub(x, y):

        """减法"""

        return x - y


    @staticmethod

    def mul(x, y):

        """乘法"""

        return x * y


    @staticmethod

    def div(x, y):

        """除法"""

        return x / y


# 单元测试脚本

import unittest

from test_ut.cal import CalUtil


class TestCal(unittest.TestCase):

    def test_add_01(self):

        # 测试数据

        x = 1

        y = 2

        expect = 3


        # 调用被测方法

        result = CalUtil.add(x, y)

        print(f"result={result}")


        # 断言

        self.assertEqual(expect, result)


    def test_add_02(self):

        # 测试数据

        x = 1

        y = -1

        expect = 0


        # 调用被测方法

        result = CalUtil.add(x, y)

        print(f"result={result}")


        # 断言

        self.assertEqual(expect, result)


    # ...


驱动代码,桩代码和Mock代码

驱动代码是用来调用被测函数的,而桩代码和Mock代码是用来代替被测函数调用的真实代码的。

在这里插入图片描述

驱动代码、桩代码和Mock代码三者的逻辑关系


驱动代码(Driver)指调用被测函数的代码,在单元测试过程中,驱动模块通常包括调用被测函数钱的数据准备、调用被测函数以及验证相关结果三个步骤。


代码桩(Stub)是用来代替真是代码的临时代码。比如,某个函数A的内部实现中调用了一个尚未实现的函数B,为了对函数A的逻辑进行测试,那么就需要模拟一个函数B,这个模拟的函数B的实现就是所谓的桩代码。

伪代码:


在这里插入图片描述

为了实现函数A的全路径覆盖,你需要控制不同的测试用例中函数B的返回值,那么桩函数B的伪代码就应该是:

  当执行第一个测试用例的时候,桩函数B应该返回true,而执行第二个测试用例的时候,桩函数B应该返回false。

  这样就覆盖了被测试函数A的if-else的两个分支。


在这里插入图片描述

桩代码的应用首先起到了隔离和补齐的作用,使被测代码能够独立编译、链接,并独立运行。同时,桩代码还具有控制被测函数执行路径的作用。


编写桩代码通常需要遵守以下三个原则:


桩函数要具有与原函数完全相同的原形,仅仅是内部实现不同,这样测试代码才能正确链接到桩函数;

用于实现隔离和补齐的桩函数比较简单,只需保持原函数的声明,加一个空的实现,目的是通过编译链接;

实现控制功能的桩函数是应用最广泛的,要根据测试用例的需要,输出合适的数据作为被测函数的内部输入。

Mock代码和桩代码的本质区别是:测试期待结果的验证(Assert and Expectiation)。


对于Mock代码来说,我们的关注点是Mock方法有没有被调用,以书面样的参数被调用,被调用的次数,以及多个Mock函数的先后调用顺序。所以,在使用Mock代码的测试中,对于结果的验证(也就是assert),通常出现在Mock函数中。

对于桩代码来说,我们的关注点是利用Stub来控制被测函数的执行路径,不会去关注Stub是否被调用以及怎么样被调用。所以,你在使用Stub的测试中,对于结果的验证,通常出现在驱动代码中。

自动化测试工具

断言Assert

当你对类,模块或者方法的可以接受的输入和输出有着很明确的定义和认识,当程序的输出结果和输入不匹配时,

你想让程序有一个明确的返回。比如:我明确地知道1+1=2,我现在就想知道我输入1+1会不会得到2。如果不是程序返回一个错误。这时候我们通常会使用到断言。


断言就是专门用来验证输出和期望是否一致的一个工具。在内容的实现上,它是通过比较一个实际值actual和一个期望值expected来实现的。


常见断言参见

Assert Class

假设Assume

在这里插入图片描述

NUnit

NUnit 是 JUnit 的 .NET 版,支持所有 .NET 语言,完全使用 C# 编写,并进行完全重新设计以利用很多高级的 .NET 语言特性,例如定制属性以及其他相关的反射功能。


NUnit使用

安装


适用于测试生成器的 NUnit 扩展

在这里插入图片描述

手动创建测试项目

在这里插入图片描述

自动创建测试项目

1、右键某个要测试的方法

在这里插入图片描述

需要public修饰

在这里插入图片描述

2、填写好测试框架等信息

在这里插入图片描述

关键字:单元测试  自动化测试  工具 引用地址:单元测试之自动化测试工具

上一篇:测试的概述以及测试的流程
下一篇:一些基本的测试方法

推荐阅读最新更新时间:2024-11-19 14:17

经过认证的工具链对安全关键型应用意味着什么?
安全关键型应用,在很多人看来是个专业的词汇,但其实它离我们的日常生活很近,比如汽车驾驶系统、飞机控制系统、电梯运行系统、医疗设备等与我们息息相关的事物都可以纳入安全关键型应用的范畴。 对于这类应用,通用的或者领域相关的安全标准都有着明确的认证规范,甚至开发这类应用的工具链也必须以某种方式经过认证,以确保其适用于这些安全相关的开发。本文将介绍用于安全关键型开发的工具链获得认证的意义,以及您如何在自己的安全相关项目和应用中利用这种认证支持。 嵌入式功能安全标准 安全认证的正式标准已经发布多年,但在过去的几年中,特别是在嵌入式领域,人们对这些标准的兴趣和实际使用程度正在显著增加。人们对认证和经过认证的终端产品的兴趣日益浓厚,
[嵌入式]
经过认证的<font color='red'>工具</font>链对安全关键型应用意味着什么?
新型微芯片有望更快更省生产纳米运输工具
  一个中美联合小组最近研制出一种邮票大小的新型微芯片,有望更快更省地生产纳米运输工具,用于基因递送。该项研究论文作为10 月份出版的美国化学协会纳米杂志封面文章发表,该成果为实施生物测定新方法提供了理论证据,可应用于活体有机物,对新药的开发具有关键性影响。      该项研究由美国加州大学洛杉矶分校、中国武汉纺织大学纳米科学与纳米技术中心、加利福尼亚再生医学研究中心等多家机构共同进行。   基因疗法用于治疗包括癌症在内的多种疾病前景广阔,而纳米粒子是确保安全有效地将基因送到特定细胞或组织中的理想递送工具。新研究在基因控制和治疗策略方面有别于利用病毒递送的传统方法,提供了一种替代选择。   此外,现有生产及检验纳米粒子的方
[医疗电子]
运用ADIsimCLK工具仿真ADI所有时钟类产品
simCLK是一款专门针对I的超低抖动分配和时钟产生产品系列而开发的设计。 无论是在无线基础设施、仪器仪表、网络、宽带、自动测试设备领域,还是在其它要求可预测时钟性能的应用,ADIsimCLK都能帮助您迅速开发、评估和优化设计。
[机器人]
Synopsys和Arm将在IP、EDA工具等方面深入合作
  全球第一大芯片设计自动化EDA软件供应商及全球第一大芯片接口IP供应商、软件质量和安全解决方案的全球领导者 Synopsys (NASDAQ:SNPS)宣布,已与 Arm 达成一致,将继续深入合作,并签署了一份多年订阅协议。该订阅协议让 Synopsys 得以访问更为广泛的 Arm 知识产权(IP),从而可对基于 Arm 的系统芯片(SoC)的 Synopsys 工具和方法进行优化。自2018年4月25日起,Synopsys和Arm将在全球范围内召开一系列研讨会来分享本次协议及之前签订的IP订阅协议给他们带来的设计和验证方面的合作成果。下面就随嵌入式小编一起来了解一下相关内容吧。   本次协议的签订,让Synopsys得以抢
[嵌入式]
使用gcc工具链进行Linux环境下的stm32开发
处于好奇和学习Linux的目的,准备开始在虚拟机VMware的Ubuntu9.10操作系统下搭建stm32的开发环境。整个过程包括:安装gcc工具链---- 建立工程目录--- 编写Makefile,连接文件--- 编译生成可执行文件--- 下载测试。 我的工程资源:http://download.csdn.net/detail/xiaoxiaoxingkongo/9732047 工程建立参考连接:http://blog.csdn.net/embbnux/article/details/17616809 烧录参考链接:http://blog.csdn.net/ybhuangfugui/article/details/52597
[单片机]
意法半导体新型STM32系列获ARM RealView微控制器开发工具包支持
中国上海,2007年6月27日 —— ARM公司(伦敦证交所:ARM;纳斯达克:ARMHY)宣布即日起,RealView微控制器开发工具包将支持意法半导体基于ARM Cortex-M3处理器的全新 STM32F1xx系列器件。    STM32F101 (接入行)和STM32F103 (性能行)将是意法半导体首个基于ARM Cortex-M3处理器的器件系列,兼具卓越的高性能和低功耗,待机功耗仅为2?A。该系列器件拥有高达72MHz的CPU时钟速度、128Kbyte片上闪存ROM及20Kbyte片上RAM,还包括A/D、CAN、USB、SPI、I2C等众多外设及多达80个GPIO。    RealView微控制器开发工具包3.1可
[新品]
安富利推出Virtex-6 FPGA DSP 开发工具套件
安富利公司(NYSE: AVT)旗下运营机构安富利电子元件宣布推出Xilinx® Virtex®-6 FPGA DSP开发工具套件。这套件是为DSP设计而打造,是Xilinx目标设计平台(Xilinx Targeted Design Platform) 一部分。它包括可以下载的器件定制版ISE® Design Suite: System Edition 11.4,已开始接受订购,价格为2995美元,开发人员可以通过它快速启动其设计。 无线、航空航天和国防、仪器和医疗成像设备以及其它计算密集型设备都必须具备极高的数字信号处理能力,以及支持高性能系统的强大功能。这种对性能的高要求,加上必须适应多种不断涌现和/或改变的标准
[嵌入式]
英特尔oneAPI渲染工具包,将渲染能力提升至新台阶
近日,在SIGGRAPH 2020会议上,英特尔发布了oneAPI渲染工具包的最新产品。作为英特尔oneAPI产品系列的一员,渲染工具包可为图形与渲染行业带来顶级的性能和保真度。该工具包通过一系列开源的渲染和光线追踪库,可以实现高性能、高保真度的视觉体验,对包含大型数据集、高度复杂、需内置人工智能的工作负荷进行加速。该渲染工具包的新产品包括:将于2020下半年推出的英特尔® OSPRay Studio和OSPRay for Hydra,以及oneAPI 英特尔® DevCloud的可视化功能。DevCloud现已在英特尔开发人员专区网站开放注册。 英特尔oneAPI渲染工具包拥有强大的光线追踪和渲染功能,提供了一个高性能、高保
[嵌入式]
小广播
最新测试测量文章
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved