Python测试线程应用程序过程解析


Posted in Python onDecember 31, 2019

这篇文章主要介绍了Python测试线程应用程序过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在本章中,我们将学习线程应用程序的测试。我们还将了解测试的重要性。

为什么要测试?

在我们深入讨论测试的重要性之前,我们需要知道测试的内容。一般来说,测试是一种了解某些东西是如何运作的技术。另一方面,特别是如果我们谈论计算机程序或软件,那么测试就是访问软件程序功能的技术。

在本节中,我们将讨论软件测试的重要性。在软件开发中,必须在向客户端发布软件之前进行双重检查。这就是由经验丰富的测试团队测试软件非常重要的原因。请考虑以下几点来理解软件测试的重要性

提高软件质量

当然,没有公司想要提供低质量的软件,也没有客户想购买低质量的软件。测试通过查找和修复其中的错误来提高软件的质量。

客户满意度

任何业务中最重要的部分是客户的满意度。通过提供无错误和优质软件,公司可以实现客户满意度。

减轻新功能的影响

假设我们已经建立了一个10000行的软件系统,我们需要添加一个新功能,然后开发团队就会担心这个新功能对整个软件的影响。此外,测试也起着至关重要的作用,因为如果测试团队已经完成了一系列测试,那么它可以使我们免于任何潜在的灾难性中断。

用户体验

任何业务中另一个最重要的部分是该产品用户的体验。只有测试可以确保最终用户发现它简单易用。

减少开支

测试可以通过在开发的测试阶段找到并修复错误而不是在交付后修复它来降低软件的总成本。如果在交付软件后出现重大错误,那么就客户不满意,公司负面声誉等方面的费用和无形成本而言,会增加其实际成本。

测试什么?

始终建议您对要测试的内容有适当的了解。在本节中,我们将首先了解测试任何软件时测试人员的主要动机。代码覆盖率,即我们的测试套件在测试时会遇到多少行代码,应该避免。这是因为,在测试时,仅关注代码行数对我们的系统没有任何实际价值。可能仍然存在一些错误,即使在部署之后,这些错误也会在稍后阶段反映出来。

考虑以下与测试内容相关的重要观点

我们需要专注于测试代码的功能而不是代码覆盖率。

我们需要首先测试代码中最重要的部分,然后转向代码中不太重要的部分。这肯定会节省时间。

测试人员必须具有多种不同的测试,可以将软件推向极限。

测试并发软件程序的方法

由于能够利用多核架构的真正能力,并发软件系统正在取代顺序系统。最近,并发系统程序被用于从手机到洗衣机,从汽车到飞机等各种各样的系统程序。我们需要更加谨慎地测试并发软件程序,因为如果我们已经为单线程应用程序添加了多个线程已经是一个错误,那么我们最终会遇到多个错误。

并发软件程序的测试技术广泛关注于选择交错,这种交错暴露了可能有害的模式,如竞争条件,死锁和违反原子性。以下是测试并发软件程序的两种方法

系统探索

该方法旨在尽可能广泛地探索交错的空间。这种方法可以采用蛮力技术,其他方法采用偏序降阶技术或启发式技术来探索交织空间。

房产驱动

属性驱动的方法依赖于观察到并发错误更可能发生在暴露特定属性(例如可疑内存访问模式)的交错下。不同的属性驱动方法针对不同的错误,如竞争条件,死锁和违反原子性,这进一步取决于一个或其他特定属性。

测试策略

测试策略也称为测试方法。该策略定义了如何进行测试。测试方法有两种技术 -

主动

一种方法,尽可能早地启动测试设计过程,以便在创建构建之前找到并修复缺陷。

反应

一种方法,在开发过程完成之前,测试不会开始。

在对python程序应用任何测试策略或方法之前,我们必须对软件程序可能具有的错误类型有一个基本的想法。错误如下

语法错误

