在主流测试框架中,相比于unitTest,Pytest才是永远的神 | 您所在的位置:网站首页 › appium框架和哪个框架类似 › 在主流测试框架中,相比于unitTest,Pytest才是永远的神 |
前言
如今,我们在用Python做接口自动化测试时所搭建的测试框架,大多都是Python的单元测试框架。而说起Python单元测试框架,那必然会提及unitTest和Pytest。 几乎每一个测试人,都接触过这其中一种,或者二者都有过接触。那问题来了,这两种主流框架之间到底有什么区别和特点?在未来又有怎样的发展趋势?对我们的测试生涯是否会产生影响? 关于PytestPytest是Python的第三方单元测试库,长久以来一直以高效、便捷、简单的特点著称,并且扩展性极佳,可以支持应用层的复杂功能测试。 关于unitTestunitTest是Python内嵌的标准测试库,其不仅可用于单元测试,还可用于Web自动化测试用例的开发与执行。unitTest可组织执行测试用例,并提供了丰富的断言方法用以判断测试用例是否通过。 现状众所周知,Pytest脱胎于unitTest且对其兼容,可不必修改unitTest用例代码而执行unitTest风格用例, 此外还可扩展众多插件。相比于unitTest,Pytest支持用例出错重跑以及xdist插件。而unitTest则缺少这些功能,也几乎没有扩展,unitTest编写用例时有严格且复杂的格式,便捷性一般。 目前在行业中,大部分测试工程师都被要求熟悉Pytest 能“独立且迅速地完成基于Pytest的主流PO模式测试框架设计与实现” 已经悄然成为各大企业对测试人的基本入门需求。而仅仅熟悉unitTest的测试人,则不再像之前那样炙手可热,主流框架的发展趋势变化对我们测试人的影响已经可见一斑。 趋势结合我的观察与经验,在这里抛出一个预想。unitTest能做的Pytest都能做,而且Pytest比unitTest更丰富高效,也更简单便捷。现在使用Pytest的人员和机构越来越多,我想大部分资深从业者都能感受出一种趋势,将来unitTest的份额极有可能会被Pytest一点点地蚕食殆尽,让我们拭目以待吧。 这里,对于还不熟悉或者不适应Pytest架构的同学,我来带大家学习下pytest. pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手支持参数化能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等测试用例的skip和xfail处理可以很好的和jenkins集成report框架----allure 也支持了pytest安装pytest: pip install -U pytest验证安装的版本: pytest --version几个pytest documentation中的例子: 例子1: import pytest # content of test_sample.py def func(x): return x + 1 def test_answer(): assert func(3) == 5命令行切换到文件所在目录,执行测试(也可以直接在IDE中运行): 例子2: 当需要编写多个测试样例的时候,我们可以将其放到一个测试类当中,如: class TestClass: def test_one(self): x = "this" assert 'h' in x def test_two(self): x = "hello" assert hasattr(x, 'check')运行以上例子: 通过上面2个实例,我们发现编写pytest测试样例非常简单,只需要按照下面的规则: 测试文件以test_开头(以_test结尾也可以)测试类以Test开头,并且不能带有 init 方法测试函数以test_开头断言使用基本的assert即可 运行模式Pytest的多种运行模式,让测试和调试变得更加得心应手,下面介绍5种常用的模式。在介绍之前需要提醒一句,运行pytest时会找当前目录及其子目录中的所有test_*.py 或 *_test.py格式的文件以及以test开头的方法或者class,不然就会提示找不到可以运行的case了。 1.运行后生成测试报告(htmlReport) 安装pytest-html: pip install -U pytest-html运行模式: pytest --html=report.html报告效果: 当我们写了较多的cases时,如果每次都要全部运行一遍,无疑是很浪费时间的,通过指定case来运行就很方便了。 例子代码: class TestClassOne(object): def test_one(self): x = "this" assert 't'in x def test_two(self): x = "hello" assert hasattr(x, 'check') class TestClassTwo(object): def test_one(self): x = "iphone" assert 'p'in x def test_two(self): x = "apple" assert hasattr(x, 'check')运行模式: 模式1:直接运行test_se.py文件中的所有cases: pytest test_se.py模式2:运行test_se.py文件中的TestClassOne这个class下的两个cases: pytest test_se.py::TestClassOne模式3:运行test_se.py文件中的TestClassTwo这个class下的test_one: pytest test_se.py::TestClassTwo::test_one注意:定义class时,需要以T开头,不然pytest是不会去运行该class的。 3.多进程运行cases当cases量很多时,运行时间也会变的很长,如果想缩短脚本运行的时长,就可以用多进程来运行。 安装pytest-xdist: pip install -U pytest-xdist 运行模式: pytest test_se.py -n NUM 其中NUM填写并发的进程数。 4.重试运行cases在做接口测试时,有事会遇到503或短时的网络波动,导致case运行失败,而这并非是我们期望的结果,此时可以就可以通过重试运行cases的方式来解决。 安装pytest-rerunfailures: pip install -U pytest-rerunfailures运行模式: pytest test_se.py --reruns NUMNUM填写重试的次数。 5.显示print内容在运行测试脚本时,为了调试或打印一些内容,我们会在代码中加一些print内容,但是在运行pytest时,这些内容不会显示出来。如果带上-s,就可以显示了。 运行模式: 另外,pytest的多种运行模式是可以叠加执行的,比如说,你想同时运行4个进程,又想打印出print的内容。可以用: pytest test_se.py -s -n 4下面我还整理了一份软件测试工程师发展方向知识架构体系图。 加油吧,测试员!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。 未来的你肯定会感谢现在拼命的自己! |
CopyRight 2018-2019 实验室设备网 版权所有 |