《软件测试52讲》——测试基础知识篇

1 你真的懂测试吗?从“用户登录”测试谈起

从“用户登录”测试谈起,“用户登录”功能作为测试对象

  作为测试工程师,你的目标是要保证系统在各种应用场景下的功能是符合设计要求的,所以你需要考虑的测试用例就需要更多、更全面。

  等价类划分方法,是将所有可能的输入数据划分成若干个子集,在每个子集中,如果任意一个输入数据对于揭露程序中潜在错误都具有同等效果,那么这样的子集就构成了一个等价类。后续只要从每个等价类中任意选取一个值进行测试,就可以用少量具有代表性的测试输入取得较好的测试覆盖结果。

  边界值分析方法,是选取输入、输出的边界值进行测试。因为通常大量的软件错误是发生在输入或输出范围的边界上,所以需要对边界值进行重点测试,通常选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。

基于等价类划分和边界值分析方法,设计的测试用例

现在,针对“用户登录”功能,基于等价类划分和边界值分析方法,我们设计的测试用例包括:

  1. 输入已注册的用户名和正确的密码,验证是否登录成功;
  2. 输入已注册的用户名和不正确的密码,验证是否登录失败,并且提示信息正确;
  3. 输入未注册的用户名和任意密码,验证是否登录失败,并且提示信息正确;
  4. 用户名和密码两者都为空,验证是否登录失败,并且提示信息正确;
  5. 用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确;
  6. 如果登录功能启用了验证码功能,在用户名和密码正确的前提下,输入正确的验证码,验证是否登录成功;
  7. 如果登录功能启用了验证码功能,在用户名和密码正确的前提下,输入错误的验证码,验证是否登录失败,并且提示信息正确。

现在,我跟你分享一下有经验的测试工程师会再增加的测试用例:

  1. 用户名和密码是否大小写敏感;
  2. 页面上的密码框是否加密显示;
  3. 后台系统创建的用户第一次登录成功时,是否提示修改密码;
  4. 忘记用户名和忘记密码的功能是否可用;
  5. 前端页面是否根据设计要求限制用户名和密码长度;
  6. 如果登录功能需要验证码,点击验证码图片是否可以更换验证码,更换后的验证码是否可用;
  7. 刷新页面是否会刷新验证码;
  8. 如果验证码具有时效性,需要分别验证时效内和时效外验证码的有效性;
  9. 用户登录成功但是会话超时后,继续操作是否会重定向到用户登录界面;
  10. 不同级别的用户,比如管理员用户和普通用户,登录系统后的权限是否正确;
  11. 页面默认焦点是否定位在用户名的输入框中;
  12. 快捷键Tab和Enter等,是否可以正常使用。

显式功能性需求和非功能性需求

  显式功能性需求:软件本身需要实现的具体功能

  非功能性需求:安全性、性能、兼容性

安全性测试用例包括:

  1、用户密码后台存储是否加密;

  2、用户密码在网络传输过程中是否加密;

  3、密码是否具有有效期,密码有效期到期后,是否提示需要修改密码;

  4、不登录的情况下,在浏览器中直接输入登录后的URL地址,验证是否会重新定向到用户登录界面;

  5、密码输入框是否不支持复制和粘贴;

  6、密码输入框内输入的密码是否都可以在页面源码模式下被查看

  7、用户名和密码的输入框中分别输入典型的“SQL注入攻击”字符串,验证系统的返回页面;

  8、用户名和密码的输入框中分别输入典型的“XSS跨站脚本攻击”字符串,验证系统行为是否被篡改;

  9、连续多次登录失败情况下,系统是否会阻止后续的尝试以应对暴力破解;

  10、同一用户在同一终端的多种浏览器上登录,验证登录功能的互斥性是否符合设计预期;

  11、同一用户先后在多台终端的浏览器上登录,验证登录是否具有互斥性。

性能压力测试用例包括:

  1、单用户登录的响应时间是否小于3秒;

  2、单用户登录时,后台请求数量是否过多;

  3、高并发场景下用户登录的响应时间是否小于5秒;

  4、高并发场景下服务端的监控指标是否符合预期;

  5、高集合点并发场景下,是否存在资源死锁和不合理的资源等待;

  6、长时间大量用户连续登录和登出,服务器端是否存在内存泄露。

