企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
pytest 是一个用于 Python 的强大的测试框架。它支持功能测试、单元测试和模拟等测试需求,通常与 Flask(轻量级的 Python web 框架)一起使用。 ## pytest 特点 * 入门简单,文档丰富 * 支持参数化,可以从教细的力度控制测试用例 * 能够支持简单的单元测试和复杂的功能测试 * 支持测试跳过,失败case标记 * 支持失败重试 * 支持由nose,unittest编写的测试用例 * 支持HTML报告,eport框架----allure 也支持了pytest * 和jenkins持续集成很方便 * 具有很多第三方插件,并且可以自定义扩展 ## pytest 测试用例设计原则 * 所有的包必须要有__init__.py文件 * 文件名必须以*_test.py或者test_*.py命名 * 测试类必须以Test开头,并且不能包含__init__方法 * 测试函数必须以test开头 * 测试类里以test_开头的方法 ## pytest + allure 测试报表 ## allure-behave 通过指定`allure_behave.formatter:AllureFormatter`作为格式化器和输出目录,来运行`behave`: ``` behave -f allure_behave.formatter:AllureFormatter -o %allure_result_folder% ./features ``` * 将测试结果存放在`%allure_result_folder%`中,而不是直接生成报告。 然后通过 Allure 命令行(需要另外安装)来生成报告: ``` allure serve %allure_result_folder% ``` 这将会生成本地的 Allure 报告,并自动在默认浏览器中打开。 另外,需要注意的是,Allure 提供了很多额外的功能(例如添加附件、与测试用例关联的问题等),要利用这些功能,你需要在你的步骤定义中使用 Allure 的 Python 库 (`allure-python-commons`) 提供的装饰器和函数。 ## allure Allure 是一款开源的测试报告生成工具,可以生成清晰、形象的测试报告,以可视化的形式展示测试执行结果。Allure 内置了许多特性,如测试案例追踪、测试时长趋势、失败情况分析等。 安装并使用 Allure 的过程如下: 1. **安装 Allure**:首先需要在电脑上安装 Allure。如果你使用的是 macOS,可以通过 Homebrew 安装: ~~~ bashCopy codebrew install allure ~~~ For Windows, you can download it from the Allure Framework's GitHub page and add it to your path. 2. **生成 Allure 结果**:在你的测试框架里进行设置,使其在运行测试时能生成 Allure 原始结果。这需要额外的插件或库。例如,如果你使用的是 pytest,你需要安装`pytest-allure-adaptor`插件: ~~~ pip install pytest-allure-adaptor ~~~ 并在运行 pytest 时用`--alluredir`参数指定结果输出的目录: ~~~ pytest --alluredir=result_directory ~~~ 3. **生成报告**:使用 Allure 命令行工具处理输出的结果,并生成 HTML 格式的报告: ~~~ allure serve result_directory ~~~ 这条命令将启动一个本地 Web 服务器,自动打开浏览器显示生成的报告。你可以看到各种可视化的统计信息,覆盖率,失败的用例等。 注意,使用 Allure 可能需要你稍微改变写测试用例的方式,以便提供更多测试细节。例如,你需要增加一些注解来提供测试步骤的描述或测试案例的元数据。 ## Allure 是一种易于生成的、易于阅读的测试报告框架。它支持多种测试工具和库,并以跨平台的可视化方式展示测试结果。下面我们来看看 要查看 Allure 报告,请安装 Allure 命令行工具,并使用`allure serve`命令 (如`allure serve %allure_result_folder%`) 生成报告。报告将在默认浏览器中打开,展示你的测试结果和相关详细信息。 ## ### pytest + Allure 以 pytest 为例,你可以通过下面的方式使用 Allure: 安装 Allure: Allure 命令行工具可以通过以下方式获取: 对于 macOS 系统,可以使用 Homebrew 进行安装: bash Copy code brew install allure 对于 Windows 系统,可以下载安装包并正确设置环境变量,详见 Allure Framework 官网安装指南。 安装pytest插件: 你需要在 Python 项目中安装 pytest-allure-adaptor 插件: bash Copy code pip install allure-pytest 运行测试并生成报告: 运行 pytest 时,加上 --alluredir 参数,指定一个目录来存储测试结果: bash Copy code pytest --alluredir=/path/to/results/directory 当测试运行完成后,用 Allure 命令行工具生成报告: bash Copy code allure serve /path/to/results/directory 这将会在默认浏览器中打开一份详细的测试报告,包括测试覆盖率、失败的测试以及它们的堆栈跟踪等信息. 如果你使用的是其他测试框架,你也可以找到相应的 Allure 插件或库来生成测试报告。注意,使用 Allure 可能需要你改变一些测试写法,以便提供更多测试细节(例如,增加装饰器来标注用例的优先级和严重程度、增加步骤的描述等)。 ## pytest 如何输出 在 Python 中,可以以多种方式连接(或拼接)字符串。以下是几种常见的字符串连接方法: 1. 使用加号 (+) 操作符: ~~~ pythonCopy codestring1 = "Hello" string2 = "World" result = string1 + " " + string2 # 结果将是 "Hello World" ~~~ 2. 使用 join() 方法: ~~~ pythonCopy codestrings = ["Hello", "World"] result = " ".join(strings) # 结果将是 "Hello World" ~~~ `join()`是非常有效的方法,尤其是当你有许多字符串需要连接时。 3. 使用格式化字符串 (f-string,Python 3.6+): ~~~ pythonCopy codename = "World" result = f"Hello {name}" # 结果将是 "Hello World" ~~~ 4. 使用格式化方法 format(): ~~~ pythonCopy coderesult = "{} {}".format("Hello", "World") # 结果将是 "Hello World" ~~~ 5. 使用百分号 (%) 格式化(不建议使用,因为它是较旧的格式化方法): ~~~ pythonCopy coderesult = "%s %s" % ("Hello", "World") # 结果将是 "Hello World" ~~~ 在大多数情况下,加号 (+) 是最直观的方式,但如果涉及到多个字符串的复杂连接操作,`join()`或格式化字符串可能更有效、更易读。 pytest print 无效吗 ![bot](https://davinci.mediatek.inc/_next/image?url=%2Fbot.png&w=64&q=75) 在默认情况下,当运行`pytest`时,标准输出(`print`语句的结果)不会显示在控制台上,除非测试失败。这是因为`pytest`捕获了输出,以便在测试失败时只显示相关的输出信息。 但是,如果你希望在测试执行时看到输出,你可以使用以下几种方法之一: 1. **\-s或--capture=no参数**: 运行`pytest`时加上`-s`选项,这将禁用所有的输出捕获。 ~~~ bashCopy codepytest -s ~~~ 使用该选项后,所有的`print`调用都会正常输出到控制台。 2. **使用logging**: 在测试中使用`logging`模块而不是`print`是一个更加标准的做法。在配置了日志处理器后,即使在没有指定`-s`参数的情况下,日志输出也会显示在控制台上。 首先设置logger: ~~~ pythonCopy codeimport logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) ~~~ 然后在你的测试中使用它: ~~~ pythonCopy codelogger.info("Your log message") ~~~ 3. **pytest的详细模式**: 运行`pytest`时加上`-v`选项,它将开启详细模式,虽然这并不会显示所有的输出,但它可以在测试报告中提供更多信息。 ~~~ bashCopy codepytest -v ~~~ 选择哪种方法取决于你想从测试运行中获取什么样的输出。如果你想看到测试执行过程中的实时打印输出,使用`-s`参数是最简单直接的方式。如果你想要更加结构化的日志输出,那么使用`logging`模块会更好。 ## 参考 * https://docs.pytest.org/en/latest/contents.html * https://docs.pytest.org/en/7.1.x/reference/customize.html