Nose-2-进阶

简介: Nose-2-进阶

网络异常,图片无法展示
|


用例组织


在单元测试中,通常我们会将用例按照项目,测试套,测试用例这个层次进行划分,在 nose 中怎么组织用例结构呢?


网络异常,图片无法展示
|


如上图所示:


  • 第一层级:测试项目(noses_project)
  • 第二层级:测试套件(test_num&test_str)
  • 第三层级:用例集合(test_01&test_02)


入口文件:main.py

用例集合中可以进行用例的编写。


test_01.py


def test_A():
    assert 1+1 == 2
def test_B():
    assert 2-1 == 1
复制代码


test_02.py


def test_1():
    assert 'a' == 'a'
def test_2():
    assert 'A' == 'a'
复制代码


main.py


import os
ph = os.path.dirname(__file__)
cmd = 'nosetests -v {}'.format(ph)
if __name__ == "__main__":
    os.system(cmd)
复制代码


执行测试:


python main.py
test_01.test_A ... ok
test_01.test_B ... ok
test_02.test_1 ... ok
test_02.test_2 ... FAIL
======================================================================
FAIL: test_02.test_2
----------------------------------------------------------------------
Traceback (most recent call last):
  File "d:\python37\lib\site-packages\nose\case.py", line 198, in runTest
    self.test(*self.arg)
  File "c:\Users\Administrator\Desktop\document\wechatPublic\noses_project\test_str\test_02.py", line 5, in test_2
    assert 'A' == 'a'
AssertionError
----------------------------------------------------------------------
Ran 4 tests in 0.041s
FAILED (failures=1)
复制代码


根据测试结果,我们可以知道在测试集合 test_01 中的两个测试用例 test_Atest_B 均通过,而测试集合 test_02 中的两个测试用例 test_1 通过,但是 test_2 未通过,因为断言失败。


整体项目的测试通过率为:3/4


setup 和 teardown


setupteardown 通常在用例开始前后执行,在 nosesetup 在用例集开始前执行,teardown 在用例集结束后执行。


test_01.py


def setup():
    print('tests set 01 will be start...')
def teardown():
    print('tests set 01 has been end...')
def test_A():
    assert 1+1 == 2
def test_B():
    assert 2-1 == 1
复制代码


test_02.py


def setup():
    print('tests set 02 will be start...')
def teardown():
    print('tests set 02 has been end...')
def test_1():
    assert 'a' == 'a'
def test_2():
    assert 'A' == 'a'
复制代码


main.py


import os
ph = os.path.dirname(__file__)
cmd = 'nosetests -v -s {}'.format(ph)
if __name__ == "__main__":
    os.system(cmd)
复制代码


执行测试:


python main.py
tests set 01 will be start...
test_01.test_A ... ok
test_01.test_B ... ok
tests set 01 has been end...
tests set 02 will be start...
test_02.test_1 ... ok
test_02.test_2 ... FAIL
tests set 02 has been end...
======================================================================
FAIL: test_02.test_2
----------------------------------------------------------------------
Traceback (most recent call last):
  File "d:\python37\lib\site-packages\nose\case.py", line 198, in runTest
    self.test(*self.arg)
  File "c:\Users\Administrator\Desktop\document\wechatPublic\noses_project\test_str\test_02.py", line 11, in test_2
    assert 'A' == 'a'
AssertionError
----------------------------------------------------------------------
Ran 4 tests in 0.036s
FAILED (failures=1)
复制代码


注意:


我们除了在用例集文件中加了 setupteardown 方法以外,我们还在 main 文件中增加了-s 参数,用例捕获测试过程中的输出并打印,即捕获 print 的内容并打印出来。


测试报告


你可能会想,这么轻量化的框架是不是没有测试报告?不,答案是有的,nose 为我们提供了 xml 格式的测试报告,方便我们后续解析进行二次开发使用。


使用参数:--with-xunit

main.py


import os
ph = os.path.dirname(__file__)
cmd = 'nosetests -v -s --with-xunit {}'.format(ph)
if __name__ == "__main__":
    os.system(cmd)
复制代码


执行测试:


python main.py
tests set 01 will be start...
test_01.test_A ... ok
test_01.test_B ... ok
tests set 01 has been end...
tests set 02 will be start...
test_02.test_1 ... ok
test_02.test_2 ... FAIL
tests set 02 has been end...
======================================================================
FAIL: test_02.test_2
----------------------------------------------------------------------
Traceback (most recent call last):
  File "d:\python37\lib\site-packages\nose\case.py", line 198, in runTest
    self.test(*self.arg)
  File "c:\Users\Administrator\Desktop\document\wechatPublic\noses_project\test_str\test_02.py", line 11, in test_2
    assert 'A' == 'a'
AssertionError
----------------------------------------------------------------------
XML: C:\Users\Administrator\Desktop\document\wechatPublic\noses_project\nosetests.xml
----------------------------------------------------------------------
Ran 4 tests in 0.031s
FAILED (failures=1)
复制代码


