JavaEE鸿蒙应用开发HTML&JS+前端Python+大数据开发人工智能开发电商视觉设计软件测试新媒体+短视频直播运营产品经理集成电路应用开发(含嵌入式)Linux云计算+运维开发C/C++拍摄剪辑+短视频制作PMP项目管理认证电商运营Go语言与区块链大数据PHP工程师Android+物联网iOS.NET

【python】小白必看_如何使用全功能的Python测试框架

来源:黑马程序员

浏览48998人

2019.05.07

如何使用pytest

大纲

安装和简单使用

配置文件

断言

. 第一步 —— 安装和简单使用

pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:

• 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

安装

pip3 install pytest

简单使用

新建一个test_sample.py文件,输入以下代码:

def inc(x):
    return x + 1

def test_answer():
    assert inc(3) == 5

test_sample.py文件的目录下,执行pytest命令,pytest将运行当前目录及其子目录下所有名称为“test_*.py” 或 “*_test.py”的文件

图片1.png 

 

我们使用了assert语句来验证测试期望值,pytest中有一种断言反思机制,能智能地报告assert表达式的中间值,这个测试返回了一个失败报告,因为inc(3)没有返回5

. 第二步 —— 配置文件

pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行。

[pytest]
# 添加命令行参数
addopts = -s
# 文件搜索路径
testpaths = ./scripts
# 文件名称
python_files = test_*.py
# 类名称
python_classes = Test*
# 方法名称
python_functions = test_*

addopts

addopts参数可以更改默认命令行选项,这个当我们在cmd输入指令去执行用例的时候,会用到,比如我想测试完生成报告,指令比较长

pytest -s —html=report.html

每次输入这么多,不太好记住,于是可以加到pytest.ini里

在配置文件中修改 addopts = -s —html=report.html

这样我下次打开cmd,直接输入pytest,它就能默认带上这些参数了

testpaths

默认的情况下,pytest将会进入到当前目录下的目录和文件中,去收集测试用例(test_开头的函数)。但是很多时候我们只想搜索固定的某一个文件夹,比如项目目录下的scripts文件夹。这样的话,我们可以通过配置文件来是想这个功能

testpaths = ./scripts

python_files

pytest默认会找test开头的py文件,如果我们想指定某个文件或者指定某些有规律的文件名可以使用这个参数来进行修改

python_files = test_*.py

python_classes

pytest默认会找Test开头的类,如果我们想指定某个类或者指定某些有规律的类名可以使用这个参数来进行修改

python_classes = Test*

python_functions

pytest默认会找test开头的函数,如果我们想指定某个函数或者指定某些有规律的函数名可以使用这个参数来进行修改

python_functions = test_*

. 第三步 —— 断言

编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

assert 预期结果 == 实际结果

def test_sum(self):
a = 1
b = 2
sum_num = a + b
assert 3 == sum_num

首先这个 3 是一个预期的结果,sum_num是实际的结果,框架会自动判断二者是否是 == 的关系,如果是,则断言成功,脚本通过。如果不是,则断言失败,脚本不通过。

总结

pytest 还有非常多用法,比如fixture,各式各样的第三方插件。

上面就是pytest的一个简单的入门。如果在学习一些 selenium 或者 appium 的相关知识。我们就可以结合上面的内容来做基本的自动化测试了。