day15

unittest框架:

import unittest
import json
# 是python内置的单元测试框架(模块),不仅可以完成单元测试,也适用于自动化测试中。
# unittest提供了丰富的断言方法,判断测试用力是否通过,然后生成测试结果报告

# class Mycase(unittest.TestCase):
#     def runTest(self):
#         print('我是一个聪明的人')
#     def bbb(self):
#         print('我是一个笨比')
#
# my_case=Mycase(methodName='bbb')
# my_case.run()


# setUP和tearDown
# setUP每条用例执行之前,一般做初始化的配置
# tearDown每条用例执行之后,一般做收尾工作


# class Mycase(unittest.TestCase):
#
#     def setUp(self) -> None:
#         print('我需要优先完成什么')
#
#     def runTest(self):
#         print('我是一个聪明的人')
#
#     def tearDown(self) -> None:
#         print('gogogo')
#
#     def bbb(self):
#         print('我是一个笨比')
#
#     def test(self):
#         print('我是女警察')
#
#     def test1(self):
#         print('小偷站住别跑')
#
# if __name__=='__main__':
#     unittest.main()




# class TestAssert(unittest.TestCase):
#     def setUp(self) -> None:
#         print('我需要优先完成什么')
#
#
#     def tearDown(self) -> None:
#         print('gogogo')
#
#     def test1(self):
#         self.assertTrue('1',msg='不为真')
#
#     def test2(self):
#         self.assertEqual(1,2,msg='1==1')
#
#     def test(self):
#         a={'code':200,'msg':'登录成功'}
#         # b='code'
#         # a=json.dumps(a)
#         b=200
#         # self.assertIn(b,a,msg='断言信息备注')
#         self.assertIn(b,a.values(),msg='断言信息备注')
#
# # if __name__ == '__main__':
# unittest.main()



# self.testMethodName 返回用例(当前方法)的名字
# self.testMethodDoc 返回用例(当前方法)的备注信息

class TestH(unittest.TestCase):
    def test_z(self):
        print('小豆丁')
        print('123',self.testMethodName)
        print('456', self.testMethodDoc)
    def test_a(self):
        print('小黄人')
        print('666', self.testMethodName)
        print('777', self.testMethodDoc)
    def test_A(self):
        print('test_A')

    def test_Z(self):
        print('test_Z')

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




# 来看看unittest为我们提供了哪些断言方法吧!
#
# unittet.TestCase提供了一些断言方法用来检查并报告故障。
#
# 下表列出了最常用的方法:
#
# Method   Checks that    description    New in
# assertEqual(a, b, msg)   a == b 如果a不等于b,断言失败
# assertNotEqual(a, b, msg)    a != b 如果a等于b,断言失败
# assertTrue(x, msg)   bool(x) is True    如果表达式x不为True,断言失败
# assertFalse(x, msg)  bool(x) is False   如果表达式x不为False,断言失败
# assertIs(a, b, msg)  a is b 如果a is not 2,断言失败  3.1
# assertIsNot(a, b, msg)   a is not b 如果a is b,断言失败  3.1
# assertIsNone(x, msg) x is not None  如果x不是None,断言失败 3.1
# assertIn(a, b, msg)  a in b 如果a not in b,断言失败  3.1
# assertNotIn(a, b, msg)   a not in b 如果a in b,断言失败  3.1
# assertIsInstance(a, b, msg)  isinstance(a, b)   如果a不是b类型,断言失败  3.2
# assertNotIsInstance(a, b, msg)   not isinstance(a, b)   如果a是b类型,断言失败   3.2

TestSuite
# TestSuite是一个测试套件,简单理解为承载多个用力的集合,或者把它想象成一个盒子
# 把用例添加到盒子中,然后去找一个执行器,去执行盒子中的测试用例
# 我们需要:
# 1.实例化所有的用例
# 2.创建一个容器
# 3.将用例添加到容器中
# 4.收集用例完毕,使用执行器来执行容器中的用例

import unittest
class Mycase(unittest.TestCase):
    def test_upper(self):
        self.assertTrue('FPP'.isupper())

    def test_lower(self):
        self.assertTrue('fPP'.islower()) #断言失败就会返回值F


if __name__=='__main__':
    #实例化所有的用例
    case1=Mycase(methodName='test_upper')
    case2 =Mycase(methodName='test_lower')
    #创建一个容器
    ha=unittest.TestSuite()
    #3.将用例添加到容器中
    # ha.addTest(case1)
    # ha.addTest(case2)

    # ha.addTests([case1,case2])
    # ha.addTests((case1, case2))
    #4.收集用例完毕,使用执行器来执行容器中的用例
    runner=unittest.TextTestRunner()
    runner.run(ha)

    #查看盒子中有多少用例
    print(12,ha.countTestCases())

TestLoader
# 1.loadTestsFromModule  #发现其他目录中的脚本文件
# 1.首先目录bicultural是一个包,带有__init__的文件
# 2.找到执行模板下面unittest.TestCase子类,获取其中test开头的用例


