Pytest----设计开发自动化测试框架

【原文链接】Pytest----设计开发自动化测试框架

这里就一步一步的设计一套实用的自动化测试框架。比如我们将此测试框架命名为eTest,因此首先创建eTest目录,为了考虑后续扩展性,比如后期如果觉得测试框架可以发布为python包,则此时就要考虑好,因此在eTest目录中继续创建一个eTest目录,当然暂时先不考虑发布包的方式,但是要为后续可能的功能增强做好兼容性扩展性设计。这里后面的操作将都在eTest/eTest/ 目录下。
首先在eTest/eTest/ 目录下创建tests文件夹,用于存放自动化测试脚本,然后再创建libs文件夹,用于存放公共的函数封装,那么libs目录下这里就不再进行深入的讲解了,这个主要根据具体业务的自动化脚本进行恰当的函数库封装,作为公共的框架,这里就不再进一步的深入了。
至此需要说明的一点,后续自动化脚本的执行位置应该要定位在 eTest/eTest/tests 目录下,即eTest/eTest/tests/目录相当于测试脚本的根目录,因此首先在eTest/eTest/tests目录下创建一个pytest.ini文件,用于配置通用的公共的自动化脚本。
首先配置测试函数、测试类、测试文件的命名规则,虽然说一般来说不推荐对默认的命名规则进行修改,但是由于默认的规则中存在一个很容易混淆的点,即pytest中默认的要求测试文件必须是test_.py或者test.py格式,测试方法必须是test开头,测试必须是Test开头,这里面就涉及到了一些混乱,比如有的有的以test_开头即要求带下划线,有的则没有要求下划线,有的可以以_test结尾,有的又不能,这本身就很容易引起混乱,因此这里可以完全把范围扩大一点,即将测试用例文件的规则修改为以test.py或_test.py,测试函数以test_开头或者以_test结尾,测试类以Test开头或Test结尾,这样一来就很容易记忆了,而且也能包括默认的的pytest规则,这里是否带下划线完全根据python代码规范要求,即文件名或者测试函数名均为小写,此时必须要带下划线,而测试类首字母大写,因此不需要带下划线,这样一来既能包含默认的pytest命名规则,有能做到风格统一,因此首先在pytest.ini中设置如下配置:

[pytest]
python_files = test_*  *_test.py
python_classes =  Test*  *Test
python_functions = test_*  *_test

接下来,考虑测试脚本中使用的标签,因为如果标签不注册,在执行的时候会产生大量的告警,因此这里事先注册号几个常用通用的标签,标签按照通常的测试分类进行注册,即在pytest.ini中增加markers的内容,增加后内容为:

[pytest]
python_files = test_*  *_test.py
python_classes =  Test*  *Test
python_functions = test_*  *_test

markers =
    api: api tests
    smoke: smoke tests
    function: function tests
    system: system tests
    security: security tests
    performance: performance tests

接下来配置日志,这里将实时日志和捕获日志全部配置为推荐配置,如下

[pytest]
python_files = test_*  *_test.py
python_classes =  Test*  *Test
python_functions = test_*  *_test

markers =
    api: api tests
    smoke: smoke tests
    function: function tests
    system: system tests
    security: security tests
    performance: performance tests