输出的 nosetests.xml 文件:


网络异常,图片无法展示
|


nosetests.xml


<?xml version="1.0" encoding="UTF-8"?><testsuite name="nosetests" tests="4" errors="0" failures="1" skip="0"><testcase classname="test_01" name="test_A" time="0.000"></testcase><testcase classname="test_01" name="test_B" time="0.000"></testcase><testcase classname="test_02" name="test_1" time="0.000"></testcase><testcase classname="test_02" name="test_2" time="0.000"><failure type="builtins.AssertionError" message=""><![CDATA[Traceback (most recent call last):
  File "d:\python37\lib\unittest\case.py", line 59, in testPartExecutor
    yield
  File "d:\python37\lib\unittest\case.py", line 615, in run
    testMethod()
  File "d:\python37\lib\site-packages\nose\case.py", line 198, in runTest
    self.test(*self.arg)
  File "c:\Users\Administrator\Desktop\document\wechatPublic\noses_project\test_str\test_02.py", line 11, in test_2
    assert 'A' == 'a'
AssertionError
]]></failure></testcase></testsuite>
相关文章
|
运维 分布式计算 安全
云计算时代的DCI技术
实现数据中心间互通的纽带——DCI网络
云计算时代的DCI技术
|
5月前
|
弹性计算 安全 网络协议
阿里云专有网络VPC通过逻辑隔离、安全边界控制及网络分段与分区保障云上隔离
阿里云VPC构建逻辑隔离的私有网络,支持自定义IP、子网划分及路由配置,通过隧道号实现VPC间二层隔离,结合安全组、网络ACL和IPv4/IPv6网关实现多层安全控制,灵活组网满足高可用与安全需求。
|
12月前
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文总结了日志管理中的六大反模式及优化建议,涵盖日志轮转、存储选择、并发写入等常见问题,帮助提升日志采集的完整性与系统可观测性,适用于运维及开发人员优化日志管理策略。
413 5
|
消息中间件 搜索推荐 调度
RocketMQ实战—8.营销系统业务和方案介绍
本文详细介绍了电商营销系统的业务流程、技术架构及挑战解决方案。涵盖核心交易与支付后履约流程,优惠券和促销活动的发券、领券、用券、销券机制,以及会员与推送的数据库设计。技术架构基于Nacos服务注册中心、Dubbo RPC框架、RocketMQ消息中间件和XXLJob分布式调度工具,实现系统间高效通信与任务管理。针对千万级用户量下的推送和发券场景,提出异步化、分片处理与惰性发券等优化方案,解决高并发压力。同时,通过RocketMQ实现系统解耦,提升扩展性,并利用XXLJob完成爆款商品推荐的分布式调度推送。整体设计确保系统在大规模用户场景下的性能与稳定性。
RocketMQ实战—8.营销系统业务和方案介绍
|
6月前
|
Ubuntu Linux 开发工具
掌握Ubuntu编辑器命令模式(Vim命令模式完全入门指南)
教程来源https://www.vpshk.cn/本文详解Ubuntu下Vim编辑器的命令模式,介绍其核心操作与三种模式切换方法,提供常用快捷键速查表,并通过实战示例帮助零基础用户快速掌握高效文本编辑技巧,提升Linux系统操作效率。
|
8月前
|
缓存 Cloud Native 中间件
《聊聊分布式》从单体到分布式:电商系统架构演进之路
本文系统阐述了电商平台从单体到分布式架构的演进历程,剖析了单体架构的局限性与分布式架构的优势,结合淘宝、京东等真实案例,深入探讨了服务拆分、数据库分片、中间件体系等关键技术实践,并总结了渐进式迁移策略与核心经验,为大型应用架构升级提供了全面参考。
|
8月前
|
Kubernetes 调度 微服务
无需接入执行器,0代码改造实现微服务任务调度
本文提出了一种基于云原生的任务调度新方案,不需要依赖SDK,不依赖语言,实现定时调度和分布式跑批
362 1
|
10月前
|
Ubuntu Linux 图形学
Linux学习之Linux桌面系统有哪些?
Cinnamon:与MATE类似,Cinnamon 拥有 GNOME 和 Unity 等其它桌面环境所没有的种种功能,是高度可定制的桌面环境,不需要任何外部插件、窗口组件和调整工具来定制桌面。
446 0
|
Python
课时19:Python的基本语法
今天给大家带来分享的是 Python 的基本语法,分为以下六个部分。 1.在 Python 中严格区分大小写 2.Python 中的每一行就是一条语句,每条语句以换行结束 3.Python 中每一行语句不要过长 4.条语句可以分多行编写,语句后边以\结尾 5.Python 是缩进严格的语言,不要随便写缩进 6.在 Python 中使用#来表示注释
370 2

热门文章

最新文章