练习unittest+Fixture实现

练习01

  1. 创建⼀个⽬录 case, 作⽤就是⽤来存放⽤例脚本,
  2. 在这个⽬录中创建 5 个⽤例代码⽂件 , test_case1.py
  3. 使⽤ TestLoader 去执⾏⽤例
    将来的代码 ⽤例都是单独的⽬录中存放的
    test_项⽬_模块_功能.py

在这里插入图片描述

test_case1.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法1')

test_case2.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法2')

test_case3.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法3')

test_case4.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法4')

test_case5.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法5')

hm_05_test.py

# 1. 导包 unittest
import unittest
# 2. 实例化套件对象 unittest.TestSuite()
suite = unittest.TestLoader().discover('case', 'test*.py')
# 3.实例化执行对象并执行
unittest.TextTestRunner().run(suite)

TestLoader()
链接: http://t.csdnimg.cn/lLkts

练习02

  1. 定义⼀个 tools 模块, 在这个模块中 定义 add 的⽅法,可
    以对两个数字求和,返回求和结果

  2. 书写⽤例, 对 add() 函数进⾏测试 1, 1, 2 1, 2, 3 3, 4, 7 4, 5, 9
    之前的测试⽅法,直接⼀个 print 这个案例中的 测试⽅法,调⽤ add 函数, 使⽤ if 判断,来判断 预期结果和实际结果是否相符 预期结果 2 3 7 9 实际结果 调⽤ add()

在这里插入图片描述

hm_06_test_add.py

# 1. 导包 unittest
import unittest

from tools import add

# 2. 定义测试类, 只要继承 unittest.TestCase 类
class TestAdd(unittest.TestCase):
    #3.书写测试方法
    def test_1(self):
        """1,1,2"""
        if 2 == add(1, 1):
            print(f'用例 {1}, {1}, {2}通过')
        else:
            print(f'用例 {1}, {1}, {2}不通过')

    def test_2(self):
        if 3 == add(1, 2):
            print(f'用例 {1}, {2}, {3}通过')
        else:
            print(f'用例 {1}, {2}, {3}不通过')

    def test_3(self):
        if 7 == add(3, 4):
            print(f'用例 {3}, {4}, {7}通过')
        else:
            print(f'用例 {3}, {4}, {7}不通过')

    def test_4(self):
        if 9 == add(4, 5):
            print(f'用例 {4}, {5}, {9}通过')
        else:
            print(f'用例 {4}, {5}, {9}不通过')

hm_07_add.py

# 套件和执行
# 1. 导包 unittest
import unittest

from hm_06_test_add import TestAdd
# 2. 实例化套件对象 unittest.TestSuite()
suite = unittest.TestSuite()
# 将 TestAdd 类中的所有测试方法添加到测试套件中
suite.addTest(unittest.makeSuite(TestAdd))
# 使用 TextTestRunner 运行测试套件中的所有测试用例,并将结果输出到标准输出(控制台)
unittest.TextTestRunner().run(suite)

当我们分解这行代码时,我们可以看到它包含了几个关键部分:

  1. unittest.makeSuite(TestAdd): 这部分调用了 unittest 模块中的 makeSuite 函数,它的作用是创建一个测试套件(TestSuite)。makeSuite 函数接受一个测试类作为参数,并自动收集该类中所有以 test 开头的测试方法,并将它们添加到测试套件中。

  2. TestAdd: 这部分是一个测试类的名称,表示我们要将哪个测试类中的测试方法添加到测试套件中。在这个例子中,TestAdd 是一个自定义的测试类。

  3. suite.addTest(...): 这部分是将测试用例(test case)添加到测试套件中的方法。addTest 方法接受一个测试用例对象作为参数,并将其添加到测试套件中。在这个例子中,makeSuite(TestAdd) 返回了一个包含 TestAdd 类中所有测试方法的测试套件,然后我们通过 addTest 方法将这个测试套件添加到另一个测试套件中。

综上所述,suite.addTest(unittest.makeSuite(TestAdd)) 这行代码的作用是将 TestAdd 类中的所有测试方法添加到一个测试套件中。

htools.py

#函数的调用
def add(a, b):
    return a + b

Fixture

⽅法级别 Fixture

在每个⽤例执⾏前后都会⾃动调⽤, ⽅法名是固定的

def setUp(self): # 前置
 # 每个⽤例执⾏之前都会⾃动调⽤
 pass
def tearDown(self): # 后置
 # 每个⽤例执⾏之后 都会⾃动调⽤
 pass
# ⽅法前置 ⽤例 ⽅法后置
# ⽅法前置 ⽤例 ⽅法后置

类级别 Fixture

在类中所有的测试⽅法执⾏前后 会⾃动执⾏的代码, 只执⾏⼀次

# 类级别的 Fixture 需要写作类⽅法
@classmethod
def setUpClass(cls): # 类前置
 pass
@classmethod
def tearDownClass(cls): # 后置
 pass

模块级别Fixture(了解)

模块, 就是代码⽂件
模块级别 在这个代码⽂件执⾏前后执⾏⼀次

# 在类外部定义函数
def setUpModule():
 pass
def tearDownModule():
 pass

Fixture实现

tpshop 登录

  1. 打开浏览器 (⼀次)
  2. 打开⽹⻚,点击登录 (每次)
  3. 输⼊⽤户名密码验证码1,点击登录 (每次, 测试⽅法)
  4. 关闭⻚⾯ (每次)
  5. 打开⽹⻚,点击登录 (每次)
  6. 输⼊⽤户名密码验证码2,点击登录 (每次, 测试⽅法)
  7. 关闭⻚⾯ (每次)
  8. 打开⽹⻚,点击登录 (每次)
  9. 输⼊⽤户名密码验证码3,点击登录 (每次, 测试⽅法)
  10. 关闭⻚⾯ (每次)
  11. 关闭浏览器 (⼀次)

在这里插入图片描述

import unittest
class TestLogin(unittest.TestCase):
 def setUp(self) -> None:
 print('2. 打开⽹⻚, 点击登录')
 def tearDown(self) -> None:
 print('4. 关闭⽹⻚')
 @classmethod
 def setUpClass(cls) -> None:
 print('1. 打开浏览器')
 @classmethod
 def tearDownClass(cls) -> None:
 print('5. 关闭浏览器')
 def test_1(self):
 print('3. 输⼊⽤户名密码验证码1,点击登录 ')
 def test_2(self):
 print('3. 输⼊⽤户名密码验证码2,点击登录 ')
 def test_3(self):
 print('3. 输⼊⽤户名密码验证码3,点击登录 ')
  • 32
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值