Python学习之UnitTest【使用,生成HTML测试报告】

这篇具有很好参考价值的文章主要介绍了Python学习之UnitTest【使用,生成HTML测试报告】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、 UnitTest

1.1 TestCase

1.2 TestSuite

1.3 TextTestRunner

1.4 TestLoader

2、Fixture

2.1 方法级别

2.2 类级别

2.3 模块级别

2.4 总结

3、断言

3.1 UnitTest 常用断言方法

3.2 使用方式

4、参数化

4.1 安装 类库

4.2 使用

5、跳过

6、生成HTML测试报告


UnitTest 是 Python 自带的一个单元测试框架,用它来做单元测试。

为什么使用UnitTest框架?

  • 能够组织多个用例去执行;

  • 提供丰富的断言方法;

  • 能够生成测试报告;

1、 UnitTest

UnitTest 核心要素

  1. TestCase;

  2. TestSuite;

  3. TestRunner;

  4. TestLoader;

  5. Fixture;

1.1 TestCase

TestCase 就是测试用例的意思。

示例:

我们可以定义一个实现加法操作的函数,并对该函数进行测试。

# 导包
import unittest


# 定义函数(方法)
def my_sum(i, j):
    return i + j;


# 定义测试类 注:必须继承unittest.TestCase
class my_test(unittest.TestCase):
    # 定义测试方法 注: 测试方法名称命名以 test 开头;
    def test_01(self):
        print(my_sum(1, 2))

    def test_02(self):
        print(my_sum(3, 4))

1.2 TestSuite

TestSuite 翻译过来的意识就是 测试套件,多条测试用例集合在一起,就是一个 TestSuite。

使用:

1、实例化(suite:为 TestSuite 实例化的名称,你可以叫a,b,c 都可以)

suite = unittest.TestSuite()

2、添加用例(ClassName:为类名;MethodName:为方法名)

suite.addTest(ClassName("MethodName"))

3、添加扩展:(搜索指定 ClassName 内 test 开头的方法并添加到测试套件中)

suite.addTest(unittest.makeSuite(ClassName))

注:

TestSuite 需要配合 TextTestRunner 才能被执行

1.3 TextTestRunner

TextTestRunner 是用来执行测试用例和测试套件的

使用:

1、实例化: runner = unittest.TextTestRunner()

2、执行: runner.run(suite) # suite:为测试套件名称

示例:

这里我们多写将测试类分模块。

Test01.py

# 导包
import unittest


# 定义函数(方法)
def my_sum(i, j):
    return i + j;


# 定义测试类 my_test 注:必须继承unittest.TestCase
class my_test(unittest.TestCase):
    # 定义测试方法 注: 测试方法名称命名以 test 开头;
    def test_01(self):
        print("结果:%s" % my_sum(1, 2)+" my_test的test_01")

    def test_02(self):
        print("结果:%s" % my_sum(3, 4)+" my_test的test_02")

Test02.py

# 导包
import unittest


# 定义函数(方法)
def my_sum(i, j):
    return i + j;


class my_test02(unittest.TestCase):
    def test_01(self):
        print("结果:%s" % my_sum(1, 2)+" my_test02的test_01")

    def test_02(self):
        print("结果:%s" % my_sum(1, 2)+" my_test02的test_02")

Test.py :执行测试用例

import unittest
import Test01
import Test02

# 实例化TestSuite
suite = unittest.TestSuite()
# 添加用例
suite.addTest(Test01.my_test("test_01"))
# 添加 my_test02 类中所有 test 开头的方法
suite.addTest(unittest.makeSuite(Test02.my_test02))
# 实例化TextTestRunner
runner = unittest.TextTestRunner()
# 执行
runner.run(suite)

1.4 TestLoader

用来加载 TestCase 到 TestSuite 中,即加载满足条件的测试用例,并把测试用例封装成测试套件。