兼容性测试用例包括:

  1、不同浏览器下,验证登录页面的显示以及功能正确性;

  2、相同浏览器的不同版本下,验证登录页面的显示以及功能正确性;

  3、不同移动设备终端的不同浏览器下,验证登录页面的显示以及功能正确性;

  4、不同分辨率的界面下,验证登录页面的显示以及功能正确性。

   测试的不可穷尽性,即绝大多数情况下,是不可能进行穷尽测试的。“穷尽测试”,是指包含了软件输入值和前提条件所有可能组合的测试方法,完成穷尽测试的系统里应该不残留任何未知的软件缺陷。

  在绝大多数的软件工程实践中,测试由于受限于时间成本和经济成本,是不可能去穷尽所有可能的组合的,而是采用基于风险驱动的模式,有所侧重地选择测试范围和设计测试用例,以寻求缺陷风险和研发成本之间的平衡。

2 如何设计一个“好的”测试用例“

好的”测试用例必须具备哪些特征?

   在具体的用例设计时,首先需要搞清楚每一个业务需求所对应的多个软件功能需求点,然后分析出每个软件功能需求点对应的多个测试需求点,最后再针对每个测试需求点设计测试用例。

具体到测试用例设计本身的设计,两个关键的点:

  1、从软件功能需求出发,全面地、无遗漏地识别出测试需求是至关重要的,这将直接关系到用例的测试覆盖率。

  2、对于识别出的每个测试需求点,需要综合运用等价类划分、边界值分析和错误推测方法来全面地设计测试用例。

用例设计的其他经验

  1、只有深入理解被测试软件的架构,你才能设计出”有的放矢“的测试用例集,去发现系统边界以及系统集成上的潜在缺陷。

  2、必须深入理解被测软件的设计与实现细节,深入理解软件内部的处理逻辑。

  3、需要引入需求覆盖率和代码覆盖率来衡量测试执行的完备性,并以此为依据来找出遗漏的测试点。

3 什么是单元测试?如何做好单元测试

单元测试

  单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类。

如何做好单元测试?

  第一,代码的基本特征与产生错误的原因

  第二,单元测试用例详解(单元测试的用例是一个“输入数据”和“预计输出”的集合。)

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

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

        

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

  桩代码(Stub)是用来代替真实代码的临时代码。

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

实际项目中如何开展单元测试?

  1、并不是所有的代码都要进行单元测试,通常只有底层模块或核心模块的测试中才会采用单元测试。

  2、你需要确定单元测试框架的选型,这和开发语言直接相关。Java(Junit和TestNG),Python(Pytest、Unitest)

  3、为了能够衡量单元测试的代码覆盖率,通常你还需要引入计算代码覆盖率的工具。Java(JaCoCo)

  4、最后你需要把单元测试执行、代码覆盖率统计和持续集成流水线做成集成,以确保每次代码递交,都会自动触发单元测试,并在单元测试执行过程中自动统计代码覆盖率,最后以“单元测试通过率”和“代码覆盖率”为标准来决定本次代码递交是否能够被接受。

4 为什么要做自动化测试?什么样的项目适合做自动化测试

自动化测试

  自动化测试是,把人对软件的测试行为转化为由机器执行测试行为的一种实践

什么样的项目适合自动化测试?

  第一,需求稳定,不会频繁变更

  第二,研发和维护周期长,需要频繁执行回归测试

  第三,需要在多种平台上重复运行相同测试的场景

  第四,某些测试项目通过手工测试无法实现,或者手工成本太高

  第五,被测软件的开发较为规范,能够保证系统的可测试性

  第六,测试人员已经具备一定的编程能力

5 你知道软件开发各阶段都有哪些自动化测试技术吗?

单元测试的自动化技术

  第一,用例框架代码生成的自动化

  第二,部分测试输入数据的自动化生成

  第三,自动桩代码的生成

  第四,被测代码的自动化静态分析

 静态分析主要指代码的静态扫描,目的是识别出违反编码规则或编码风格的代码行。目前比较常用的代码静态分析工具有Sonar和Coverity等

  第五,测试覆盖率的自动统计与分析

