Python自动化- 20210527 - 自动化1 unittest框架

本文详细介绍了Python unittest库的基础概念,包括testcase的编写、testsuite和testloader的使用,以及fixture的巧妙运用。通过实例讲解如何对login函数进行测试,涵盖了断言、测试数据和测试报告的生成。
摘要由CSDN通过智能技术生成

unitest的基本概念

1. test case. 测试用例

# 被测函数
def Add (a,b):
    return a+b
"""
1、导包,是python的内置函数,因此不需要下载,可直接导入
2、编写一个类,继承unittest.TestCase类
3、编写测试逻辑
4、调用TestCase已经实现的断言,实现单元测试的判断
5、运行(直接运行py文件,运行类,运行测试方法,运行main函数)都可以
"""
import unittest
class TestAdd(unittest.TestCase):
    def test_add_ture(self):
        res =Add(3,4)
        expr =7
        self.assertTrue(res,expr)

if __name__ == '__main__':
    unittest.main()

2. test suite 测试套件

3. test loader 测试加载

4. test runner 测试执行

import unittest
# 初始化测试套件,存储所有的测试用例
from unittestreport import TestRunner

suite=unittest.TestSuite()
# 加载并发现所有的测试用列,目录下文件名称以test开头,测试函数以test开头的所有测试方法
cases=unittest.TestLoader().discover(r"/Users/zhouna/PycharmProjects/pythonProject/study/")
# 将用例添加到suite中
suite.addTest(cases)

# 第二种方式
suite=unittest.defaultTestLoader.discover(r"/Users/zhouna/PycharmProjects/pythonProject/study/")

# 运行用例
# unittest.TextTestRunner().run(suite)

# 测试报告
import unittestreport
runner=TestRunner(suite).run()

5. fixture 夹具

'''
	1、以下的方法是定义在class类的下面,类需要继承unnittest
	2、后面的-> None 是指方法的返回值。说明这些方法都没有返回值
	3、可以将这些方法好好利用,用作测试用例前的造数据啊等等,或者测试用例用关闭浏览器啊 清理数据的工作,避免冗余代码
'''
    def setUp(self) -> None:
        print("每个测试方法执前 执行")

    def tearDown(self) -> None:
        print("每个测试方法执后 执行")
        
	@classmethod
    def setUpClass(cls) -> None:
        print("每个测试类前执行 执行")
        
    @classmethod
    def tearDownClass(cls) -> None:
        print("每个测试类后执行 执行")

练习

def login(username=None, password=None):
if username is None or password is None:
return {“code”: “400”, “msg”: “用户名或密码为空”}
if username == ‘yuz’ and password == ‘123’:
return {“code”: “200”, “msg”: “登录成功”}
return {“code”: “300”, “msg”: “用户名或密码错误”}

  • 1,使用 unittest 对上面的函数进行测试
  • 2, 在 login.py 文件中保存上面的函数
  • 3,在 test_login.py 文件中编写测试用例函数,根据需求设计多个用例函数。
  • 4,在 run_test.py 文件中收集用例,并使用 unittestreport 或者 beautifulreport 完成测试报告生成。
# login文件
# 被测函数 --login.py
def login(username=None, password=None):
    if username is None or password is None:
        return {"code": "400", "msg": "用户名或密码为空"}
    if username == 'yuz' and password == '123':
        return {"code": "200", "msg": "登录成功"}
    return {"code": "300", "msg": "用户名或密码错误"}

# 测试用例文件 test_login.py


import unittest
import unittestreport

from study.login import login

ture_data = [{"username": "yuz", "password": "123"}]

# 未对长度做控制,暂不测试
false_data = [{"username": "yuz", "password": "1234"},  # 用户名正确,密码不正确
              {"username": "yuzz", "password": "1234"},  # 用户名不正确,密码正确
              {"username": "", "password": "123"},  # 用户名为空,密码正确
              {"username": "yuz", "password": ""},  # 用户名正确,密码为空
              {"username": "", "password": ""},  # 用户名为空,密码为空
              {"username": "zz", "password": "qaz"},  # 输入不存在的用户名密码
              {"username": "!!~", "password": "123"},  # 验证用户名是否支持特殊字符,
              {"username": "yuz", "password": "!!!"},  # 验证密码是否支持特殊字符
              ]
exspr_data = [{"code": "300", "msg": "用户名或密码错误"},
              {"code": "400", "msg": "用户名或密码为空"},
              {"code": "200", "msg": "登录成功"}]

class TestLogin(unittest.TestCase):
    def test_login_ture(self):
        res = login(ture_data[0]["username"], ture_data[0]["password"])
        self.assertEqual(exspr_data[2], res)

    def test_login_false(self):
        for i in false_data:
            if i['username'] is None or i['password'] is None:
                res = login(i["username"], i["password"])
                self.assertEqual(exspr_data[1], res)
            else:
                res = login(i["username"], i["password"])
                self.assertEqual(exspr_data[0], res)

# test_suite.py

import unittest
from unittestreport import TestRunner
suite=unittest.defaultTestLoader.discover(r"/Users/zhouna/PycharmProjects/pythonProject/study/")
runner=TestRunner(suite,templates=2).run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值