使用 unittest.TestLoader,通过该类下面的 discover()方法自动搜索指定目录下指定开头的.py 文件,并将查找到的测试用例组装到测试套件;

使用:

suite = unittest.TestLoader().discover(test_dir, pattern='test*.py')

test_dir: 为指定的测试用例的目录;

pattern:为查找的.py 文件的格式;

注:

如果文件名默认为'test*.py' 也可以使用 unittest.defaultTestLoader 代替 unittest.TestLoader()

示例:

import unittest

# 实例化 TestLoader
suite = unittest.TestLoader().discover("./", "test0*.py")
# 实例化TextTestRunner
runner = unittest.TextTestRunner()
# 执行
runner.run(suite)

TestSuite TestLoader 区别

  • TestSuite 需要手动添加测试用例(可以添加测试类,也可以添加测试类中某个测试方法);

  • TestLoader 搜索指定目录下指定开头.py 文件,并添加测试类中的所有的测试方法,不能指定添加测试方法;

2、Fixture

Fixture 是一个概述,对一个测试用例环境的初始化和销毁就是一个Fixture 。

Fixture有三个控制级别:

2.1 方法级别

在TestCase,也就是测试用例所在的class中定义方法,如果一个TestCase中有多个测试用例,那么setUp和tearDown就会被自动调用多次。

使用:

  • 初始化(前置处理): def setUp(self) --> 首先自动执行;

  • 销毁(后置处理): def tearDown(self) --> 最后自动执行;

运行于测试方法的始末,即:运行一次测试方法就会运行一次 setUp 和tearDown

示例:

# 导包
import unittest


# 定义函数(方法)
def my_sum(i, j):
    return i + j;


# 定义测试类 my_test 注:必须继承unittest.TestCase
class my_test(unittest.TestCase):
    # 初始化方法
    def setUp(self):
        print("setUP 执行初始化")

    # 销毁方法
    def tearDown(self):
        print("tearDown 执行销毁")

    # 定义测试方法 注: 测试方法名称命名以 test 开头;
    def test_01(self):
        print("结果:%s" % my_sum(1, 2) + " my_test的test_01")

    def test_02(self):
        print("结果:%s" % my_sum(3, 4) + " my_test的test_02")

2.2 类级别

不管类中有多少方法,一个类开始的时候自动调用函数,结束的之后自动调用函数。

使用:

  • 初始化(前置处理): @classmethod def setUpClass(cls): --> 首先自动执行

    • 销毁(后置处理): @classmethod def tearDownClass(cls): --> 最后自动执行

运行于测试类的始末 , 即: 每个测试类只会运行 一次 setUpClass 和 tearDownClass.

# 导包
import unittest


# 定义函数(方法)
def my_sum(i, j):
    return i + j;


# 定义测试类 my_test 注:必须继承unittest.TestCase
class my_test(unittest.TestCase):
    # 初始化
    @classmethod
    def setUpClass(cls):
        print("setUP 执行初始化")

    # 销毁方法
    @classmethod
    def tearDownClass(cls):
        print("tearDown 执行销毁")

    # 定义测试方法 注: 测试方法名称命名以 test 开头;
    def test_01(self):
        print("结果:%s" % my_sum(1, 2) + " my_test的test_01")

    def test_02(self):
        print("结果:%s" % my_sum(3, 4) + " my_test的test_02")

2.3 模块级别

不管py文件中有多少个类,以及类中有多少方法,只自动执行一次

使用:

  • 初始化(前置处理): def setUpModule(): --> 首先自动执行

  • 销毁(后置处理): def tearDownModule(): --> 最后自动执行

# 导包
import unittest


# 定义函数(方法)
def my_sum(i, j):
    return i + j;


# 模块级
def setUpModule():
    print("setUpModule自动调用了")


# 模块级
def tearDownModule():
    print("tearDownModule自动调用了")


