python unittest接口自动化测试实战_pytest测试框架从入门到精通

python unittest接口自动化测试实战_pytest测试框架从入门到精通一、unittest工作原理unittest最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixtureTestCase:用户自定义的测试case的基类,调用run()方法,会依次调用setUp方法、执行用例的方法、tearDown方法。TestSuite:测试用例集合,可以通过addTest()方法手动增加TestCase,也可以通过Test…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、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()

执行结果如下:

python unittest接口自动化测试实战_pytest测试框架从入门到精通

组织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的格式输出到页面上。

执行结果如下:

python unittest接口自动化测试实战_pytest测试框架从入门到精通

在网页中打开测试报告:

python unittest接口自动化测试实战_pytest测试框架从入门到精通

小结:

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报告。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182204.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手机APP自动化 Appium教程

    手机APP自动化 Appium教程Appium原理与安装Appium是一个移动App(手机应用)自动化工具。手机APP自动化有什么用?自动化完成一些重复性的任务比如微信客服机器人爬虫自动化测试Appium自动化方案的特点:开源免费支持多个平台支持多种类型的自动化支持多种编程语言自动化原理我们先来看一下Appium自动化的原理图这图是不是很眼熟?对啦,和Selenium原理图很像。因为Appium自动化架构就是借鉴的Selenium。大家看看这幅图,包含了3个主体部分:自动化程序

    2022年6月14日
    66
  • 向量内积/点积_两个向量的内积和外积

    向量内积/点积_两个向量的内积和外积向量内积/点积在向量空间Rn中,自然基下,向量x=(x1,…,xn)和y=(y1,…,yn)在向量空间\mathbb{R}^n中,自然基下,向量\boldsymbol{x}=(x_1,\ldots,x_n)和\boldsymbol{y}=(y_1,\ldots,y_n)在向量空间Rn中,自然基下,向量x=(x1​,…,xn​)和y=(y1​,…,yn​)的点积(dotproduct),或称内…

    2022年9月25日
    0
  • 【Python】Ubuntu修改默认Python版本

    【Python】Ubuntu修改默认Python版本查看Python版本先查看系统中有那些Python版本$ls/usr/bin/python*/usr/bin/python/usr/bin/python2-config/usr/bin/python3m/usr/bin/python2/usr/bin/python3/usr/bin/python-config/usr/bin

    2022年5月27日
    29
  • 鼠标滚轮编码器工作原理_速度编码器工作原理

    鼠标滚轮编码器工作原理_速度编码器工作原理鼠标滚轮一旦出现滚动跳动,不连贯,基本都要换,修鼠标会经常遇到,好奇之下想了解一下这个小东西的原理。滚轮一端插在这个转盘里面,我们滚动滚轮时候,转盘被带动旋转,产生脉冲信号,电脑依靠这个信号判断滚轮的旋转方向和速度。我们拆一个机械编码器来看看。就是这个小东西,特别简单有没有,一共就4个零件最左边是铁壳,上面一般会有厂家信息,安装高度,和寿命等比如这个,安装高度10毫米,寿命500万圈。PS:一般普通的鼠标,都是选用安装高度为11mm,但还是要自己量清楚。这里需要注意的是,安装

    2022年9月30日
    0
  • 深入解析 Java集合类ArrayList与Vector的区别

    深入解析 Java集合类ArrayList与Vector的区别集合类分为两个分支,Collection与Map,其中Collection接口继承了Iterator接口,继承Iterator接口的类可以使用迭代器遍历元素(即Collection接口的类都可以使用),今天我们从相同点、不同点、以及JDK源码等各个方面来深入解析下,底层使用数组实现的两个集合类:ArrayList与Vector的区别与联系区别与联系:1.ArrayList出现于jdk1…

    2022年5月20日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号