Web Service测试的自动化技术

  Web Service测试,主要是指SOAP API和REST API这两类API测试,最典型的是采用SoapUI或Postman等类似的工具。但这类测试工具基本都是界面操作手动发起Request并验证Response,

所以难以和CI/CD集成,于是就出现了API自动化测试框架。

Web Service测试自动化包括:

  第一,测试脚本架代码的自动化生成

  第二,部分测试输入数据的自动生

  第三,Response验证的自动化

    Response验证自动化的核心思想是自动比较两次相同API调用的返回结果,并自动识别出有差异的字段值,比较过程可以通过规则配置去掉诸如时间戳、会话ID(Session ID)等动态值。

  第四,基于SoapUI或者Postman的自动化脚本生成

GUI测试的自动化技术

  GUI自动化测试主要分为两大方向:传统Web浏览器和移动端原生应用(Native Appp)的GUI自动化。附加(小程序)

  传统Web浏览器的GUI自动化测试:Selenium、Puppteer

  移动端原生应用:Appium

6 你真的懂测试覆盖率吗?

测试覆盖率

  测试覆盖率通常被用来衡量测试的充分性和完整性,从广义的角度来讲,测试覆盖率主要分为两大类,一类是面向项目的需求覆盖率,另一类是更偏向技术的代码覆盖率。

需求覆盖率

  需求覆盖率是指测试对需求的覆盖程度,通常的做法是将每一条分解后的软件需求和对应的测试建立一对多的映射关系,最终目标是保证测试可以覆盖每个需求,以保证软件产品的质量。

代码覆盖率
  代码覆盖率是批至少被执行了一次的条目数占整个条目数的百分比。

三种代码覆盖率指标

 代码覆盖率的价值

  统计代码覆盖率的根本目的是找出潜在的遗漏测试用例,并有针对性的进行补充,同时还可以识别出代码中那些由于需求变更等原因造成的不可达的废弃代码。

代码覆盖率的局限性

  总结来讲,高的代码覆盖率不一定能保证软件的质量,但是低的代码覆盖率一定不能保证软件的质量。

代码覆盖率工具

  JaCoCo是一款Java代码的主流开源覆盖率工具

  Javascript的代码覆盖率:JSCoverage和Istanbul

7 如何高效填写软件缺陷报告?

一份高效的缺陷报告主要由哪些部分组成及各部分的关键点。

  1、缺陷标题  

 缺陷标题通常是别人最先看到的部分,是对缺陷的概括性描述,通常采用“在什么情况下发生了什么问题”,的模式。

  2、缺陷概述

  缺陷概述通常会提供更多概括性的缺陷本质与现象的描述,是缺陷标题的细化。

  3、缺陷影响

  4、环境配置

  5、前置条件

  6、缺陷重现步骤

  7、期望结果和实际结果

  8、优先级(Priority)和严重程度(Severity)

  9、变通方案(Workaround)

  10、根原因分析(Root Cause Analysis)

  11、附件(Attachment)

8 以终为始,如何才能做好测试计划?

一份好的测试计划要包括:

1、测试范围

  明确“测什么”和“不测什么”

2、测试策略

  明确“先测什么后测什么”和“如何来测”

  (1)功能测试(2)兼容性测试(3)性能测试 等

        (1)功能测试: 主干业务流程的测试自动化

        (2) Web测试: 覆盖的浏览器类型和版本 , 移动测试: 覆盖的设备类型和具体iOS/Android的版本等

       (3)性能测试:  对于性能测试,需要在明确了性能需求(并发用户数、响应时间、事务吞吐量等)的前提下,结合被测系统的特点,设计性能测试场景并确定性能测试框架。

3、测试资源

  明确“谁来测”和“在哪里测”

4、测试进度

  明确开始时间、所需工作量、预计完成时间、上线发布时间

  行为驱动开发,BDD,最典型的框架是“Cucumber”

5、测试风险预估

  明确如何有效应地各种潜在的变化

9 软件测试工程师的核心竞争力是什么?

  测试开发岗位的核心其实是“测试”,“开发”的目的是更好地服务于测试