# 定义测试类 my_test 注:必须继承unittest.TestCase
class my_test(unittest.TestCase):
    # 定义测试方法 注: 测试方法名称命名以 test 开头;
    def test_01(self):
        print("结果:%s" % my_sum(1, 2) + " my_test的test_01")

    def test_02(self):
        print("结果:%s" % my_sum(3, 4) + " my_test的test_02")


# 定义测试类 my_test02
class my_test02(unittest.TestCase):
    def test_01(self):
        print("结果:%s" % my_sum(1, 2) + " my_test02的test_01")

    def test_02(self):
        print("结果:%s" % my_sum(1, 2) + " my_test02的test_02")

2.4 总结

  • 必须继承 unittest.TestCase 类,setUp、tearDown 才是一个 Fixture;

  • 方法级:setUp,tearDown:如果一个类中有多个测试用例,每执行一个测试用例之前会调用一次 setUp,之后会调用一次 tearDown;

  • 类级:setUpClass,tearDownClass:如果一个类中有多个测试用例,执行所有测试用例之前只会调用一次 setUpClass,之后只会调用一次 tearDownClass;

  • 模块级:setUpModule,tearDownModule:只在 import 导入这个模块时会调用一次 setUpModule,模块使用完成之后会调用一次 tearDownModule;

  • setUpXXX:一般做初始化工作; tearDownXXX:一般做结束工作;

3、断言

让程序代替人为判断测试程序执行结果是否符合预期结果的过程。

为什么要学习断言呢?

因为自动化脚本在执行的时候一般都是无人值守状态,我们不知道执行结果是否符合预期结果,所以我们需要让程序代替人为检测程序执行的结果是否符合预期结果,这就需要使用断言。

3.1 UnitTest 常用断言方法

UnitTest 中提供了非常丰富的断言方法,复杂的断言方法在自动化测试中几乎使用不到,所以我们只需要掌握几个常用的即可。

常用的 UnitTest 断言方法:

序号 断言方法 断言描述
1 assertTrue(expr, msg=None) 验证 expr 是 true,如果为 false,则 fail
2 assertFalse(expr, msg=None) 验证 expr 是 false,如果为 true,则 fail
3 assertEqual(expected, actual, msg=None) 验证 expected==actual,不等则 fail
4 assertNotEqual(first, second, msg=None) 验证 first != second, 相等则 fail
5 assertIsNone(obj, msg=None) 验证 obj 是 None,不是则 fail
6 assertIsNotNone(obj, msg=None) 验证 obj 不是 None,是则 fail
7 assertIn(member, container, msg=None) 验证是否 member in container
8 assertNotIn(member, container, msg=None) 验证是否 member not in container

3.2 使用方式

断言方法已经在 unittest.TestCase 类中定义好了,而且我们自定义的测试类已经继承了 TestCase,所以在测试方法中直接调用即可。

# 导包
import unittest


# 定义函数(方法)
def my_sum(i, j):
    return i + j;


# 定义测试类 my_test 注:必须继承unittest.TestCase
class my_test(unittest.TestCase):
    # 定义测试方法 注: 测试方法名称命名以 test 开头;
    def test_01(self):
        num = my_sum(1, 2)
        # 如果 num为4,正确
        self.assertEqual(3, num);

    def test_02(self):
        num = my_sum(3, 4)
        # 如果 num为7,正确
        self.assertEqual(7, num);

    def test_03(self):
        num = my_sum(1, 2)
        # 如果 num在列表中,正确
        self.assertIn(num,[1,2,3,4,5])

4、参数化

上面的测试用例都存在一个问题,都是一条测试数据定义一个测试函数,代码冗余度太高。

我们可以通过参数化的方式来传递数据,从而实现数据和脚本分离。

并且可以实现用例的重复执行。unittest测试框架,本身不支持参数化,但是可以通过安装 unittest扩展插件 parameterized 来实现。

4.1 安装 类库

方式一:

我们可以直接打开命令提示符输入:pip install parameterized

Python学习之UnitTest【使用,生成HTML测试报告】

