Pytest+allure详解

文章介绍了从传统的unittest框架转向pytest框架的原因,以及如何使用allure插件来生成更美观、详细的测试报告。通过示例代码展示了如何在pytest中集成allure,包括feature、story、title的设置,以及测试步骤和断言的处理。最后,提到了测试报告的生成和查看方式,包括在Jenkins等环境中集成和远程访问的可能性。

一、框架介绍

   曾几何时我们对unittest框架+htmlrunner这套测试框有着满载回忆,随着时代的变迁和技术更新,unittest框架已经褪去曾经的辉煌停止更新,htmlrunner的测试报告也还是一如既往简陋不堪,在这个内卷比较严重的大环境下,我们一份眼花缭乱、耳目一新、高端大气的测试报告可能会带你度过当前的艰难岁月。

二、安装方法

2.1、pytest 安装

  • 安装命令: pip install Pytest

3.2、 allure安装

三、框架代码

#!/usr/bin/python
# -*- coding: utf-8 -*-

#@Users: LiMu
#@Files:pytest_allrure.py
#@Times: 2022/3/11 
#@Software:PyCharm

import os
import allure
import pytest

#feature、story、title在测试报告中文本是以层级展示
#casesum是用例列表,例如[ 用例壹, 用例贰, 用例叁 ]
@allure.feature('某应用测试用例')
class TestCase(object):
    @pytest.mark.parametrize("casexx", casesum)
    def test_case(self,casexx):
        allure.dynamic.story(casexx.get("CaseModel"))
        allure.dynamic.title(casexx.get("CaseName"))
        allure.dynamic.severity(casexx.get("level"))

        #测试步骤及断言,step可以看成测试报告TestBody的标题,attach则为TestBody打印内容.
        with allure.step("操作步骤:"):
            allure.attach(casexx.get("Steps"))
        with allure.step("测试断言:"):
            if casexx.get("Asserts")[0] == casexx.get("Asserts")[1]:
                allure.attach("用例执行通过!","测试结果:")
            else:
                allure.attach("用例执行失败!", "测试结果:")
                allure.attach(casexx.get("Asserts")[1],"实际返回结果:")
        assert casexx.get("Asserts")[0] == casexx.get("Asserts")[1]


if __name__ == '__main__':
    #pytest.main执行代码并生成测试报告数据至allure-result文件
    pytest.main(["-s","pytest_allrure.py","--alluredir", "../test_report/allure-result"])
    #使用allure工具生成测试报告
    os.system("allure generate ../test_report/allure-result/ -o ../test_report/allure-report --clean")
    #将测试报告中的history复制至测试报告数据文件,不进行该操作首页趋势图取不到数据
    os.system(r"xcopy  E:\Pyfiles\test_report\allure-report\history E:\Pyfiles\test_report\allure-result\history /E /Y /I")

四、测试报告

   执行测试代码后就会生成测试数据文件allure-result和测试报告文件allure-report,在allure-report下用游览器打开文件index.html就可以看到你的测试报告啦,当然这样打开测试报告特别low,我们可以把框架集成在Jenkins,可以在Jenkins打开汇自动调用游览器,也可以用Tomcat或者Nginx部署一个环境打开测试报告,同时还可以使用公网IP或者域名进行广域网访问。

测试报告贴图

  • 报告首页

  • 报告详情

  • 报告趋势图


 

