selenium自动化测试-unittest框架

本文详细介绍了unittest框架在Python中的应用,包括如何组织测试用例,使用TestCase和TestSuite进行结构化测试,以及如何利用Fixture进行测试环境管理。还涉及了测试执行、断言方法和跳过测试等关键概念。
摘要由CSDN通过智能技术生成

unittest框架的优点

(1)能够组织多个用例去执行
(2)提供丰富的断言方法
(3)能够生成测试报告

unittest框架的核心要素

1. TestCase测试用例

TestCase(测试用例),最小的测试单元,创建的测试类需要继承该基类

步骤:

(1)导包import unittest

(2)新建测试类并继承unittest.TestCase

(3)测试方法必须以test字母开头

运行:

(1)运行测试类的所有测试方法,光标定位到类当前行右键运行

(2)运行单个测试方法,光标放到测试方法当前行

下面以自定义的计算器cal01.py进行测试,测试代码test_cal01.py

#cal01.py
# """自定义计算器"""
#被测试部分+-*/
def my_add(a,b):
    return a+b
def my_sub(a,b):
    return a-b
def my_mul(a,b):
    return a*b
def my_div(a,b):
    return a/b
#test_cal01.py
from cal01 import *
import unittest
class MyTest(unittest.TestCase):#MyTest继承unittest.TestCase
    def test_add01(self):
        assert 3==my_add(1,2)
    def test_add02(self):
        assert 3.0==my_add(1.0,2)
    def test_add03(self):
        assert 3.0==my_add(1.0,2.0)

在类MyTest上运行,执行当前类下的所有测试方法

在test_add01上运行,执行当前测试方法

2. TestSuite测试套件

TestSuite(测试套件) 多条测试用例集合在一起,就是一个TestSuite

使用addtest()方法将测试用例添加到测试套件中

步骤:

(1)导包 import unittest

(2)实例化 suite = unittest.TestSuite()

(3)添加用例

suite.addTest(ClassName(“methodName”))#添加单个测试方法 suite.addTests([ClassName1(“methodName1”),ClassName2(“methodName2”)])#添加多个测试方法

TestSuite需要配合TestRunner才能被执行

3. TestRunner 测试执行器

步骤:

(1)导包 import unittest

(2)实例化 runner = unittest.TextTestRunner()

(3)执行 runner.run(suite) #suite:测试套件名称

下面执行test_cal01.py中,在测试套件中加入test_add03和test_add01,并执行

#testsuite01.py
import unittest
from test_cal01 import MyTest
suite =unittest.TestSuite()#实例化测试测试套件
suite.addTest(MyTest("test_add03"))#添加测试用例————添加单个测试方法
suite.addTest(MyTest("test_add01"))
# suite.addTests([MyTest("test_add03"),MyTest("test_add01")])
runner = unittest.TextTestRunner()#实例化
runner.run(suite)#suite:测试套件名称

4. TestLoader 测试装载器

使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下指定开头的.py文件

假设当前目录下有n个文件,命名格式为testCal01.py~testCal99.py

#testloader01.py
import unittest
suite=unittest.TestLoader().discover("./",pattern='testCal*.py')
runner=unittest.TextTestRunner().run(suite)

5. Fixture 测试固件

对测试环境进行初始化和销毁

(1)方法级别           def setUp() / def tearDown()  

几个测试函数,执行几次,每个测试函数执行之前都会执行setUp,执行之后都会执行setDown

(2)类级别               def setUpClass() / def tearDownClass()   

测试类运行之前运行一次setUpClass类运行之后运行一次tearDownClass

注意:类方法必须使用@classmethod修饰

(3)模块级别           def setUpModule() / def tearDownModule()   

特性:模块运行之前执行一次setUpModule,运行之后运行一次tearDownModule

#test_fixture.py
from cal01 import *
import unittest
class MyTest(unittest.TestCase):#MyTest继承unittest.TestCase
    def setUp(self):
        print("方法初始化执行")
    def tearDown(self):
        print("方法结束执行")
    @classmethod
    def setUpClass(cls):
        print("类初始化执行")
    @classmethod
    def tearDownClass(self):
        print("类结束执行")
    def test_add01(self):
        assert 3==my_add(1,2)
    def test_add02(self):
        assert 3.0==my_add(1.0,2)
    def test_add03(self):
        assert 3.0==my_add(1.0,2.0)

附1.运行测试用例的结果

unittest默认根据ASCII码值顺序加载测试用例 (数字与字母的顺序为0~9,A~Z,a~z) 不是按照测试用例的创建顺序从上到下执行

可以由测试套件TestSuite类的addTest()方法添加测试用例控制顺序

附2.测试运行的结果表示

. :一条运行通过的测试用例

F:一条运行失败的测试用例

s:一条运行跳过的测试用例

E:一条运行错误的测试用例

附3.测试断言

断言方法由TestCase父类提供,所以要用self调用

self.assertEqual(a,b)    #判断a==b

self.assertIn(a,b)        #b是否包含a 注意:包含不能跳字符

self.assertTrue(a)        #判断a是否为True

附4.测试跳过

使用方式:(可以修饰方法,也可以修饰类)

#直接将测试函数标记为跳过

@unittest.skip("代码未完成")

#根据条件判断测试函数是否跳过

@unittest.skipIf(condition,reason)

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值