加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

Python单元测试与安全测试浅析

发布时间:2020-02-12 22:54:21 所属栏目:资源 来源:博客园
导读:测试 的意义 人们针对一个具体问题,通过分析和设计,最后用编程语言写出了一个程序,如果它通过了语言解释器(编译器)的检查,可以运行了,那么下一步的工作就是设法确认它确实满足了我们需求。这篇 文章 就是讨论怎么确认程序是否满足用户提出的需求。
  测试的意义  人们针对一个具体问题,通过分析和设计,最后用编程语言写出了一个程序,如果它通过了语言解释器(编译器)的检查,可以运行了,那么下一步的工作就是设法确认它确实满足了我们需求。这篇文章就是讨论怎么确认程序是否满足用户提出的需求。  满足需求,换言之就是功能正常,确认功能正常可以从以下几个方面确认:  定义的函数对于所有正确的参数都能返回正确的结果  写出的程序对所有合适的输入都能产生正确的输出  量化后的做法就是通过一系列的试运行,检查程序的行为、输入和输出,如果检查中发现了问题,就纠正、改进。这个也是功能测试安全测试的初衷。  测试用例  测试考虑的基本问题就是怎么运行程序,需要提供什么数据,才能最大限度的检查程序的各种行为和情况,最大可能的挖出程序中的错误和缺陷。基于设计什么测试流程、提供什么参数这种检查程序运行的一套数据被称为一个测试用例。一个测试用例就是可量化的测试流程。  确认测试用例又区分两类方式:  黑盒测试  就是不看代码,直接上手程序的使用测试。这里不讨论黑盒测试。  白盒测试  白盒测试的基础是看程序的内部结构(代码)和可能产生的执行路径,根据内部结构来选择测试的用例,使程序在试验性运行中就能表示出尽可能多的不同行为。这个做法的基本理念就是:如果所有可能执行的路径(顺序、条件、while、for、嵌套...执行结构)都能给出正确的结果,那么程序的正确性就能得到保证。  测试函数功能案例  各类的语言都会提供单元测试的库,Python也不例外,python一般使用PyUnit(unittest)库,unittest是Python自带的单元测试框架,用于编写和运行可重复的测试,下面介绍怎么用unittest来测试函数的用法,我这里只是简单用了几个测试方法,更多测试方法请查阅官网(https://docs.python.org/3/library/unittest.html)。  3个需要测试的函数:   测试函数的方法:  输出:   assert关键字的用法  功能其实和上面测试函数用法是一样的,只不过assert可以直接使用在代码里。这个关键字也比较生僻,也没见什么场景需要用它,也就这里为了做个案例,我才用它写了个demo。  输出:   测试类功能案例  类功能的测试和函数测试一样,只不过有一个窍门就是,测试、使用类的时候都需要先实例化类,而实例化类的操作,都可以放在setUp()里面操作。  需要测试的类:   测试类的方法:   输出:   安全测试案例-短信轰炸  我前面说过,功能测试和安全测试都有同样的初衷,但是具体的测试手法两者不太一样,但是一些特定的场景下,使用单元测试的方法,也是能测试一些安全问题的,比如说测接口越权、短信接口重复导致的短信轰炸问题等。我这里只是抛砖引玉一下通过单元测试的手法来做安全测试的例子,但为做深入研究。   测试发短信函数安全的测试用例:  输出:   __main__全局变量解释  除了单元测试,设置模块的运行入口(main)也是一种测试方式,就是针对每个模块单独的调用里面的函数。__main__其实是一个全局变量,解释器发现如果该模块是被导入的,那么__main__就会被赋值为这个模块的名字,如果这个模块是作为主模块启动时,那么解释器就会给__main__赋值为“main”字符串。  总结  建议不要在程序上线的时候还带着assert、print之类的调试语句、避免信息泄露。  单元测试不单只用于功能测试,也可以用在一些特定的安全测试里(具体范围有那些,我没有研究,如果有需求的话,我可能继续深入研究)。  unittest的断言非常简单易用,基本看一眼就能懂,但是懂断言的用法,不代表你就会写测试用例,能看到程序代码的执行结构才是写出测试的关键所在。一句话就是:写断言易,看代码不易。  目前还有一种流行的开发方式叫作测试驱动开发,这种方式强调先编写测试用例,然后再编写函数和方法。也就是在开发某个功能之前,先定义好该功能的最终结果(测试用例关注函数的执行结果),然后再去开发该功能。就像建筑工人在砌墙之前,要先拉好一根笔直的绳子(作用相当于测试用例),然后再开始砌墙,这样砌出来的墙就会符合标准。所以说测试驱动开发也是一种先定义接口,后开发的模式,这样做比较规范,但是对于开发人员来说成本可能有点高,因为有些接口需要在开发的时候才知道返回什么,或者开发的时候也需要经常修改。这种预先定义开发方式,只能说优缺点各半吧。

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读