Python测试框架

本文介绍了框架和测试框架的概念。框架用于解决代码组织及运行控制问题,包括封装公共方法、组织代码及配置文件、执行控制。测试框架除用例基本步骤外,还需完成用例加载等功能。同时阐述了测试框架的特点,并简介了unittest、pytest和robot framework。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是框架?

框架(Framework)是整个或部分系统的可重用设计,
框架是用来解决代码的组织及运行控制问题的。

在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求,记录日志,连接并对比数据库数据。每个脚本里都重写一遍各种方法不仅工作量大而且易错。所以我们需要把公共的方法提取出来,封装成单独的模块,放到公用方法包里。另外配置文件,数据文件,日志等我们也需要分类存到不同的文件夹下。这种对公共方法的封装及对脚本及配置文件怎么组织的设计就叫做框架。

同时,一般框架除了完成对代码及配置文件的组织之外还要提供运行的控制功能。比如批量执行,分模块执行,生成报告,异常处理等等。

总结为以下3点:

  • 封装公共方法
  • 代码及配置文件的组织
  • 执行控制

什么是测试框架?

一个完整的测试脚本(用例)一般包含以下几个步骤:

  • 环境准备或检查
  • 执行业务操作
  • 断言结果
  • 清理环境

而测试框架一般还要完成用例加载,批量执行,异常控制,结果输出等功能。基础的测试框架一般只提供执行控制方面的功能。

测试框架应具有的特点

  • 易用性:编写用例,执行用例,生成报告及定位问题方便
  • 健壮性:稳定,比如timeout机制等
  • 扩展性:插件
  • 灵活性:用例组织或执行的灵活性,Fixture功能(不同范围的setUp和tearDown)等
  • 定制性:二次开发方便

unittest,pytest ,robot framework简介

  • unittest: Python自带,最基础的单元测试框架
  • pytest: 同样基于unittest开发,易用性好,信息更详细,插件众多
  • robot framework:一款基于Python语言的关键字驱动测试框架,有界面,功能完善,自带报告及log清晰美观

项目

unittest

pytest

robot framework

用例编写

继承unittest.TestCase类需要组织各种testSuite断言种类繁多

test开头的方法即可

robot格式,文本文件

执行器

自己写run_all_tests+discover+CommandParser+...

py.test ...

pybot ...

用例发现Discover

支持

支持

支持

跳过用例

unittest.skip()unittest.skipIf()raise uniitest.SkipTest

@pytest.mark.skipif( condition)@pytest.mark.xfail

-

Fixtures

setUp/tearDown@classmethodsetUpClass...

@pytest.fixture(session="session", autouse=True)fixture的作用域:functionmodulesession autouse=True使得函数将默认执行

[Tags] test level1pybot -i/--include tagName C:\TF-Testpybot -e/--exculde level1 *.robot排除

用例标签tags

借助unittest.skip()+comandParser实现

@pytest.mark.webtest自定义一个mark,如下,然后 py.test -v -m webtest 只运行标记了webtest的函数, py.test -v -m "not webtest" 来运行未标记webtest

[Tags] test level1pybot -i/--include tagName C:\TF-Testpybot -e/--exculde level1 *.robot排除

超时机制Timeout

自己实现

pip install pytest-timeout@pytest.mark.timeout(60) pytest --timeout=300

[Timeout] 3 seconds

参数化

结合ddt使用

@pytest.mark.parametrize("a,b,expected", testdata)def test_timedistance_v0(a, b, expected):diff = a - bassert diff == expected

[Template] 1 2 3

报告

HTMLTestRunner

pip install -U pytest-htmlpy.test --html=./report.html

支持,默认自动生成

日志log

自己实现

pytest test_add.py --resultlog=./log.txtpytest test_add.py --pastebin=all

支持,默认自动生成

只列出用例collect-only

--collect-only -v

-

失败用例重跑rerun failures

pip install -U pytest-rerunfailures@pytest.mark.flaky(reruns=5)py.test --rerun=3

robot --rerunfailed

baseline对比

并发

改造unittest使用协程并发,或使用线程池+Beautiful Report

pytest-xdist:分发到不用的cpu或机器上

命令行并发

xml报告

--xunit-file=... /pytest+Allure

--junit-xml=

Selenium支持

pytest-selenium

robotframework-seleniumlibraryrobotframwork-selenium2library

 

总结:总体来说,unittest比较基础,二次开发方便,适合高手使用;pytest更加方便快捷,效率更高,适合小白及追求效率的公司;robot framework由于有界面及美观的报告,易用性更好,灵活性及可定制性略差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值