• 0
  • 0
分享
  • python unittest自动化测试框架总结——软件测试圈
  • TIMI 2022-06-15 10:58:50 字数 3636 阅读 2135 收藏 0

一、unittest工作原理

unittest最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture

TestCase:用户自定义的测试case的基类,调用run()方法,会依次调用setUp方法、执行用例的方法、tearDown方法。

TestSuite:测试用例集合,可以通过addTest()方法手动增加Test Case,也可以通过TestLoader自动添加Test Case,TestLoader在添加用例时,会没有顺序。

TestRunner:运行测试用例的驱动类,可以执行TestCase,也可以执行TestSuite,执行后TestCase和TestSuite会自动管理TESTResult。

TestFixture:简单来说就是做一些测试过程中需要准备的东西,比如创建临时的数据库,文件和目录等,其中setUp()和setDown()是最常用的方法

整个的流程就是首先要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TestTestRunner来运行TestSuite,运行的结果保存在TextTestReusult中,整个过程集成在unittest.main模块中。

二、例子如下:

创建一个函数集mathfunc.pyc

def add(a,b):
    return a+b
 
def minus(a, b):
    return a-b
 
def multi(a, b):
    return a*b
 
def divide(a, b):
    return a/b

接下来是为这些方法写的一个测试:

test_mathfunc.py

# -*- coding: utf-8 -*-
 
import unittest
from mathfunc import *
 
class TestMathFunc(unittest.TestCase):
 
    def setUp(self):
        print "do something befor test.prepare environment"
 
    def tearDown(self):
        print "do something after test.Clean up"
 
    def test_add(self):
        self.assertEqual(3,add(1,2))
        self.assertNotEqual(3,add(2,2))
 
    @unittest.skip("i don't want to run this case")
    def test_minus(self):
        self.assertEqual(1,minus(3,2))
 
    def test_multi(self):
        self.assertEqual(6,multi(2,3))
 
    def test_divide(self):
        self.assertEqual(2,divide(6,3))
        self.assertEqual(2.5,divide(5,2))
 
if __name__ == '__main__':
    unittest.main()

执行结果如下:

1.png

组织TestSuite

上面的代码演示了如何编写一个简单的测试,下面说一下怎么控制用例执行的顺序。我们就要用到TestCase,添加到TestCaseDE中的case是会按照添加的顺序执行的。

来个例子:

在文件夹中再新建一个文件。test_suite.py

# -*- coding: utf-8 -*-
 
import unittest
from test_mathfunc import TestMathFunc
 
if __name__ == '__main__':
    suite = unittest.TestSuite()
 
    tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]
    suite.addTests(tests)
 
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

执行情况跟我们预料的一样,执行了三个case,并且顺序是按照我们添加进去suite的顺序执行的。

将结果输出到文件中

修改test_suite.py

# -*- coding: UTF-8 -*-
 
import unittest
from test_mathfunc import TestMathFunc
from HTMLTestRunner import HTMLTestRunner
 
if __name__ == '__main__':
    suite = unittest.TestSuite()
 
    #使用这种方法可以对测试用例排序
    #tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]
    #suite.addTests(tests)
    
    #使用TestLoader的方法传入TestCase
    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestMathFunc))
 
    #在同目录下生成txt格式的测试报告
    #with open('UnittestTextReport.txt', 'a') as f:
        #runner = unittest.TextTestRunner(stream=f, verbosity=2)
        #runner.run(suite)
 
    with open('HTMLReport.html','w') as f:
        runner = HTMLTestRunner(stream = f,
                                title = u'测试报告',
                                description = u'测试用例的执行情况',
                                verbosity = 2
                                )
        runner.run(suite)

执行此文件,可以看到,在同目录下生成了一个TXT文件;也可以把测试结果以html的格式输出到页面上。

执行结果如下:

2.png

在网页中打开测试报告:

3.png

小结:

1、unittest是python自带的单元测试框架,可以用来作为我们自动化测试框架的用例组织执行框架

2、unittest流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。

3、一个class继承unittest.TestCase即是一个TestCase,其中以 test 开头的方法在load时被加载为一个真正的TestCase。