<think>好的,我现在需要帮助用户搭建一个使用Python、requests、pytestAllure和YAML的测试框架,并且用户希望有图解指导。首先,我需要回忆之前用户提供的引用内容,看看有没有相关的结构或步骤可以参考。 用户提到的引用中有项目结构,比如api层、common工具类、config配置、data测试数据等。这些部分都是框架的重要组成部分。我需要按照这些模块来组织回答,确保每个部分的功能清晰。 接下来,用户需要图解,但作为文本回复,无法提供图片,所以需要用文字描述结构,可能的话用代码块和目录树来展示。例如,项目结构可以用树状图表示,这样用户能更直观地理解各个目录的作用。 然后,步骤分解很重要。需要分步骤讲解如何封装请求、管理测试数据、编写测试用例、配置pytest和生成Allure报告。每个步骤需要示例代码,比如如何用requests封装HTTP请求,如何用YAML文件管理测试数据,以及如何用pytest夹具和装饰器组织测试用例。 另外,用户可能对如何运行测试并生成报告特别感兴趣,所以需要详细说明pytest的执行命令和Allure的生成命令。同时,要提到配置环境,比如安装必要的库,这可以通过requirements.txt来管理,确保用户不会遗漏依赖。 还要考虑测试框架的可扩展性和维护性,比如关键字封装和数据驱动测试,这样用户可以在现有框架上轻松添加更多测试用例。可能需要解释如何将多个接口调用封装成关键字,提高代码复用性。 最后,用户可能遇到的问题,比如环境配置错误、YAML格式不正确、Allure报告生成失败等,虽然用户没有直接提问,但在步骤中提示常见问题和解决方法会更好。但根据用户要求,问题部分需要生成相关问题,所以可能将这些放在最后作为相关问题。 需要确保所有代码示例符合Python语法,特别是缩进和导入部分。同时,YAML文件的结构要正确,比如使用键值对和列表。测试用例的编写要展示如何使用参数化装饰器来读取YAML数据。 总结一下,回答的结构应该是:项目结构图解(文字版)、步骤分解(安装依赖、封装请求、管理数据、编写用例、配置pytest、生成报告)、示例代码、常见问题提示和相关问题。需要参考用户提供的引用内容,尤其是目录结构和各层的作用,确保回答与之前的引用一致,并且详细具体,用户能一步步跟着操作。</think># Python+Requests+Pytest+Allure+YAML测试框架搭建图解教程 ## 一、框架架构图解(文字版) ``` 项目结构 ├── api/ # 接口封装层 ├── common/ # 通用工具类 ├── config/ # 配置文件 ├── data/ # YAML测试数据 ├── testcases/ # pytest测试用例 ├── conftest.py # pytest全局夹具 ├── pytest.ini # pytest配置 └── requirements.txt# 依赖库 ``` ## 二、搭建步骤详解 ### 1. 环境准备 安装依赖库: ```bash # requirements.txt内容 requests==2.28.1 pytest==7.2.0 pytest-html==3.2.0 PyYAML==6.0 allure-pytest==2.12.0 ``` ### 2. 接口封装层(api/) ```python # api/user_api.py import requests class UserAPI: def __init__(self, base_url="http://api.example.com"): self.base_url = base_url def get_user(self, user_id): """获取用户信息""" return requests.get(f"{self.base_url}/users/{user_id}") def create_user(self, data): """创建用户""" return requests.post(f"{self.base_url}/users", json=data) ``` ### 3. 测试数据管理(data/user.yaml) ```yaml test_get_user: - case_id: TC001 user_id: 123 expected_code: 200 test_create_user: - case_id: TC002 data: name: "测试用户" email: "test@example.com" expected_code: 201 ``` ### 4. 测试用例编写(testcases/test_user.py) ```python import pytest import allure from api.user_api import UserAPI @allure.feature("用户管理") class TestUser: @pytest.mark.parametrize("case_data", yaml.safe_load(open("data/user.yaml"))) @allure.title("测试用户查询 - {case_data[case_id]}") def test_get_user(self, case_data): response = UserAPI().get_user(case_data["user_id"]) assert response.status_code == case_data["expected_code"] ``` ### 5. pytest配置(pytest.ini) ```ini [pytest] addopts = -v -s --alluredir=./results testpaths = testcases python_files = test_*.py ``` ### 6. Allure报告生成 ```bash # 生成测试结果 pytest # 生成可视化报告 allure serve results ``` ## 三、关键技术点说明 1. **数据驱动测试**:通过YAML文件管理测试数据,实现测试逻辑与数据分离[^5] 2. **请求封装**:将HTTP请求封装为Python类方法,提高代码复用性[^2] 3. **夹具管理**:使用`conftest.py`管理全局夹具,如token获取、数据库连接等 4. **报告定制**:通过Allure添加`@allure.step`实现操作步骤可视化追踪[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值