方式二 :

使用PyCharm 安装,直接看图Python学习之UnitTest【使用,生成HTML测试报告】

 Python学习之UnitTest【使用,生成HTML测试报告】

 Python学习之UnitTest【使用,生成HTML测试报告】

4.2 使用

方式一:

import unittest
from parameterized import parameterized


def my_sum(i, j):
    return i + j


class my_test(unittest.TestCase):
    # a是调用my_sum的第一个参数
    # b是调用my_sum的第二个参数
    # c是预期结果
    @parameterized.expand([(1, 2, 3), (5, 6, 110), (-1, 3, 2)])
    def test_001(self, i, j, k):
        # 定义变量num得到my_sum函数的返回值
        num = my_sum(i, j)
        # num1里存放的是实际结果,k是预期结果
        self.assertEqual(num, k)
        # 实际结果与预期结果相符,代表测试用例测试通过
        # 不相符代表测试用例测试失败

Python学习之UnitTest【使用,生成HTML测试报告】

方式二:

就是直接定义好一个列表,列表里面有元组。

Python学习之UnitTest【使用,生成HTML测试报告】

方式三:

就是定义一个函数(方法),然后直接返回元组。Python学习之UnitTest【使用,生成HTML测试报告】

5、跳过

对于一些未完成的或者不满足测试条件的测试函数和测试类,可以跳过执行。

使用方式:

@unittest.skip('代码未完成'):直接将测试函数标记成跳过

@unittest.skipIf(condition, reason):根据条件判断测试函数是否跳过

示例:Python学习之UnitTest【使用,生成HTML测试报告】

6、生成HTML测试报告

HTML 测试报告就是执行完测试用例后,以 HTML(网页)方式将执行结果生成报告。

为什么要生产测试报告?

因为测试报告是本次测试结果的体现形态,然后测试报告内包含了有关本次测试用例的详情;

HTML 生成报告方式

一种是TextTestRunner (UnitTest 自带),另外的就是其他的第三方模板HTMLTestRunner。

首先我们先来看看TextTestRunner如何生成测试报告的。

import unittest

# 生成测试套件
suite = unittest.TestLoader().discover("./", "test0*.py")
# 以只写方式打开测试报告文件
f = open("C:/Users/jie/Desktop/test.txt", "w", encoding="utf-8")
# 实例化TextTestRunner stream为open函数打开的文件流; verbosity 为不同模板编号
runner = unittest.TextTestRunner(stream=f,verbosity=2)
# 执行
runner.run(suite)
# 关闭
f.close()

结果

Python学习之UnitTest【使用,生成HTML测试报告】

我们再来看看HTMLTestRunner 测试报告

首先要安装HTMLTestRunner,这里要注意的是由于HTMLTestRunner是一个第三方的unittest HTML报告库,用pip是死活安装不了的,得去网上下载HTMLTestRunner.py放到存放python源代码的Lib目录下。大家也可以用我下好的。

HTMLTestRunner: 这是python HTMLTestRunner

import unittest
from HTMLTestRunner import HTMLTestRunner

# 生成测试套件
suite = unittest.TestLoader().discover("./", "test*.py")
# 以只写方式打开测试报告文件
f = open("C:/Users/jie/Desktop/test01.html", "wb")
# 实例化 HTMLTestRunner 对象  stream:open 函数打开的文件流; title:[可选参数],为报告标题; description:[可选参数],为报告描述信息;比如操作系统、浏览器等版本;
runner = HTMLTestRunner(stream=f, title="自动化测试报告", description="Chrome 浏览器")
# 执行
runner.run(suite)
# 关闭
f.close()

 效果

Python学习之UnitTest【使用,生成HTML测试报告】文章来源地址https://www.toymoban.com/news/detail-413925.html