import unittest
from log import test_case


if __name__=='__main__':

    suite=unittest.TestLoader().loadTestsFromModule(test_case)
    unittest.TextTestRunner(verbosity=2).run(suite)

discover
import os
from HTMLTestRunner import HTMLTestRunner
import unittest
# os.path.abspath(__file__) #拿到当前脚本的绝对路径
#
# os.path.dirname(os.path.abspath(__file__))#拿到当前脚本文件的绝对路径
#
# print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

TEST_CASE_DIR=os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'test_case')
# print(TEST_CASE_DIR)#获取包名位置v


suite=unittest.TestLoader().discover(
    start_dir=TEST_CASE_DIR, #起始目录
    pattern='tes*.py',#规则
    # top_level_dir=TEST_CASE_DIR  #顶级目录
)
f=open('../report/Areport.html','wb')
HTMLTestRunner(
    stream=f,
    title='自动化测试报告',
    description='测试报告的描述',
    verbosity=2

).run(suite)
# unittest.TextTestRunner(verbosity=2).run(suite)

# verbosity=2  详细模式,会显示来自哪个用例哪个方法  1 默认模式,通过之后显示.,失败之后显示F  0 精简模式,通过之后没提示,不显示.

6.setUpClass和tearDownClass
import unittest
class TestAssert(unittest.TestCase):
    def setUp(self) -> None:
        print('我需要优先完成什么')


    def tearDown(self) -> None:
        print('gogogo')

    def test1(self):
        self.assertTrue('1',msg='不为真')

    def test2(self):
        self.assertEqual(1,2,msg='1==1')

    def test(self):
        a={'code':200,'msg':'登录成功'}
        # b='code'
        # a=json.dumps(a)
        b=200
        # self.assertIn(b,a,msg='断言信息备注')
        self.assertIn(b,a.values(),msg='断言信息备注')
    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例执行之前只执行一次,我就要处理的事情')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例执行后,只执行一次,我需要处理的事情')

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

7.skip跳过用例
import unittest
class TestAssert(unittest.TestCase):

    @unittest.skip('无条件跳过')
    def test1(self):
        self.assertTrue('1',msg='不为真')

    def test2(self):
        self.assertEqual(1,1,msg='1==1')

    @unittest.skipIf(condition=3>2,reason='满足条件跳过')
    def test(self):
        a={'code':200,'msg':'登录成功'}
        # b='code'
        # a=json.dumps(a)
        b=200
        # self.assertIn(b,a,msg='断言信息备注')
        self.assertIn(b,a.values(),msg='断言信息备注')


# if __name__ == '__main__':
unittest.main(verbosity=2)

邮件

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

# 第三方 SMTP 服务
mail_host = "smtp.qq.com"  # 设置服务器
mail_user = "1057324156@qq.com"  # 用户名
mail_pass = "bjhjabrxgheqbffb"  # 获取授权码
sender = '1057324156@qq.com'  # 发件人账号
receivers = ['2621623235@qq.com']  # 接收邮件(可以多个),可设置为你的QQ邮箱或者其他邮箱
# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("我是发件人", 'utf-8')  # 发件人
message['To'] = Header("我是收件人", 'utf-8')   # 收件人

subject = 'Python发送带附件的邮件示例'
message['Subject'] = Header(subject, 'utf-8')

# 邮件正文内容
send_content = 'hi man,你收到附件了吗?'
content_obj = MIMEText(send_content, 'plain', 'utf-8')  # 第一个参数为邮件内容
message.attach(content_obj)

# 构造附件1,发送当前目录下的 t1.txt 文件
att1 = MIMEText(open('7.skip跳过用例.py', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件附件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="7.skip跳过用例.py.py"'
message.attach(att1)

# 构造附件2,发送当前目录下的 t2.py 文件
att2 = MIMEText(open('1.unittest框架.py', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="6.setUpClass和tearDownClass.py"'
message.attach(att2)
try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
    smtpObj.login(mail_user, mail_pass)
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("邮件发送成功")

except smtplib.SMTPException:
    print("Error: 无法发送邮件")

生成测试报告

from HTMLTestRunner import HTMLTestRunner
import unittest
class TestAssert(unittest.TestCase):


    def test1(self):
        self.assertTrue('1',msg='不为真')

    def test2(self):
        self.assertEqual(1,1,msg='1==1')


    def test(self):
        a={'code':200,'msg':'登录成功'}
        # b='code'
        # a=json.dumps(a)
        b=200
        # self.assertIn(b,a,msg='断言信息备注')
        self.assertIn(b,a.values(),msg='断言信息备注')


if __name__ == '__main__':
    case1=TestAssert(methodName='test1')
    case2 = TestAssert(methodName='test2')
    case3 = TestAssert(methodName='test')
    suite=unittest.TestSuite()
    suite.addTests([case1,case2,case3])
    f=open('../report/report.html','wb')
    HTMLTestRunner(
        stream=f,
        title='自动化测试报告',
        description='测试报告的描述',
        verbosity=2


    ).run(suite)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值