Python学习20 :类和对象和unittes测试框架

什么是单元测试?

  • 指对软件中的最小可测试单元进行检查和验证
  • 单元:函数或者类
  • 单元测试:测试类或者函数

为什么要做单元测试?

  • 便于后期重构
  • 优化设计
  • 文档记录
  • 具有回归性
  • 投入小,收益大,能够精准的更早的发现问题

单元测试和测试人员有什么关系?

  • python 很难测试 java 的单元
  • 关键是单元测试一般是开发或者测试开发做的

测试有哪些?

  1. 集成测试**
  • 在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试
  1. 系统测试
  • 系统测试,英文是System Testing。是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方
  1. 验收测试
  • 验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动

单元测试框架:

  • 内置的单元测试框架:unittest

unittest注意事项:

  • 模块名称 test_
  • 类名 test…
  • 测试用例的方法名称 test_…
  • TestLogin(unittest.TestCase

unittest 测试用例执行顺序

  • 不是从上到小
  • 根据测试用例的名称 ===>> ASCII
'''
测试登陆功能(函数)
'''
#coding=utf-8

import unittest

def login(username = None,password = None):
    #登陆'''
    if (not username) or (not password):
        #登陆名or密码为空
        return {'msg':'empty'}
    if username == 'csdn' and  password == '123456':
        #登陆名和密码正确
        return {'msg':'success'}

    return {'msg':'error'}


def login(username = None,password = None):
    if (username != None) and (password != None):
        if username == 'csdn' and  password == '123456':
            return  {'msg':'success'}
        else:
            return {"msg": "username or password error"}

    else:
        return {"msg": "username or password error"}


#测试用例编写:
class TestLogin(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print ("一个测试类只执行一次的前置")

    @classmethod
    def tearDownClass(cls):
        print ("一个测试类只执行一次的后置")

    def setUp(self):
        """前置"""
        print("链接数据库")

    def tearDown(self):
        """后置"""
        print("断开数据库")
        
    def test_login_success(self):
        username = "csdn"
        password = "123456"
        expected_response = {"msg": "success"}
        # 调用被测试的单元,
        actual_response = login(username, password)
        #判断预期结果和实际结果是否存在某种关系 , 断言 assert
        self.assert_(expected_response == actual_response)

    def test_login_error(self):
        username = ""
        password = ""
        expected_response = {"msg": "username or password error"}
        # 调用被测试的单元,
        actual_response = login(username, password)
        # 判断预期结果和实际结果是否存在某种关系 , 断言 assert
        self.assert_(expected_response == actual_response)

if __name__ == '__main__':
    # 使用 python 运行这个模块里面的测试用例
    unittest.main()

用例执行

  1. 右击unittest 运行
  2. python 运行 unittest.main()
  3. 运行所有的测试用例

用例的组织

  1. 会把测试用例的代码放到一个统一的文件夹当中,目录当中
  2. tests / testcases

收集用例

  • 需要把每个测试用例模块当中的测试用例收集到一起,一起执行

运行用例的流程

  1. 写用例方法。用例方法当道一个目录当中
  2. 写脚本run.py ( 收集用例,运行用例)
  3. loader 收集用例 ,suite = discover()
  4. 得到测试集 suite
  5. 运行, test_runner = HTMLTestRunner()

Excel操作

  • 通过 python 操作 Excel,是因为现在主流的测试用例的数据是写在 Excel 当中的。
    Excel 是一种比较规范的数据格式。
  • 自动化测试的用例数据:excel, csv, yaml

读取Excel步骤

  1. 打开文件,得到一个workbook
  2. 选择表单
  3. 通过行列读取数据
""运行程序脚本
- 收集所有的测试用例
- 执行所有的测试用例
- 生成测试报告
"""

#coding=utf-8
import unittest
import  os

#初始化一个加载器  test_loader
from HTMLTestRunnerNew import HTMLTestRunner

from class16_test.test import test_login,test_register
loader = unittest.TestLoader()

#获取测试用例目录的路径
dir_path = os.path.abspath(__file__)
case_path = os.path.join(dir_path,"test")

# 使用 loader 收集所有的测试用例
test_suit = loader.discover(case_path)
print(test_suit)

# 只加载注册的和登录的用例
suit_login = loader.loadTestsFromModule(test_login)
suit_register = loader.loadTestsFromModule(test_register)

# 初始化一个 suite
suit_total = unittest.TestSuite()
suit_total.addTests([suit_login, suit_register])

# 执行测试用例
runner = unittest.TextTestRunner()
runner.run(test_suit)

#生成测试报告
with open("test_reports.txt", 'w', encoding='utf-8') as f:
    runner = unittest.TextTestRunner(f)
    runner.run(test_suit)


#或者自己准备一个HTML 测试报告模版, 不是内置。是需要自己准备的。
with open("test_reports.html", 'wb') as f:
    runner = HTMLTestRunner(
        f,
        title='python29期第一次测试报告',
        description="测试报告的描述",
        tester='yuz'
    )
    runner.run(suit_total)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值