ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Selenium3自动化测试【37】单元测试Unittest(2)

2022-05-29 23:01:04  阅读:214  来源: 互联网

标签:TestSuite Selenium3 unittest 37 TestCase 测试用例 测试 test Unittest


引言

unittest是Python标准库中自带的单元测试框架。unittest可以组织执行测试用例,并且提供了丰富的断言方法,可以判断测试用例是否通过,最终生成测试结果。


同步视频知识与系列知识内容,可关注:【公众号】:柒哥测试;【WX】:Lee-890;


1. UnitTest介绍

用uinittest单元测试框架可以进行web自动化测试。
由于unittest是Python标准库中自带的单元测试框架,因此安装完Python后就存在,无需单独安装。

2.UnitTest核心要素

unittest核心的要素是TestCase,TestSuite,TextTestRunner,Fixture。

2.1 TestCase:测试用例

  • 一个TestCase就是一个测试用例。
  • 一个测试用例就是一个完整的测试流程,包括测试前环境准备(SetUp),执行测试代码(run),以及测试后环境的还原(tearDown)。
  • 一个测试用例就是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。用户定义测试用例需要继承TestCase类。

一个测试用例是在unittest中执行测试的最小单元。它通过unittest提供的assert方法来验证一组特定的操作和输入以后得到的具体响应。unittest提供了一个名称为TestCase的基础类(unittest.TestCase),可以用来创建测试用例。

2.2 TestSuite:测试套件

一个测试套件(TestSuite)是多个测试用例的集合,是针对被测程序对应的功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行。

  • TestSuite()是测试用例集合;
  • 通过addTest()方法手动把TestCase添加到TestSuite中,也可通过TestLoader把TestCase自动加载到TestSuite(TestCases之间不存在现后顺序)。

2.3 TextTestRunner:测试执行器

测试执行器负责测试执行调度并且生成测试结果给用户。
TestTestRunner是运行测试用例的驱动类,其中的run方法可以执行TestCase、TestSuite。

2.4 TextTestResult:测试报告

测试报告用来展示所有执行用例的成功或者失败状态的汇总,执行失败的测试步骤的预期结果与实际结果,还有整体运行状况和运行时间的汇总。

2.5 Fixture:测试夹具

通过使用Fixture,可以定义在单个或多个测试执行之前的准备工作和测试执行之后的清理工作。

  • 对一个测试用例环境的搭建和销毁,就是一个Fixture,通过覆盖TestCase的setUp()和tearDown()方法来实现;
  • 如在测试用例中需要访问数据库,那么可以在setUp()中建立数据库连接并进行初始化。测试用例执行后需要还原环境。 tearDown的过程很重要,要为以后的TestCase留下一个干净的环境。如在tearDown()中需要关闭数据库连接。

3. 工作流程

unittest的整个流程如下:

  1. 首先需要编写TestCase;
  2. 再把TestCase添加到TestSuite中;
  3. 再由TextTestRunner来执行TestSuite;
  4. 运行的结果保存在TextTestResult中。
    整个过程集成在unittest.main模块中。

4. UnitTest案例实战

4.1 UnitTest案例准备

通过PyCharm在工程目录下,创建UnitTestDemo的Python package,UnitTest的案例均存放在UnitTestDemo下。
1. 创建基础待测方法
在UnitTestDemo下新建mathfunc.py文件,代码如下:

加法,返回a+b的值

def add(a,b):
    return a+b

# 减法,返回a-b的值
def minus(a,b):
    return a-b

# 乘法,返回a*b的值
def multi(a,b):
    return a*b

# 除法,返回a/b的值
def divide(a,b):
    return a/b

2. 设计测试用例
为前面的测试方法设计测试用例,在UnitTestDemo下创建test_mathfunc.py,代码如下:

import unittest
from UnitTestDemo.mathfunc import *

class TestMathFunc(unittest.TestCase):
    """测试mathfunc.py"""

    def test_add(self):
        """测试加法add()"""
        self.assertEqual(3,add(1,2))
        self.assertNotEqual(3,add(2,2))

    def test_minus(self):
        """测试减法minus"""
        self.assertEqual(1,minus(3,2))

    def test_multi(self):
        """测试乘法multi"""
        self.assertEqual(6,multi(2,3))

    def test_divide(self):
        """测试除法divide"""
        self.assertEqual(2,divide(6,3))
        self.assertEqual(2.5,divide(5,2))

4.2 组织与设定测试用例的执行顺序

通过PyCharm在工程目录下,创建UnitTestDemo的Python package,UnitTest的案例均存放在UnitTestDemo下。
测试套件(TestSuite)是多个测试用例的集合,是针对被测程序的对应的功能和模块创建的一组测试。
通过TestSuite()的addTest()方法手动把TestCase添加到TestSuite中,或通过TestLoader把TestCase自动加载到TestSuite中。
1. 创建测试套件
执行单条用例调用addTest()方法,在UnitTestDemo下创建test_suite.py,代码如下:

import unittest
from UnitTestDemo.test_mathfunc import TestMathFunc

if __name__ == "__main__":
    suite = unittest.TestSuite()
    # addTest()添加单个TestCase
    suite.addTest(TestMathFunc("test_multi"))
    runner = unittest.TextTestRunner()
    runner.run(suite)

执行多条测试用例addTests()方法, test_suite.py代码如下:

import unittest
from UnitTestDemo.test_mathfunc import TestMathFunc

if __name__ == "__main__":
    suite = unittest.TestSuite()
    # addTest()添加单个TestCase
    #suite.addTest(TestMathFunc("test_multi"))
    # addTests()执行加法、减法、除法
    tests = [TestMathFunc("test_add"),TestMathFunc("test_divide"),TestMathFunc("test_minus")]
    suite.addTests(tests)
    runner = unittest.TextTestRunner()
    runner.run(suite)

精讲视频

如果你觉的文章读的不过瘾,可以查看详细的视频教程。

测试学习路线如下

热销图书

图书京东、当当有售
京东图书地址
当当图书地址
0.9733767060093851.png

同步视频知识与系列知识内容,欢迎可关注:【公众号】:柒哥测试;或【WX】:Lee-890交流

标签:TestSuite,Selenium3,unittest,37,TestCase,测试用例,测试,test,Unittest
来源: https://www.cnblogs.com/starpoint/p/16325211.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有