09 接口自动化-用例管理框架pytest之allure报告定制以及数据驱动

文章目录

      • 一、企业级的Allure报告的定制
        • 左边的定制:
        • 右边的定制:
          • 1.用例的严重程度/优先级
          • 2.用例描述
          • 3.测试用例连接的定制
          • 4.测试用例步骤的定制
          • 5.附件的定制
      • 二、企业中真实的定制有哪些?
      • 三、allure报告如何在本地访问
      • 四、allure中的数据驱动装饰器
        • 第一种用法
        • 第二种用法
        • 第三种用法
          • YAML的数据文件:
          • YAML数据驱动实现:

一、企业级的Allure报告的定制

左边的定制:

1.史诗(项目名称): @allure.epic("项目名称:接口自动化测试")
2.特性(模块名称): @allure.feature("模块名称:用户模块")
3.分组(接口名称): @allure.story("接口名称:查询用户")
4.测试用例标题:

  • @allure.title("测试用例标题:输入正确的条件匹配成功"),适用于一个方法对
    应一个用例。

  • allure.dynamic.title("测试用例标题:输入正确的条件匹配成功"),适用于一个
    方法对应多个用例。也就是有数据驱动的情况。

    import allure
    import pytest

    @allure.epic("项目名称:接口自动化测试")
    @allure.feature("模块名称:用户模块")
    class User:
    @allure.story("接口名称:查询用户")
    @allure.title("测试用例标题:输入正确的条件匹配成功")
    def test_user(self):
    # allure.dynamic.title("测试用例标题:输入正确的条件匹配成功")
    print("test_user" )
    assert 'abc' in 'abcd'

右边的定制:
1.用例的严重程度/优先级
  • blocker:中断缺陷&致命bug:内存泄漏,用户数据丢失,系统奔溃。
  • critical:临界缺陷&严重bug:功能未实现,功能错误,重复提交
  • normal:一般缺陷&一般bug,条件查询有误,大数据了无响应等
  • minor:次要缺陷:提示bug,颜色搭配不好,字体排列不整齐,错别字。
  • trivial:轻微缺陷:轻微bug,没有使用专业术语,必填项无提示,建议。

@allure.severity(allure.severity_level.BLOCKER)
注意:这个装饰器可以修饰方法也可以修饰类。

2.用例描述

和用例标题一样,有两种写法:@allure.description("") allure.dynamic.description("")

复制代码
import allure
import pytest

class TestUser:
    @allure.description("用户测试用例描述")
    @pytest.mark.user
    def test_get_userinfo(self):
        # allure.dynamic.description("用户测试用例描述2")
        print("get_userinfo" )
        assert 'abc' in 'abcd'
3.测试用例连接的定制
4.测试用例步骤的定制

有两种写法:

  • @allure.step("") :不建议使用,不灵活,只能传入一个title值,不能写多个步骤

  • with allure.step(""):推荐使用,比较灵活

    import allure
    import pytest

    class TestUser:
    # @allure.step("测试步骤") 不建议使用,不灵活,只能传入一个title值,不能写多个步骤
    @pytest.mark.user
    def test_get_userinfo(self):
    # 增加测试步骤-建议使用
    for a in range(1, 5):
    with allure.step("测试用例步骤" + str(a) + ""):
    print("步骤" + str(a) + "执行的脚本")
    print("get_userinfo" )
    assert 'abc' in 'abcd'

5.附件的定制

body=附件内容, name=None文件名, attachment_type=None文件扩展名

  • web自动化

    web自动化

    with open(r"./screenshots/logo.png", mode="rb") as f:
    allure.attach(body=f.read(), name="用户测试错误截图",attachment_type=allure.attachment_type.PNG)

  • 接口自动化

    #接口自动化
    allure.attach(body="https://api.weixin.qq.com/cgi‐bin/token", name="请求地址:",attachment_type=allure.attachment_type.TEXT)
    allure.attach(body="get", name="请求方式:", attachment_type=allure.attachment_type.TEXT)
    data = {
    "grant_type": "client_credential",
    "appid": "wx6b11b3efd1cdc290",
    "secret": "106a9c6157c4db5f6029918738f9529d"
    }
    allure.attach(body=json.dumps(data), name="请求数据:", attachment_type=allure.attachment_type.TEXT)
    rep = requests.get(url="https://api.weixin.qq.com/cgi‐bin/token", params=data)
    allure.attach(body=str(rep.status_code)+rep.text, name="响应数据:", attachment_type=allure.attachment_type.TEXT)

二、企业中真实的定制有哪些?

  • [email protected]("项目名称")
  • [email protected]("模块名称")
  • [email protected]("接口名称")
  • [email protected](allure.severity_level.BLOCKER) 严重程度
  • 5.allure.dynamic.title("用例名称:测试用例名称")
  • 6.allure.dynamic.description("用例描述:测试用例描述")
  • 7.with allure.step("测试步骤的名称")
  • 8.allure.attach(body, name, attachment_type, extension) 测试用例附件

7与8一般会进行封装,后期讲解

三、allure报告如何在本地访问

因为pycharm自带容器:tomcat,Nginx,weblogic。有以下两种方式实现本地访问

  • 1.在本地搭建本地服务器。
  • 2.通过启动服务打开allure报告。(简单)
    allure open [报告路径]