到了这里,关于Python学习之UnitTest【使用,生成HTML测试报告】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用python测试框架完成自动化测试并生成报告-实例练习

    558 pytest -v -s PyTest.py --alluredir=./result/   在测试执行期间收集结果  559 allure serve ./result/   测试完成后查看实际报告, 在线看报告   

    2024年02月07日
    浏览(52)
  • pytest两种生成测试报告的方法——html

    pytest有两种生成测试报告的方法(html和allure),今天就给大家一介绍下html 1.安装:pip install pytest-html 2.查看版本:pip show pytest-html 3.生成测试报告基本语法: 语法一:pytest --html=生成报告的url 运行用例的.py文件 语法二:pytest --html=生成报告的url --self-contained-html 运行用例的

    2024年02月08日
    浏览(71)
  • Jmeter生成可视化的HTML测试报告

    Jmeter也是可以生成测试报告的。 性能测试工具Jmeter由于其体积小、使用方便、学习成本低等原因,在现在的性能测试过程中,使用率越来越高,但其本身也有一定的缺点,比如提供的测试结果可视化做的很一般。 不过从3.0版本开始,jmeter引入了Dashboard Report模块,用于生成

    2024年02月12日
    浏览(37)
  • Jmeter接口自动化生成测试报告html格式

    jmeter自带执行结果查看的插件,但是需要在jmeter工具中才能查看,如果要向领导提交测试结果,不够方便直观。 笔者刚做了这方面的尝试,总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 一、ant下载安装 1.1、下载地址: http://ant.apache.org/bi

    2024年02月16日
    浏览(52)
  • jmeter生成html格式接口自动化测试报告

    jmeter自带执行结果查看的插件,但是需要在jmeter工具中才能查看,如果要向领导提交测试结果,不够方便直观。 笔者刚做了这方面的尝试,总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 1.1、下载地址: http://ant.apache.org/bindownload.cgi 1.2、版本

    2024年02月07日
    浏览(57)
  • 运行 Jmeter 文件生成 HTML 测试报告,我选择 ANT 工具

    概述 ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于 Java 环境中的软件开发。 在与 Jmeter 生成的 jmx 文件配合使用中,ant 会完成jmx计划的执行和生成jtl文件,并将jtl文件转化为html页面进行查看。 还可与 Jenkins 配合使用。 优点:跨平台

    2024年02月14日
    浏览(46)
  • python代码实现判断三角形类型,使用pytest进行代码测试,生成allure测试报告

    一、python代码判断三角形类型 写代码之前首先我们要知道满足三角形的条件: 前提条件:三角形边长都为大于0的数字 构成三角形:两边之和大于第三边 即 a+b c  and a+cb and  b+ca   (此三个条件需要同时满足) 满足构成三角形之后,要考虑构成三角形的类型: 三角形分为:

    2024年02月05日
    浏览(49)
  • 从0到1精通自动化测试,pytest自动化测试框架,allure2生成html报告(史上最详细)(九)

    allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。 环境准备: python3.6 windows环境 pycharm pytest-allure-adaptor allure2.7.0 java1.8 pip安装 pytest-allure-adaptor,github地址:https://github.com/allure-framework/allure-pytest 如

    2024年02月11日
    浏览(102)
  • Python中的单元测试框架:使用unittest进行有效测试

    在软件开发中,单元测试是一种测试方法,它用于检查单个软件组件(例如函数或方法)的正确性。Python 提供了一个内置的单元测试库,名为 unittest ,可以用来编写测试代码,然后运行测试,并报告测试结果。 本文将向你介绍如何使用 unittest 来编写和运行单元测试。通过阅

    2024年03月09日
    浏览(42)
  • Python高级用法:使用unittest进行单元测试

    Python中含有一个单元测试模块unittest,我们可以使用其中的工具来测试代码。在编写测试用例后,可以查看一系列输入是否得到了预期的输出。单元测试专注于测试软件单元,软件单元可以被理解为应用程序代码的最小可测试部分。 在代码中我们需要测试的是一个数字是否为

    2024年01月19日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包