log_cli = True
log_cli_level = info
log_cli_format = %(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(message)s"
log_cli_date_format = %Y-%m-%d %H:%M:%S
log_level = info
log_file = eTest.log
log_format = %(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(message)s"
log_date_format = %Y-%m-%d %H:%M:%S

接下来配置pytest命令默认的参数,比如这只将 –s 参数加到默认的参数中,pytest.ini此时的配置如下所示,这里配置 –s 参数主要是将默认配置放在这里,当用户看到时如果想增加配置,很自然的可以想到直接在 adopts 后面增加即可。

[pytest]
python_files = test_*  *_test.py
python_classes =  Test*  *Test
python_functions = test_*  *_test

markers =
    api: api tests
    smoke: smoke tests
    function: function tests
    system: system tests
    security: security tests
    performance: performance tests

log_cli = True
log_cli_level = info
log_cli_format = %(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(message)s"
log_cli_date_format = %Y-%m-%d %H:%M:%S
log_level = info
log_file = eTest.log
log_format = %(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(message)s"
log_date_format = %Y-%m-%d %H:%M:%S

addopts = -s

至此pytest.ini的配置基本就能满足通常情况下的场景了。
然后在 eTest/eTest/tests/ 目录下创建env.py文件,用于存放测试环境信息,目的在于做到测试脚本与环境解耦,即通过修改env.py中的环境信息即可做到脚本迁移环境执行,这一点对于设计自动化测试框架来说是至关重要的。此外,因为python文件在引入的时候就会自动执行文件,因此建议使用类来组织变量,即这里在 eTest/eTest/tests/env.py中创建Env类,在类中定义变量,比如这定义ip、username、password。

class Env:
    ip="127.0.0.1"
    user="root"
    password="root"

接下来在eTest/eTest/tests/目录下创建conftest.py文件,在conftest.py中定义一个用于传递环境变量的值的fixture即env,如下所示:

import pytest
from .env import Env

@pytest.fixture(scope="session")
def env():
    return Env
	然后继续在conftest.py中编写一个session级别的fixture,用于编写session级别的setup和teardown,此时conftest.py的代码如下:
import pytest
import logging
from .env import Env

@pytest.fixture(scope="session")
def env():
    return Env

@pytest.fixture(scope="session",autouse=True)
def session_setup_teardown():
    logging.info("开始执行session级别的setup ...")
    # session级的setup,可在下面继续编写session级别的setup操作

    yield
    logging.info("开始执行session级别的teardown ...")
    # session级别的teardown,可在下面继续编写session级别的teardown的操作

然后在eTest/eTest/tests/ 目录下依次创建目录api-test、function-test、performance-test、security-test、system-test,依次存放api测试用例、功能测试用例、性能测试用例、安全测试用例、系统测试用例。注意这里创建的目录中都默认创建一个__init__.py文件,用于标志这些目录均为可导入的包,然后在eTest/eTest/tests/api-test/目录下继续创建一个脚本模板,比如test_api_example.py,然后编写脚本模板代码如下,这里使用allure生成报告,使用logging打印日志。当后续继续编写脚本时,可以直接新建脚本文件,将如下模板拷贝过去,然后进行修改填充即可,此外这里还演示了如何使用全局环境变量。

import pytest
import allure
import logging


@allure.step("测试步骤1:xxx")
def step_1(env):
    logging.info("测试步骤1:xxx ...")
    # 编写步骤1的内容,比如这里打印env.ip
    logging.info(env.ip)

@allure.step("测试步骤2:xxx")
def step_2(env):
    logging.info("测试步骤2:xxx ...")
    # 编写步骤1的内容,比如这里打印env.username 和 env.password
    logging.info(env.username)
    logging.info(env.password)


@allure.feature("功能:xxx")
@allure.issue(url="www.xxx.com",name="需求来源于xxx")
@allure.link(url="www.xxx.com",name="需求文档地址")
@allure.story("用户故事:xxx")
@allure.severity('normal')
@allure.title("测试用例:xxxc")
@allure.description("测试用例描述:xxx")
def test_api_01(env):
    step_1(env)
    step_2(env)

最后,打开cmd窗口,进入eTest目录下,通过如下命令即可创建一个基于Python3.7版本的虚拟机环境

pipenv –python 3.7

然后执行如下命令即可激活此虚拟环境。

pipenv shell

然后安装依赖。

pip install pytest
pip install allure-pytest

然后执行如下命令生成依赖文件。

pip freeze > requirements.txt

此时即会在eTest/目录下生成requirements.txt文件,其内容如下所示。

allure-pytest==2.12.0
allure-python-commons==2.12.0
attrs==22.1.0
colorama==0.4.6
exceptiongroup==1.0.4
importlib-metadata==5.1.0
iniconfig==1.1.1
packaging==22.0
pluggy==1.0.0
pytest==7.2.0
six==1.16.0
tomli==2.0.1
typing_extensions==4.4.0
zipp==3.11.0

然后在cmd中切换到eTest/eTest/tests目录下,执行pytest命令,结果如下所示,可见所有日志配置均已生效。

(eTest-OXFOQ-1z) G:\github\eTest\eTest\tests>pytest
=================== test session starts ===================
platform win32 -- Python 3.7.9, pytest-7.2.0, pluggy-1.0.0
rootdir: G:\github\eTest\eTest\tests, configfile: pytest.ini
plugins: allure-pytest-2.12.0
collected 1 item

api-test/test_api_example.py::test_api_01
--------------------- live log setup ----------------------
2022-12-11 11:31:46 | INFO | conftest.py:11 | 开始执行session级别的setup ..."
---------------------- live log call ----------------------
2022-12-11 11:31:46 | INFO | test_api_example.py:8 | 测试步 骤1:xxx ..."
2022-12-11 11:31:46 | INFO | test_api_example.py:10 | 127.0.0.1"
2022-12-11 11:31:46 | INFO | test_api_example.py:14 | 测试步骤2:xxx ..."
2022-12-11 11:31:46 | INFO | test_api_example.py:16 | root"
2022-12-11 11:31:46 | INFO | test_api_example.py:17 | root"
PASSED
-------------------- live log teardown --------------------
2022-12-11 11:31:46 | INFO | conftest.py:15 | 开始执行session级别的teardown ..."


==================== 1 passed in 0.03s ====================

(eTest-OXFOQ-1z) G:\github\eTest\eTest\tests>

至此一个简单使用的基于pytest自动化测试框架就搭建完成了,如果想编写自动化脚本只需要在eTest/eTest/tests目录下对应的测试类型的目录下进行脚本开发即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python Request Pytest Pytest-HTML 集成的 Api 自动化测试框架 是一款基于 Python 编程语言的自动化测试框架,主要用于对 API 接口进行自动化测试。该框架通过使用 Python 编写测试脚本和调用 Request 库和 Pytest 框架来实现 API 测试,并且生成可视化报告,提高测试效率和可观性。 使用 Python Request Pytest Pytest-HTML 集成的 Api 自动化测试框架 进行 API 自动化测试,可以实现以下功能: 1. 自动化执行 API 接口的测试用例,提高测试效率和准确性。 2. 使用 Pytest 框架,可以灵活地编写测试脚本,支持各种测试场景和用例。 3. 使用 Request 库,可以方便地发送 HTTP 请求,并对响应结果进行处理。 4. 结合使用 Pytest-HTML,可以生成易于阅读的测试报告,包括测试结果、测试用例执行情况、错误信息等。 在使用这个框架的过程中,开发人员可以遵循一些最佳实践,例如: 1. 编写清晰明了的测试用例,并保持测试脚本的结构和格式清晰。 2. 使用参数化测试功能,以确保测试用例的完备性和可扩展性。 3. 在测试执行前,准备好测试数据和测试环境,并确保测试用例的执行顺序和前后端接口的依赖关系正确。 总之,Python Request Pytest Pytest-HTML 集成的 Api 自动化测试框架 是一款功能强大、简单易用且可扩展的自动化测试框架,适用于任何需要对 API 接口进行自动化测试的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值