python测试框架

pytest

1、安装
pip install pytest

测试安装是否成功

pytest --version

出现版本信息则安装成功
在这里插入图片描述

2、pytest的优点

  • 1、简单灵活,容易上手,文档丰富;
  • 2、支持参数化,可以细粒度地控制要测试的测试用例;
  • 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
  • 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
  • 5、测试用例的skip和xfail处理;
  • 6、可以很好的和CI工具结合,例如jenkins
3、使用

注意点

  • 测试文件以test_开头(以_test结尾也可以)
  • 测试类以Test开头,并且不能带有 init 方法
  • 测试函数以test_开头
  • 断言使用基本的assert即可

运行方式

1、pytest,自动寻找测试用例
2、pytest  ***.py    运行模块内的测试用例
3、pytest somepath   运行指定路径下的测试用例
4、pytest test_mod.py::test_func   运行指定包下的测试用例

控制台参数
-v 用于显示每个测试函数的执行结果
-q 只显示整体测试结果
-s 用于显示测试函数中print()函数输出
-x, --exitfirst, exit instantly on first error or failed test
-h 帮助

例子
test_demo.py

class TestDemmo(object):

    def test_1(self):

        print("test_1")

    def test_2(self):

        print("test_2")

在这里插入图片描述

4、使用扩展插件生成测试报告
安装

pip install pytest-html

生成报告

pytest --html=report.html
在这里插入图片描述
在这里插入图片描述
将css样式合并到html
pytest --html=report.html --self-contained-html
在这里插入图片描述

2、unittest

unittest 要求单元测试类必须继承 unittest.TestCase,该类中的测试方法需要满足如下要求:
测试方法应该没有返回值。
测试方法不应该有任何参数。
测试方法应以test 开头。
unittest.TestCase 内置了大量 assertXxx 方法来执行断言
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

unittest.TestCase 包含了 setUp() 和 tearDown() 两个方法,其中 setUp() 方法用于初始化测试;而 tearDown() 方法用于销毁测试。程序会在运行每个测试用例(以 test_ 开头的方法)之前自动执行 setUp() 方法来初始化测试固件,井在每个测试用例(以 test_ 开头的方法)运行完成之后自动执行 tearDown() 方法来销毁测试固件。
如果希望程序在该类的所有测试用例执行之前都用一个方法来初始化测试固件,在该类的所有测试用例执行之后都用一个方法来销毁测试固件,则可通过重写 setUpClass() 和 tearDownClass() 类方法来实现。

执行方法
1、在测试用例中添加

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

python -m unittest 测试文件python -m unittest自动寻找

TestSuite

测试包(TestSuite)可以组织多个测试用例,测试包还可以嵌套测试包。在使用测试包组织多个测试用例和测试包之后,程序可以使用测试运行器(TestRunner)来运行该测试包所包含的所有测试用例。
使用addTest或addTests添加测试用例,例如

suite = unittest.TestSuite()
suite.addTests([TestT('test_1'), TestT('test_2')])
import unittest
from BeautifulReport import BeautifulReport as BF


class TestT(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("setUpClass")

    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')

    def test_1(self):
        """
        测试相等
        :return:
        """
        unittest.TestCase.assertEqual(self, 3, 3, msg='测试失败')

    def test_2(self):
        """
        测试大于
        :return:
        """
        unittest.TestCase.assertGreater(self, 4, 6, msg='测试失败')


if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTests([TestT('test_1'), TestT('test_2')])
    runner = unittest.TextTestRunner()
    runner.run(suite)

运行结果
在这里插入图片描述

生成更炫酷的测试报告

pip install BeautifulReport

import unittest
from BeautifulReport import BeautifulReport as BF


class TestT(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("setUpClass")

    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')

    def test_1(self):
        """
        测试相等
        :return:
        """
        unittest.TestCase.assertEqual(self, 3, 3, msg='测试失败')

    def test_2(self):
        """
        测试大于
        :return:
        """
        unittest.TestCase.assertGreater(self, 4, 6, msg='测试失败')


if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTests([TestT('test_1'), TestT('test_2')])
    # runner = unittest.TextTestRunner()
    # runner.run(suite)

    run = BF(suites=suite)  # 实例化BeautifulReport模块
    run.report(filename='report.html', description='这个描述参数是必填的', theme='theme_memories')
    # theme可选theme_cyan  theme_candy    theme_default

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值