pytest 是 Python 的一款开源测试框架。
主要特点:
__init__
方法默认情况下,pytest 查找当前目录下所有以 test 开始或结尾的 Python 脚本,并执行文件内的所有以 test 开始的函数和方法。
在终端按需输入以下命令来运行 case:
pytest 中可以使用 Python 原生的断言语句 assert 来进行验证。
常用:
可以指定断言失败的返回信息,举例如下:
assert response["result_code"] == expected["response"]["result_code"], "实际的返回结果是:{}".format(response["result_code"])
fixture 是 pytest 特有功能,目的是提供一种手段去运行最基本的、重复的测试内容,是将测试前后的预备工作、清理工作的代码分离出核心测试逻辑的一种机制。通常用来对测试方法、测试函数、测试类和整个测试文件进行初始化或还原测试环境。
@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
scope:作用域,(
function:方法,默认为function
class:类
module:.py文件
session:会话)
name:装饰器名字
1.2.4.1. fixture 作为函数参数
可以通过使用 @pytest.fixture 注册成为一个 fixture 函数,来为测试方法提供一个 fixture 对象。
如下图所示,connect_mysql_uds 函数被注册成了一个 fixture 函数,在 test_query_couplist 方法中可以直接被作为参数使用。
1.2.4.2. 在 conftest.py 中管理 fixture
如果多个文件都需要用到这个fixture函数,则可以将该函数放到conftest.py文件中管理,所需的 fixture 对象会自动被 pytest 发现。
1.2.4.3. 执行顺序
较高范围的 fixture(例如session会话级)比低范围的 fixture(例如function函数级或class类级)优先执行。
相同范围的 fixture 对象的按引入的顺序或依赖关系按顺序调用。
1.2.4.4. yield
yield 语句之后的所有代码都视为 teardown 代码。
举例,如下图所示,整个会话结束后,会打印出”关闭数据库”的语句。
1.2.5.1. 标记和分类用例
@pytest.mark.level
用法步骤:
a. 先在 pytest.ini 文件中对标签进行注册
b. 对用例进行标记
@pytest.mark.P0
c. 运行指定标记的用例
在终端输入: pytest -m "P0"
1.2.5.2. 标记跳过用例
无条件跳过:@pytest.mark.skip(reason="跳过原因描述")
在指定条件下跳过:@pytest.mark.skipif(condition, reason="跳过原因描述")
1.2.5.3. 标记用例为预期失败
@pytest.mark.xfail(reason="预期失败描述")
对于功能未完成或已知有问题的用例,可以用 xfail 标记,这样即使断言失败,也不会影响其他测试用例的的执行。
执行 case 后,控制台中显示:
1.2.5.4. 参数化
我们进行接口测试时,往往很多时候操作步骤都是一样的,只有数据不一样,这时候就可以使用参数化功能,来减少代码冗余。
@pytest.mark.parametrize(argnames, argvalues, ids=None)
举例,如下图所示,装饰器会自动对 list_params 解包并赋值给装饰器的第一参数。装饰器的第一个参数中逗号分隔的变量可以作为测试方法的参数,在测试方法内就可以直接获取这些变量的值。
Allure 是一种灵活、轻量级、多语言的测试报告工具,以简洁精美的 web 报告形式展示。
Python 中有一个第三方库:allure-pytest,用于连接 pytest 和 allure ,使它们可以更好的配合使用。
Allure的常用用法:
使用方法 |
说明 |
---|---|
@allure.epic() | 描述史诗,即未拆解的story |
@allure.feature() | 描述功能模块 |
@allure.story() | 描述用户故事 |
@allure.title() | 描述用例标题 |
@allure.step() | 描述用例步骤 |
@allure.severity() | 描述用例等级:blocker,critical,normal,minor,trivial |
报告的主要页面介绍:
该页面展示本次执行结果的统计信息,比如执行结果成功失败比例、测试用例等级分布、用例执行时间等。
该页面根据代码中设定的 @allure.feature()、@allure.story() 等来展示用例执行的结果,这里可以看到用例执行的详细信息。