四、allure中的数据驱动装饰器

@pytest.mark.parametrize(参数名,数据(list,tuple,字典列表,字典元祖))

第一种用法
复制代码
@allure.story("接口名称:测试数据驱动")
@pytest.mark.parametrize("args_name",["无忧渡","藏海传","折腰"])
@pytest.mark.user
def test_get_data(self,args_name):
    print(args_name)
第二种用法
复制代码
@allure.story("接口名称:测试数据驱动")
@pytest.mark.parametrize("order,name",[["01","《无忧渡》"],["04","《藏海传》"],["03","《折腰》"]])
@pytest.mark.user
def test_get_data(self,order,name):
    print("序号:"+order+"剧名:"+name)
第三种用法

使用yaml 数据进行数据驱动

YAML有两种数据:

  • -开头的代码list
  • 键值对:key:value
YAML的数据文件:
复制代码
 -
    name: get correct user token
    description: When trying to obtain a user token with a valid appid, correct secret, and correct grant_type, the request will succeed.
    request:
      url: https://api.weixin.qq.com/cgi-bin/token
      method: GET
      data:
        appid: wx74a8627810cfa308
        secret: e40a02f9d79a8097df497e6aaf93ab80
        grant_type: client_credential
    validate: None
 -
    name: don't get correct user token
    description: When trying to obtain a user token with an empty appid, correct secret, and correct grant_type, an error occurs.
    request:
      url: https://api.weixin.qq.com/cgi-bin/token
      method: GET
      data:
        appid:
        secret: e40a02f9d79a8097df497e6aaf93ab80
        grant_type: client_credential
    validate: None
 -
    name: don't get correct user token
    description: When trying to obtain a user token with an correct appid, error secret, and correct grant_type, an error occurs.
    request:
      url: https://api.weixin.qq.com/cgi-bin/token
      method: GET
      data:
        appid: wx74a8627810cfa308
        secret: e40a02f9d79a8097df497e6aaf93ab81
        grant_type: client_credential
    validate: None

 -
    name: don't get correct user token
    description: When trying to obtain a user token with an correct appid, correct secret, and empty grant_type, an error occurs.
    request:
      url: https://api.weixin.qq.com/cgi-bin/token
      method: GET
      data:
        appid: wx74a8627810cfa308
        secret: e40a02f9d79a8097df497e6aaf93ab81
        grant_type:
    validate: None
YAML数据驱动实现:

注:记得安装 PyYAML

复制代码
# -*- coding: utf-8 -*-
import json
import allure
import pytest
import requests
import yaml

# 读取 yaml 文件
def read_yaml(path):
    with open(path,mode="r",encoding="utf-8") as f:
        value = yaml.load(f,Loader=yaml.FullLoader)
        return value


@allure.epic("项目名称:接口自动化测试")
@allure.feature("模块名称:用户模块")
class TestUser:
    @allure.story("接口名称:获取用户token")
    @allure.severity(allure.severity_level.BLOCKER)
    @pytest.mark.user
    @pytest.mark.parametrize("case_info",read_yaml("./testcases/user_manage/get_token.yml"))
    def test_get_user_token(self,case_info):
        print(case_info)
        allure.dynamic.title(case_info['name'])
        allure.dynamic.description(case_info['description'])
        allure.attach(body=case_info['request']['url'],name="请求地址:",attachment_type=allure.attachment_type.TEXT)
        allure.attach(body=case_info['request']["method"],name="请求方式:",attachment_type=allure.attachment_type.TEXT)
        data = case_info['request']["data"]
        allure.attach(body=json.dumps(data),name="请求数据:",attachment_type=allure.attachment_type.TEXT)
        rep = requests.get(url=case_info['request']['url'],params=data)
        allure.attach(body=str(rep.status_code) + rep.text,name="响应数据:",attachment_type=allure.attachment_type.TEXT)
相关推荐
2501_915374352 小时前
LangChain自动化工作流实战教程:从任务编排到智能决策
python·langchain·自动化
勇太的数分之旅7 小时前
Excel大厂自动化报表实战(互联网金融-数据分析周报制作下)
信息可视化·金融·数据分析·自动化·excel·数据可视化
FJSAY8 小时前
我自己动手写了一个MySQL自动化备份脚本,基于docker
mysql·docker·自动化
FF-Studio8 小时前
万物皆数:构建数字信号处理的数学基石
算法·数学建模·fpga开发·自动化·音视频·信号处理·dsp开发
MiaoChuPPT10 小时前
告别手动做PPT!4款AI工具实现自动化生成
人工智能·自动化·powerpoint
爱记录的小磊1 天前
java-selenium自动化快速入门
java·selenium·自动化
孙克旭_1 天前
day031-Shell自动化编程-数组与案例
linux·运维·自动化
喜欢踢足球的老罗1 天前
自动化模型管理:MediaPipe Android SDK 中的模型文件下载与加载机制
android·运维·自动化
岁月如歌,青春不败1 天前
Python-PLAXIS自动化建模技术与典型岩土工程
python·自动化·岩土工程·公路·地球科学·铁路·地质工程
遇见火星1 天前
自动化KVM虚拟机创建脚本详解:从模板到高效部署的线上实践!
运维·自动化·kvm