unittest总结:

Untitest是什么?

unittest是Python自带的一个单元测试框架,

由于unittest是Python自带的标准模块,所以不需要单独再去安装。

引入包import unittest即可使用

为什么要使用unittest

当我们写的自动化用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护

unittest核心的四个概念:

test fixture:一般用于准备及清理工作。

test case:通常是使用assert方法检查动作和输入的响应,一般是基于TestCase类扩充。

test suite:多个测试的集合。

test runner:测试执行

unittest书写规则:

1.测试文件必需以 test 开头

2.测试类必需继承  unittest.TestCase 类

3.测试类必需以 Test 开头

4.测试方法最好以 test 开头

5.在测试的py文件里面去执行代码  unittest.main()

6.在测试类里面可以有普通方法,但需要被测试方法调用

1.入门脚本:

# 导包
import unittest

class TestLogin(unittest.TestCase):

    def test_login(self):
        """普通登录"""
        print("普通的登录测试")

    def test_login_remember(self):
        """记住登录"""
        print("记住保存信息登录")


if __name__ == '__main__':
    unittest.main()
2.test fixture    测试夹具
方法级别:
        setup()             在每一个测试方法执行之前执行 setup 的代码
        teardown()          在每一个测试方法执行之后执行 teardown 的代码

    类级别:
        setupClass()        在每一个测试类执行之前执行的方法 需要使用@classmethod装饰
        teardownClass()     在每一个测试类执行之后执行的方法 需要使用@classmethod装饰


例子:
import unittest

class Test_login2(unittest.TestCase):

    def test_login(self):
        print('普通的登录测试')

    def test_login_remember(self):
        print("记住密码登录")

    def setUp(self):
        print("setUp执行的代码,在每一个测试方法执行之前执行")

    def tearDown(self) -> None:
        print("teardown执行的代码,在每一个测试方法执行之后执行")

    @classmethod
    def setUpClass(cls) -> None:
        print("stupClass执行的代码,在整个测试类执行之前开始执行")

    @classmethod
    def tearDownClass(cls) -> None:
        print("teardownClass执行的代码,在整个测试类执行之后开始执行")


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

3.用例执行的顺序

在unittest里面,用例的执行顺序默认是按照 ASCII 码的顺序

自定义测试用例的执行顺序:给每一条用例加上执行的序号
# 给每条用例加上执行的序号
import unittest

class TestLoginPay(unittest.TestCase):
    def test_01_login(self):
        print('先进行登录')

    def test_02_view_page(self):
        print("浏览网页,挑选合适的商品")

    def test_03_add_cart(self):
        print("选择合适的商品加入购物车")

    def test_04_create_order(self):
        print("生成订单")

    def test_05_pay_order(self):
        print("支付订单")

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

4.断言:        判断预期和实际结果是否相符合

断言:判断预期和实际结果是否相符合

语法
    self.assertEqual(a,b,msg='错误描述')        判断  a==b成立则测试用例通过
    self.assertTrue(x,msg='错误描述')           判断 表达式x 是否为true,为true通过测试
    self.assertIn(a,b,msg='错误描述')           判断 a in b成立则测试通过



# 例子:
import unittest


class TestLogin03(unittest.TestCase):

    def test_login(self):
        expected = 'admin'  # 预期结果
        result = "admin2"  # 实际结果
        print("登录测试")
        self.assertEqual(expected, result, msg='登录账号错误')

    def test_add_cart(self):
        expected = 10
        result = 9
        print("添加购物车")

        self.assertTrue(expected == result, msg='购物车数量不对')

    def test_pay_order(self):
        expected = "00122"
        result = 'order0012'
        print("支付订单")
        self.assertIn(expected, result, msg='订单号错误')
        # self.assertTrue(expected in result,msg='订单号错误')


if __name__ == '__main__':
    unittest.main()
5.跳过测试:
        1.当我们写的部分用例,在某些情况下不需要执行的时候可以跳过
        2.当系统更新之后,部分的测试用例失效,但是不确定后面是否还会再改回来,就直接跳过

语法
    装饰器实现的跳过测试用例
        @unittest.skip(原因)    没有条件,直接跳过
        @unittest.skipIf(表达式,原因)    表达式为真跳过测试
        @unittest.skipUnless(表达式,原因)    表达式为假跳过测试

6.测试套件:

test suite 测试套件:把需要执行的测试用例放到一个套子

    test runner 测试执行:使用测试执行去执行所有在套子里面的测试用例
语法
    测试套件:适合作为调试测试用例
        suite = unittest.TestSuite()
        suite.addTest(测试类('测试方法'))

    测试执行
        runner = unittest.TextTestRunner()
        runner.run(suite)

#  例子:
import unittest
from Case.test_03_用例执行顺序 import TestLoginPay
from Case.test_04_断言 import TestLogin03

# unittest.main()

# 添加不同的测试用例
# 实例化一个测试套件
suite = unittest.TestSuite()

suite.addTest(TestLoginPay('test_01_login'))
suite.addTest(TestLoginPay("test_04_create_order"))

suite.addTest(TestLogin03("test_login"))


# 实例化一个测试执行
runner = unittest.TextTestRunner()
runner.run(suite)

7.数据驱动:

7.1 安装ddt模块,打开cmd输入pip install ddt在线安装

>>pip install ddt

​​​​​​​7.2 数据驱动原理

1.测试数据为多个字典的list类型

2.测试类前加修饰@ddt.ddt

3.case前加修饰@ddt.data()

8.HTMLTestRunner报告:

HTMLTestRunner:第三方插件
示例测试报告地址:http://tungwaiyip.info/software/sample_test_report.html

首先要下载HTMLTestRunner.py文件。

下载地址:HTMLTestRunner - tungwaiyip's software

1.生成的报告应该放在Report里面

2.生成的报告应该以 .html结尾

首先新建一个Python项目,如:My_Report_HTMLTestRunner_Demo。

创建case包,用于存放测试用例(test_case1.py、test_case2.py)。

创建plugins包,用于存放生成测试报告扩展文件(HTMLTestRunner.py)。

创建report文件夹,执行脚本指定测试报告生成在此文件夹里。

创建run_all.py为执行测试用例文件

例子:
import unittest
import HTMLTestRunnerPlugins
import os
import time

# 获取测试报告的路径进行拼接
report_path = os.path.dirname(__file__) + '/Report/'

# 获取当前时间
now = time.strftime('%Y-%m-%d %H_%M_%S')

# 根据路径和时间拼接最终的文件路径
report_name = report_path + now + 'HTMLReport.html'

# 添加执行的测试目录到套件里面
suite = unittest.defaultTestLoader.discover('./Case')

# unittest.TextTestRunner().run(suite)

# 打开我们刚才拼接好的路径
with open(report_name, 'wb') as fq:
    # 实例化一个 HTMLTestRunner
    runner = HTMLTestRunnerPlugins.HTMLTestRunner(
        stream=fq,
        verbosity=2,
        title='web自动化测试报告',
        description="本次执行完所有的测试用例",
        tester='第一组'
    )
    # 执行套件
    runner.run(suite)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值