在程序开发期间,可能会出现许多小错误。错误主要是由于输入错误。例如,缺少冒号或关键字的拼写错误等。此类错误是由于程序语法错误而非逻辑错误造成的。因此,这些错误称为语法错误。

语义错误

语义错误也称为逻辑错误。如果软件程序中存在逻辑或语义错误,则语句将正确编译并运行,但由于逻辑不正确,因此无法提供所需的输出。

单元测试

这是测试python程序最常用的测试策略之一。此策略用于测试代码的单元或组件。按单位或组件,我们指的是代码的类或函数。单元测试通过测试“小”单元简化了大型编程系统的测试。借助于上述概念,单元测试可以被定义为一种方法,其中测试各个源代码单元以确定它们是否返回所需的输出。

在随后的章节中,我们将了解用于单元测试的不同Python模块。

unittest模块

单元测试的第一个模块是unittest模块。它受JUnit的启发,默认情况下包含在Python3.6中。它支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中,以及测试与报告框架的独立性。

以下是unittest模块支持的一些重要概念

文字夹具

它用于设置测试,以便在开始测试之前运行并在测试结束后拆除。它可能涉及在开始测试之前创建临时数据库,目录等。

测试用例

测试用例检查所需的响应是否来自特定的输入集。unittest模块包含一个名为TestCase的基类,可用于创建新的测试用例。它包含两个默认方法 -

setUp() - 一种用于在运行之前设置测试夹具的钩子方法。 在调用实现的测试方法之前调用它。

tearDown( - 用于在类中运行所有测试后解构类夹具的钩子方法。

测试套件

它是测试套件,测试用例或两者的集合。

试验跑步者

它控制测试用例或套装的运行,并为用户提供结果。它可以使用GUI或简单的文本界面来提供结果。

以下Python程序使用unittest模块来测试名为 Fibonacci
的模块。该程序有助于计算一个数字的斐波那契数列。在此示例中,我们创建了一个名为Fibo_test的类,以使用不同的方法定义测试用例。这些方法继承自unittest.TestCase。我们使用两种默认方法 setUp()和tearDown()。我们还定义了testfibocal方法。必须使用字母测试开始测试的名称。在最后一个块中,unittest.main()为测试脚本提供了一个命令行界面。

import unittest
def fibonacci(n):
  a, b = 0, 1
  for i in range(n):
  a, b = b, a + b
  return a
class Fibo_Test(unittest.TestCase):
  def setUp(self):
  print("This is run before our tests would be executed")
  def tearDown(self):
  print("This is run after the completion of execution of our tests")

  def testfibocal(self):
  self.assertEqual(fib(0), 0)
  self.assertEqual(fib(1), 1)
  self.assertEqual(fib(5), 5)
  self.assertEqual(fib(10), 55)
  self.assertEqual(fib(20), 6765)

if __name__ == "__main__":
  unittest.main()

从命令行运行时,上面的脚本会生成一个如下所示的输出 -

输出

This runs before our tests would be executed.
This runs after the completion of execution of our tests.
.
----------------------------------------------------------------------
Ran 1 test in 0.006s
OK

现在,为了更清楚,我们正在改变我们的代码,这有助于定义Fibonacci模块。

以下面的代码块为例

def fibonacci(n):
  a, b = 0, 1
  for i in range(n):
  a, b = b, a + b
  return a

对代码块进行了一些更改,如下所示 -

def fibonacci(n):
  a, b = 1, 1
  for i in range(n):
  a, b = b, a + b
  return a

现在,在使用更改的代码运行脚本后,我们将获得以下输出

This runs before our tests would be executed.
This runs after the completion of execution of our tests.
F
======================================================================
FAIL: testCalculation (__main__.Fibo_Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "unitg.py", line 15, in testCalculation
self.assertEqual(fib(0), 0)
AssertionError: 1 != 0
----------------------------------------------------------------------
Ran 1 test in 0.007s

FAILED (failures = 1)

上面的输出显示模块未能提供所需的输出。

Docktest模块
docktest模块还有助于单元测试。它还预先包装了python。它比unittest模块更容易使用。unittest模块更适合复杂的测试。要使用doctest模块,我们需要导入它。相应函数的docstring必须具有交互式python会话及其输出。

如果我们的代码中的一切都很好,那么docktest模块就没有输出; 否则,它将提供输出。


以下Python示例使用docktest模块测试名为Fibonacci的模块,该模块有助于计算数字的Fibonacci系列。

import doctest
def fibonacci(n):
  """
  Calculates the Fibonacci number

  >>> fibonacci(0)
  0
  >>> fibonacci(1)
  1
  >>> fibonacci(10)
  55
  >>> fibonacci(20)
  6765
  >>>

  """
  a, b = 1, 1
  for i in range(n):
  a, b = b, a + b
  return a
   if __name__ == "__main__":
  doctest.testmod()

我们可以看到名为fib的相应函数的docstring具有交互式python会话以及输出。如果我们的代码没问题,那么doctest模块就没有输出。但要了解它是如何工作的,我们可以使用-v选项运行它。

(base) D:\ProgramData>python dock_test.py -v
Trying:
  fibonacci(0)
Expecting:
  0
ok
Trying:
  fibonacci(1)
Expecting:
  1
ok
Trying:
  fibonacci(10)
Expecting:
  55
ok
Trying:
  fibonacci(20)
Expecting:
  6765
ok
1 items had no tests:
  __main__
1 items passed all tests:
4 tests in __main__.fibonacci
4 tests in 2 items.
4 passed and 0 failed.
Test passed.

现在,我们将更改有助于定义Fibonacci模块的代码

以下面的代码块为例

def fibonacci(n):
  a, b = 0, 1
  for i in range(n):
  a, b = b, a + b
  return a

以下代码块有助于更改

def fibonacci(n):
  a, b = 1, 1
  for i in range(n):
  a, b = b, a + b
  return a

在没有-v选项的情况下运行脚本后,使用更改的代码,我们将获得如下所示的输出。

输出

(base) D:\ProgramData>python dock_test.py
**********************************************************************
File "unitg.py", line 6, in __main__.fibonacci
Failed example:
  fibonacci(0)
Expected:
  0
Got:
  1
**********************************************************************
File "unitg.py", line 10, in __main__.fibonacci
Failed example:
  fibonacci(10)
Expected:
  55
Got:
  89
**********************************************************************
File "unitg.py", line 12, in __main__.fibonacci
Failed example:
  fibonacci(20)
Expected:
  6765
Got:
  10946
**********************************************************************
1 items had failures:
  3 of 4 in __main__.fibonacci
***Test Failed*** 3 failures.

我们可以在上面的输出中看到三个测试都失败了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python连接sql server乱码的解决方法
Jan 28 Python
python模拟新浪微博登陆功能(新浪微博爬虫)
Dec 24 Python
Python去掉字符串中空格的方法
Mar 11 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
python绘制BA无标度网络示例代码
Nov 21 Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
python控制台打印log输出重复的解决方法
May 14 Python
Python测试框架pytest高阶用法全面详解
Jun 01 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 #Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 #Python
Python面向对象封装操作案例详解
Dec 31 #Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 #Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 #Python
Pycharm最新激活码2019(推荐)
Dec 31 #Python
python ftplib模块使用代码实例
Dec 31 #Python
You might like
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
Javascript事件实例详解
2013/11/06 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
python fabric实现远程操作和部署示例
2014/03/25 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Python3中的bytes和str类型详解
2019/05/02 Python
详解Python文件修改的两种方式
2019/08/22 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
python opencv实现图像配准与比较
2021/02/09 Python
python压包的概念及实例详解
2021/02/17 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
公司授权委托书
2014/04/04 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
市级文明单位申报材料
2014/05/07 职场文书
微笑服务标语
2014/06/24 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
高三语文复习计划
2015/01/19 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
Windows server 2016服务器基本设置
2022/08/14 Servers