传统测试工程师的核心竞争力

  1、测试策略设计能力

    (1)测试要具体执行到程度;

    (2)测试需要借助于什么工具;

    (3)如何运用自动化测试以及自动测试框架,以及如何选型;

    (4)测试人员资源如何合理分配;

    (5)测试进度如何安排;

    (6)测试风险如何应对。

        测试策略设计能力是功能测试工程师最核心的竞争力,也是最难培养的

  2、测试用例设计能力

 提高测试用例设计能力,平时要多积累,对常见的缺陷模式、典型的错误类型以及遇到过的缺陷,不断总结、归纳、举一反三。

  3、快速学习能力

  4、探索性测试思维

  5、缺陷分析能力

  6、自动化测试技术

  7、良好的沟通能力

测试开发工程师的核心竞争力

  1、测试系统需求分析能力

  2、更宽广的知识体系

10 软件测试工程师需要掌握的非测试知识有哪些?

1、网站架构的核心知识

2、容器技术

  Docker和Kubernetes

3、云计算技术

  Sauce Labs 测试执行环境公有云服务

  Appium+Selenium Grid集群 搭建移动终端设备的测试执行私有云

4、DevOps思维

  Jenkins

5、前端开发技术

11 互联网产品的测试策略应该如何设计?

  发布流程通常包含了代码静态扫描、单元测试、编译、打包、上传、下载、部署和测试的全流程

传统软件产品的测试策略设计

 互联网产品的测试策略设计

 互联网产品的菱形测试策略(重量级API测试、轻量级GUI测试、轻量级单元测试)

  1、以中间层的API测试为重点做全面的测试。

  2、轻量级的GUI测试,只覆盖最核心直接影响主营业务流程的E2E场景。

  3、最上层的GUI测试通常利用探索式测试思维,以人工测试的方式发现尽可能多的潜在问题。

  4、单元测试采用“分而治之”的思想,只对那些相对稳定并且核心的服务和模块开展全面的单元测试,而应用层或者上层业务只会做少量的单元测试。

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

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

相关文章

2078.两栋颜色不同且距离最远的房子

街上有 n 栋房子整齐地排成一列,每栋房子都粉刷上了漂亮的颜色。给你一个下标从 0 开始且长度为 n 的整数数组 colors ,其中 colors[i] 表示第 i 栋房子的颜色。 返回 两栋 颜色 不同 房子之间的 最大 距离。 第 i 栋房子和第 j 栋房子之间的距离是 a…

Linux应用编程 - i2c-dev操作I2C

嵌入式Linux操作I2C设备,我们一般会在内核态编写I2C驱动程序。另外还能在用户空间编写I2C程序,下面介绍相关代码的实现。 i2c-dev框架在内核中封装了I2C通信所需要的所有通信细节,I2C适配器会在/dev目录下创建字符设备,例如&#…

kettle从入门到精通 第七十课 ETL之kettle kettle数据校验,脏数据清洗轻松拿捏

场景:输入在指定的错误(错误应涵盖数据类型不匹配的情况)行数内,trans不报错,但通过错误处理步骤捕捉,并记入文件,整个数据管线正常完成直至处理完最后一个输入行。 解决方案:使用步骤【数据检验】进行处理…

本周MoonBit新增Wasm1引用计数支持、语法即将添加错误恢复机制

MoonBit更新 【Wasm MVP】Wasm1 后端添加基于 Perceus 算法的引用计数支持 【语法】throw raise try catch 均被保留为关键字 为了即将添加的错误处理机制 【Core】List与sorted_map被移动至core/immut下 List被移动至core/immut/list包中,并被移除内置类型支持 …

哈希表、递归在二叉树中的应用-1372. 二叉树中的最长交错路径

题目链接及描述 1372. 二叉树中的最长交错路径 - 力扣(LeetCode) 题目分析 题目所述,计算在二叉树中交替遍历的最大深度【左->右->左】【右->左->右】,例如对于从当前根节点root出发,则此时遍历方向有两个…

今日成果2024-6-7 TrustZone TEE安全SDK开发指南

Rockchip Vendor Storage Application Note.pdf OK 开机下,可以实现Vendor Storage的读写。 0ms时同步RTC时间 OK Rockchip_Developer_Guide_TEE_SDK_CN.pdf 什么是TrustZone 此系统方法意味着可以保护安全内存、加密块、键盘和屏幕等外设,从而可确…

视频剪辑可以赚钱吗 快速学会视频剪辑的方法

