测试是软件工程不可或缺的一部分,特别是针对所有相关利益相关者。用户可以享受用户友好的软件并满足他们的需求,而工程师则喜欢构建错误和无错误的软件。
测试的好处
错误检测和预防:开发人员可以在开发过程中识别软件中软件中的错误,错误和缺陷,并解决这些错误,以避免造成用户不便。这也节省了时间,成本和精力来解决生产。
质量保证:测试确保软件满足功能,性能,安全性和用户满意度的特定要求。
用户体验:可用性测试使开发人员能够识别需要改进的领域,以创建用户友好且易于使用的应用程序。
降低风险:安全性和绩效测试允许在部署前可以发现可以解决的潜在漏洞和瓶颈。
连续集成和连续交付(CI/CD):在开发的每个阶段进行自动测试,以确保所做的更改不会导致应用程序中断或引入新问题,并且要更快地交付过程。
客户信心:测试增加了客户的信任,即该软件将按预期工作,而无需严重错误,这会导致客户采用和忠诚度。
监管合规性:该软件可能要遵守法律合规;测试有助于验证该软件在法律上符合法律规定,从而降低了处罚和法律诉讼的风险。
可维护性和可伸缩性:经过良好测试的软件为更改提供了空间,而无需引入意外问题,这使扩展和维护更容易。
团队合作:建筑物时不同的团队参与其中;像测试人员,产品所有者和开发人员一样,他们进行交流和发出反馈,从而更好地了解需求和潜在需求。
测试类型
单位测试
由于原子是最小的物质单位,单位测试测试最低级别的软件单元。这包括功能,方法,类,组件和模块。
根据所使用的语言,有不同的单位测试工具。例如,在Python中,您可以使用多种工具:
Unittest:Python的内置单元测试框架,可提供测试发现,测试固定装置和各种断言方法。
Pytest:是一个支持固定装置,参数化测试和易于测试发现的第三方测试框架,同时添加插件以扩展其功能。
Nose2:它提供测试发现,固定支持和插件支持。它几乎与pytest相同,但由于其特征和简单性而被优选。
Doctest:这将测试用例嵌入了您的代码的Docstrings中。该模块允许您直接在Docstrings中编写测试并运行它们,以确保文档中提供的代码示例准确。
Tox:是一种测试工具,可在多个Python环境中自动化测试。 TOX确保代码在不同的Python版本和环境中工作。
Hypothesis:一种基于属性的测试工具,生成随机测试数据并验证各种场景中的字段和属性是否为真。
Mock/unittest.mock:提供用于模拟和修补对象和功能的工具,对于在测试过程中隔离组件特别有用。
集成测试
集成测试涉及测试不同单元之间的相关性,以确保它们按预期合作。
一些工具可用于单元和集成测试,例如:Untist,Pytest,Nose2,Mock和Mockest。
集成的特定工具包括:
Requests:是Python中的HTTP库,允许HTTP请求并验证做出的响应。它测试与RESTFUL API或其他Web服务的互动。
Selenium:用于自动化Web浏览器,用于测试不同网页和组件的交互。
HTTPretty:允许您模拟HTTP请求和响应。它主要用于模拟与外部API的相互作用。
Faker:一个生成伪造数据的库,当您需要数据来测试各种组件时可能很有用。
回归测试
回归测试是重新运行的测试,以检查所做的更改(包括软件的添加和减少)不引入任何新缺陷。
回归测试可以通过三种不同的方式进行。第一个是重新测试整个应用程序或受传入更改影响的特定功能。第二个是重新执行测试套件,以确认更改并未引入现有功能的破坏变化。第三个是将本软件的当前版本与以前的版本进行比较,以确保功能上没有破坏。
性能测试
性能测试是一项测试,可以评估该软件在高峰时期的各种条件下的作用,例如速度,响应能力和稳定性。性能测试确定瓶颈,潜在的性能问题,可靠性以及系统处理某些负载的能力。
用于性能测试的工具包括:
Locust:是一个开源负载测试框架,可让您使用Python代码来定义方案。它模拟了大量并发用户,并测量了您的Web应用程序和API的性能。
JMeter:是一种基于Java的性能测试工具,可支持使用插件在Python中进行脚本。 Jmeter用于负载测试不同的应用程序,包括Web服务。
Pytest-benchmark:pytest允许您随着时间的推移跟踪和比较功能和代码段的性能。它确定了python代码的性能下降和改进。
Hey:是用于测试Web应用程序和API的快速HTTP负载测试工具。它提供了一个CLI(命令行接口)并支持并发请求。
Apache Benchmark(AB):是Apache HTTP服务器随附的命令行工具,用于执行加载测试。
Vegeta:是一种基于GO的负载测试工具,可测试您的Web服务和API的性能。此外,它支持利率限制并提供详细的报告。
性能测试涉及对不同条件的测试,如下所示:
a。负载测试
负载测试是通过施加等于或小于预期负载的负载来测试应用程序的稳定性。例如,如果应用程序一次可以处理4300个用户,响应时间为2.5秒,则可以通过为4300个或更少的3000个用户(例如3000个用户)应用最大负载来验证应用程序在2.5秒内响应是否响应,可以进行负载测试。适用于所有用户。
b。压力测试
应力测试是通过施加大于预期载荷的负载来测试应用程序的稳定性。例如,如果应用程序一次可以处理4300个用户,响应时间为2.5秒,则可以通过添加更多500个用户的负载并检查所有用户的响应时间来进行压力测试。目的是检查应用程序在压力下的行为。
c。可伸缩性测试
可伸缩性测试通过施加超出预期的负载来测试稳定性以及应用程序的响应时间。例如,如果应用程序一次可以承受4300个用户,响应时间为2.5秒,则可以通过应用1100多个用户的负载并定期增加IT来进行可伸缩性测试,以找到崩溃点。
。 4300用户,2.5秒
5800用户,3秒
6300用户,3.5秒
4秒内7000个用户
8500用户崩溃:可伸缩性测试期间确定的点
d。音量测试
音量测试测试应用程序的稳定性以及与要传输到数据库的数据的能力有关的响应时间。简而言之,数据库如何处理大量数据的传输。
e。耐力/浸泡测试
耐力测试是通过连续施加较长时间段来测试应用程序的稳定性和响应时间
验收测试
接受测试是在测试的最后阶段进行的,然后与最终用户共享应用程序。它涉及测试与要求有关的软件,如果用户对输出感到满意,则验证了应用程序的功能。
接受测试的工具:
Behave:是一种行为驱动的开发(BDD)Python框架,您可以在Gherkin中编写接受测试,这是一种可读的语言。测试用常规文本编写,这使所有利益相关者更容易理解。测试由框架执行。
Pytest-bdd:是一个带有BDD的PYTest插件
Splinter:是一个网络测试库,用于通过Web驱动程序的抽象来测试Web应用程序,以与网页进行交互并执行接受测试。
PyAutoGUI:是一个库,用于通过编程控制鼠标和键盘来自动化与应用程序的交互来接受桌面应用程序的接受测试。
安全测试
安全性测试可以在可以利用的软件应用程序中确定内部和外部的漏洞和弱点。该测试的目的是防止未经授权的访问和数据泄露,以及其他分歧。
a。穿透测试
笔测试正在由外部承包商进行测试,以在安全方面找出系统的弱点。承包商进行SQL注射,URL操纵,特权高程,会议到期等操作,然后向组织提供报告。
安全测试的工具:
Bandit:是一种用于Python应用程序的工具,用于分析您的代码,以了解潜在的安全问题,例如不安全的功能使用,硬编码密码等。
Safety:是一个命令行实用程序,可扫描针对PYTHON的依赖(Python软件包索引)安全咨询数据库,以了解已知的安全漏洞。
PySAP(Python静态分析插件):是一种分析工具,扫描Python代码以检查安全问题,潜在的错误和其他质量问题。
PyLint:有助于确定可能导致安全问题的潜在安全漏洞和编码问题。
自动化
测试中的自动化是使用工具和脚本来执行测试用例,并将输出与预期结果进行比较。它可以节省时间,增加覆盖范围并防止单调任务。为此的工具包括硒,pytest和Unitest。烟雾测试
烟雾测试是进行快速测试,以检查基本功能是否在新构建或部署后的预期工作。该测试验证构建以确保不存在问题。
理智测试
理智测试需要测试一个狭窄而重点的区域,以验证附加功能或错误修复没有影响应用程序的核心功能。它是回归测试的子集。
探索性测试
探索性测试是一种非正式测试方法,测试人员在没有预定义的测试计划的情况下进行测试。他们根据对软件的知识和理解执行测试。
帮助探索性测试的资源和工具包括:
诸如TestRail之类的测试管理工具帮助测试人员组织探索性会话,跟踪和记录他们的发现。
基于会话的测试管理(SBTM)工具(例如JIRA)可以帮助测试人员将其会话构造到时间盒的会话中,以便于报告和通信报告。
浏览器开发人员工具(例如Chrome DevTools)允许测试人员在Web应用程序的探索性测试期间检查元素,监视网络活动和调试JavaScript。
Fiddler:是一个网络调试工具,可以检查网络流量以分析API调用。
非破坏性测试
无损测试涉及您可以检查和验证代码行为的方法,而无需更改其状态或影响应用程序功能。
用于非毁灭性测试的资源和工具包括:
PyTest Snapshot Pluginpermits视觉检查输出而无需修改实际实现。
Code Coverage Analysis评估当前测试套件测试的代码部分而不更改代码。
Monkeypatching with pytest在无需更改原始实现的情况下提供了函数的时间更换。
Code review and inspection:团队成员审查代码以识别问题并改善代码质量而不更改代码库。
系统集成测试
系统集成将单个组件连接到工作系统中。系统集成测试是对应用程序的不同组件之间的相互作用的验证,以确保它们按预期合作,并且数据之间的数据顺利流动。
连续测试
连续测试是自动执行测试,并且频繁地进行了对软件的更改。这也是连续集成和连续交付的一部分。
目的是尽早确定问题,确保质量并提供快速的反馈。
一些连续测试的常见工具包括:
Testinfra:是用于测试系统配置和基础结构作为代码的基础结构的测试框架。
GitHub Actions/ GitLab CI / Jenkins:用于自动化连续测试工作流程,可以配置为每个代码推送或拉请求的脚本。 p>
CirlceCI:支持Python项目的连续测试
Travis CI:与github集成以用于python项目的连续测试。
API测试
API(应用程序编程接口)需要测试端点,以验证它们功能性,可靠和安全。
用于API测试的工具包括:
Dredd:用于基于API蓝图或OpenAPI规范测试API,以确保实现与规范匹配。
Postman:提供一个用于管理,创建和测试API的用户友好界面。
TestFLO for Jira:是一个JIRA插件,可帮助执行API测试作为测试过程的一部分
Schemathesis:根据OpenAPI/Swagger规格执行API测试。
敏捷测试
敏捷测试是一种测试方法,与敏捷,增量和适应用户反馈所致应用程序不断变化的要求的敏捷方法一致。测试主要由所涉及的工程师进行。为此的流行工具包括Jira,Trello和Confluence。
灰色盒子测试
灰色盒子测试是black box和white box testing的混合物。在这种情况下,测试人员对应用程序的内部工作不足有所了解。不完整的知识使测试人员可以在考虑整体系统行为的同时创建针对特定领域的测试。
数据驱动测试
数据驱动测试是将测试数据存储在单独的数据库中的地方。这将允许测试仪使用不同的数据集验证多个测试用例。
数据驱动测试的工具包括:
DDT (Data-Driven Tests):ddt是一个库,允许您使用@ddt.data
装饰器来定义测试用例并使用它们提供的数据集。
JSON / YAML/ CSV文件:Python对文件格式进行了内置支持,可以轻松存储和检索数据驱动的测试方案。 p>
Paramiko:需要测试Python中的SSH连接。
基于模型的测试
基于模型的测试是系统行为的形式模型,用于系统地生成测试用例。
帮助模型测试的工具和资源包括:
PyModel:是一个python库,可创建状态模型并基于模型生成测试用例。
Specmate:是一种基于开源模型的测试工具,支持基于Web的应用程序创建模型并提供测试用例
GraphWalker:是一种开源工具,允许以图形格式创建模型并根据图生成测试。
基本路径测试
基础路径测试是一种测试通过程序的控制流路径的技术。测试需要至少进行一次。测试用例是基于cyclomatic complexity创建的,该cyclomatic complexity是根据控制流路线线性独立路径的数量计算得出的。
结论
在本文中,我们探讨了软件工程中的各种测试方法以及可用于支持每种测试的工具。我们了解到,测试是软件开发中必不可少的过程,因为软件的更改和更新可以引入新的缺陷。连续测试对于确保软件保持可靠并满足用户的需求至关重要。
为了增强您对测试的理解并与软件测试域中新兴趋势保持最新状态,我建议探索以下资源: