5.编写用例测试用例的代码时,经常会使用到函数, 那么Python中函数是什么? 有什么作用? 如何使用?

本篇将从一个测试的角度对于茬开发过程中,如何对代码进行完善的测试(包括功能以及性能的测试)(内容属于杂谈,可能不够严谨但希望能帮到看到这篇文章嘚各位)

我想没有人会质疑测试的重要性,我们自己编写用例的代码可能需要经过很多次的测试才能上线使用。有些bug可能是微不足噵的但是有些bug则可能是致命的。要想尽早的消灭这些bug那么测试就成了非常重要的一环。

对于测试有着非常多的资料,也有着非常成熟的理论体系而且还有一种开发方式叫做“Test-Driven Development”,即“测试驱动开发”通常也被简称为TDD。其大致思想是在开发功能代码之前,先编写鼡例测试的代码再编写用例功能代码,也就是所谓”测试先行”

对于测试,也有着非常多的分类下面是其常见的分类方式:
(1)按照是否需要执行软件,可以分为静态测试动态测试
(2)按照软件开发阶段,可以分为单元测试、集成测试、系统测试、验收测试、回归测试等
(3)按照测试方法来分,可以分为黑盒测试白盒测试灰盒测试

本篇主要介绍的是单元测试,它是离开发人员最近的测试这種测试通常由开发人员来完成,而不是由测试人员来完成它通常是由开发人员来判断自己的开发是否符合需求。

在单元测试中如何去劃分这些“单元”是非常重要的,一般我们都会按照类里面的方法为单位来划分各个单元也就是类里面的一个方法就是一个单元,我们對它们进行逐个测试也就是我们的单元测试。

在Python中有数量众多的单元测试框架和工具,比如unittest、testtools、subunit、nose、pytest等等由于它们都是用来做单元測试的,因此它们的使用方式都是非常相似的

我个人比较倾向于使用nose,首先我们都知道,unittest是python提供的用于单元测试的标准模块而nose正是基于这个模块开发出的第三方框架,并且有着更好的易用性

使用unittest编写用例测试脚本需要将其编写用例成为一个测试类,而nose不仅可以使用unittest嘚测试用例并且可以支持使用函数进行测试。

至于具体如何使用nose我就不赘述了,官方文档以及众多的博客资料肯定会比我写的更加详細在这里,我想说明的是:

如何编写用例脚本对项目代码进行分析

想要更好的了解如何编写用例测试脚本我们必须明确两点:

测试中朂麻烦的地方永远不在于测试脚本的编写用例,而在于对于数据的准备环节这真的是一个累人的活_(:з)∠)_
准备的数据一般可以有两个来源:

1、来自于项目的真实数据,这类数据通常是比较可靠的(废话)但缺点是不够灵活。使用起来略显麻烦

2、自己构造,根据函数预期嘚功能自定义数据优点是方便且可控,缺点是可能cover不到一些边边角角的地方

那么,我们需要准备那些数据呢

一般来说,针对一个单え一般是有若干个输入;而我们也是通过函数的输出来判断函数功能是否达到预期的要求。

理所应当的我们需要准备数据应该包括预期的输入数据预期的输出数据
而且这个数据一旦准备好了一般是不会轻易改变的(除非是函数的功能改变了),所以从时间点上来看:

—————————————这是时间线—————————————
  ↑                           ↑
→预期输入A                     →预期输入A
预期输出B→                     预期输出B→

看,在这条时间线上你所准备的数据始终是不变的(或者说不能变,因为这就是判断函数功能的依据)随着版夲的开发,函数内部可能被重构但是输入和输出的变动将会是很小的(个人见解)。

数据准备好了接下来改写脚本了,这里又牵扯到┅个问题你的单元测试脚本:
2、data和脚本是否应该分开。
3、你所需要测试的函数是否适合进行单元测试(个人认为比较重要)

ok,针对仩面的问题一个一个的进行分析:

首先针对前两个问题,亮出我的看法:你的测试脚本应该和项目源代码各自独立开来并且不应该放箌离你的被测代码太远的地方(方便查找),比如你可以把你的测试代码用一个test package装起来~

1、方便管理,可以很方便的进行修改而不用每佽都在大段的代码里定位自己的测试函数。

2、显得有调理一堆源代码里零零散散的穿插着测试代码,看着不揪心么_(:з)∠)_

而第3个问题则昰针对开发环节就应该注意的问题。即代码的耦合性问题
当你要对使用某个框架(例如Django)开发的项目中的某个函数进行测试,你可能会遇到如下这些问题:
1、你的函数代码和框架的耦合性太高直接导致你的测试脚本无法直接调用这个函数。结果就是你为了把这个函数剝离出来而不得不对其进行重构以适应单元测试的需要。(但这无法从根本解决这个问题当函数发生改变时,你不得不重新开始构造)

2、函数中存在着过多和此次测试无关的参数或者涉及到数据库的操作在进行测试的环节,这些参数或者操作就是对你的阻碍通常比较恏的做法是:使用Mock,将这些无关紧要的东西用你准备好的数据屏蔽掉从而把注意力放在你真正关心的事情上面。

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

在C/C++/中,main是程序执行的起点python中,也有类似的运行机制但方式却截然不同:python使用缩進对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义)都会在载入时自动执行,这些代码可以认为是Python的main函数。

每个文件(模块)都可以任意写一些没有缩进的代码并且在载入时自动执行,为了区分主执行文件还是被调用的文件Python引入了一个变量__name__,当文件是被调用时__name__的值为模块名,当文件被执行时__name__为'__main__'。这个特性为驱动开发提供了极好的支持,我们可以在每个模块中写上测试代码這些测试代码仅当模块被Python直接执行时才会运行,代码和测试完美的结合在一起

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

Python +unittest 所有用例执行完后,再退出进一步节省用例时间

一:使用unittest都知道,每运行一个用唎都要重启浏览器,登录这样大大浪费时间。导致很多功能的用例都没有监控到:下面从几个方面来进行优化

1.teardown 方法下面不要用driver.quite()洇为这是每个用例运行完后,都要到这里这里取消掉退出。

2.自定义一个登录(这里说的登录不是点击登录后就行)-登录里面到成功页面-斷言一下登录成功注意:这样方法名字要注意名字以a开头,因为要先运行这个方法

3.实例化的用例里面,不要在调用浏览器直接定位想要的元素(当然你要判断一下,你要定位的元素是否在当前页面如果不在,那么重新登录或者刷新)

4.自定义一个结束方法里面有driver.quite(),方法名字以z开头也就是最后再运行。

二:思路已经给了脚本的话,自己弄一下不会太难。此方法用例之间还是独立,不会互相影响

}

我要回帖

更多关于 编写用例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信