由于视频剪辑的需求不断增长,学会视频剪辑成为一项自媒体必备的技能,这个技能可以为个人带来收入和职业发展带来机会。无论是作为自由职业者还是在公司工作,掌握视频剪辑技能都可以为你提供更多的工作机会和竞争优势。这篇文章将讲解视频剪辑…

2.深度学习-线性回归

文章目录 环境配置(必看)线性回归代码工程运行结果1.对比图2.运行结果 环境配置(必看) Anaconda-创建虚拟环境的手把手教程相关环境配置看此篇文章,本专栏深度学习相关的版本和配置,均按照此篇文章进行安装…

Carsim高级开发:VS Connect通讯开发指南

文章目录 前言一、VS Connect 概念引入二、VS Connect 通讯框架三、Carsim 工程配置1、车辆模型配置2、procedure配置3、Run Control配置4、受控车辆名称配置 四、VS Connect Server代码1、打开Sln工程2、代码修改 五、VS Connect Client代码1、函数的调用关系2、carsim_variab…

5G消息 x 文旅 | 一站式智慧文旅解决方案

5G消息 x 文旅 | 一站式智慧文旅解决方案 文旅 x 5G 消息将进一步强化资源整合,满足游客服务需求、企业营销需求、政府管理需求,推进文化旅游项目的智慧化、数字化,增强传播力、竞争力和可持续性。5G 消息的“原生入口”、“超强呈现”、“智…

帕金森病的食疗建议

帕金森病(PD)是一种慢性、进展性的神经退行性疾病,主要影响中老年人。虽然目前尚无法根治,但及早规范治疗可显著改善症状,提高患者的生活质量。饮食调理作为帕金森病综合治疗的重要组成部分,对于维持患者较…

接口测试详解

接口测试详解 本文主要讲软件接口 一、什么是接口?硬件接口:硬件接口指的是硬件提供给外界的一种实体。主要作用是内部数据分离出外 部的沟通方法 目的是:沟通外部来改变内部的数据。如:USB接口,投影仪接口 软件接口…

【CDN】逆天 CDN !BootCDN 向 JS 文件中植入恶意代码

今天在调试代码,突然控制台出现了非常多报错。 这非常可疑,报错指向的域名也证实了这一点。 因为我的 HTML 中只有一个外部开源库(qrcode.min.js),因此只有可能是它出现了问题。 我翻看了请求记录,发现这…

【无线感知】【P3】无线感知手势识别-Ubicomp2022论文分享

前言: 本篇主要关于手势识别的方向的,主要参考 北京大学-《无线感知手势识别-Ubicomp2022论文分享》 目录: 技术背景 主要问题(异质性问题) 感知模型 EDP DPSense 实现效果 一 技术背景 基于WIFI的手势识别在智能家具,以…

ShardingSphere-proxy添加自定义分片规则(踩坑日记)

文章目录 一、新建spring boot项目二、编写代码(1) 新建一个类(2) doSharding方法详解(3) 实际例子 三、增加spi文件(很关键)四、打包五、把生成的文件放到ext-lib中六、yaml配置(怎么用)七、测试 版本环境 mysql 5.7.40 sharding…

湘潭大学信息与网络安全复习笔记2(总览)

前面的实验和作业反正已经结束了,现在就是集中火力把剩下的内容复习一遍,这一篇博客的内容主要是参考教学大纲和教学日历 文章目录 教学日历教学大纲 教学日历 总共 12 次课,第一次课是概述,第二次和第三次课是密码学基础&#x…

[渗透测试学习] Runner-HackTheBox

Runner-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -v 10.10.11.13扫描结果如下 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.18.0 (Ubuntu) 8000…

中小制造业工厂要不要上MES系统

MES系统的主要功能包括制造数据管理、计划排产管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集成分解等。通过这些模块,MES为企业打造一个…

基于springboot实现农产品直卖平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现农产品直卖平台系统的设计演示 摘要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔…

快速构建本地RAG聊天机器人:使用LangFlow和Ollama实现无代码开发

基于LangChain的快速RAG应用原型制作方法 还记得构建智能聊天机器人需要数月编码的日子吗? LangChain这样的框架确实简化了开发流程,但对非程序员来说,数百行代码仍然是一道门槛。 有没有更简单的方法呢? 图片由 Ravi Palwe 在…