4、verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告。

5、可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。

6、用 setUp()、tearDown()、setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境

7、我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。

8、参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。


作者:何烨坪Echo

原文链接:https://blog.csdn.net/heye13/article/details/81627538


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 读者提问:回归测试怎么做 ?阿常回答:这个问题我分两点回答1、什么是回归测试2、怎么做回归测试一、什么是回归测试有些同学对于冒烟测试和回归测试拎不清,冒烟测试与回归测试是有区别的,下面阿常分别和大家说说两者的区别。冒烟测试,是新编译的版本在进行正式测试之前,进行预测试来确保软件的基本功能是正常的。回归测试,是正式测试过程中,对已修复的问题或软件环境发生改变后进行的测试,一般是验证已修复的问题及测试问题相关联模块。二、怎么做回归测试回归测试策略如下:1、全面回归测试--每一个大版本的发布,或者一次较大规模的调整,都需要在预发布环境做一次全面的回归测试。2、选择性回归测试--小版本的迭代...
            0 0 1424
            分享
          •   之所以写这一篇文章,是突然想起来曾经在测试过程中被开发嘲讽过,事情是这样的,当时发现了一个疑似前端的Bug就草草提交到了禅道,结果刚来的女前端看到了就有点生气地问我为啥不查清到底是前后端问题就直接派给她前端了,因为那个问题其实是后端的。而且她还抛出了一句,她们以前公司的测试都是能准确分清前后端的问题再指派的。从那之后我就长了个记性,凡是遇到的Bug都尽量搞清楚到底是前后端哪边的问题再具体指派到开发。相信很多人应该也有过类似的经历,但是可能为了快速测试或者因为不太会定位前后端问题而直接将Bug随便挂到了某个开发头上,聪明一点的呢直接挂到了开发组长头上让他重新指派!其实这样对自身的成长以及塑造...
            0 0 772
            分享
          • 新浪科技讯北京时间9月15日早间消息,腾讯音乐在港交所发布公告称,已获得在港交所主板二次上市的原则性批准,将以介绍方式于香港联合交易所有限公司主板上市。公告还显示,腾讯音乐A类普通股预期将于9月21日开始在香港联交所买卖,股票代码“1698”。摩根大通和高盛公司为此次上市的联系保荐人。据悉,今年上半年,贝壳、蔚来汽车等中概企业也采用介绍上市方法成功登陆港股。招股书显示,腾讯音乐2019年-2021年营收分别为:254亿元、292亿元、312亿元。该公司2019年-2021年净利润分别为40亿元、42亿元、32亿元。此外,据其8月16日发布的最新财报数据,腾讯音乐2022年第二季度的非国际财务报...
            0 0 1393
            分享
          •   背景:  用jmeter录制或者书写接口或性能测试的脚本,用maven添加相关依赖,本地eclipse测试通过后,放到jenkins上执行反馈结果给测试负责人实时查看执行结果。  1、环境搭建  "下载安装 jdk1.7或jdk1.8并配置环境变量  "Eclipse v4.5  "下载安装jenkins.rpm安装到linux或本地tomcat搭建安装jenkins.war  "下载maven 3.1.x或3.2.x或3.3.x并进行解压,配置本地和jenkins环境变量  "下载jmeter3.1并解压  2、准备性能测试的脚本  1)...
            1 1 3147
            分享
          • 作为软件开发从业者,API 调试是必不可少的一项技能,在这方面 Postman 做的非常出色。但是在整个软件开发过程中,API 调试只是其中的一部分,还有很多事情 Postman 无法完成,或者无法高效完成,比如:API 文档定义、API Mock、API 自动化测试等等。Apifox 就是为了解决这个问题而生的。接口管理现状一、常用解决方案使用 Swagger 管理 API 文档使用 Postman 调试 API使用 MockJs 等工具 Mock API 数据使用 JMeter 做 API 自动化测试二、存在的问题维护不同工具之间数据一致性非常困难、低效。并且这里不仅仅是工作量的问题,更大...
            14 14 1864
            分享
      • 51testing软件测试圈微信