软件测试学习笔记丨Allure2报告中添加用例分类

101 阅读7分钟

本文转自测试人社区,原文链接:ceshiren.com/t/topic/283…

Allure 分类简介

  • 应用场景:可以为项目,以及项目下的不同模块对用例进行分类管理。也可以运行某个类别下的用例。
  • 报告展示:类别会展示在测试报告的 Behaviors 栏目下。
  • Allure 提供了三个注解:
    • @Epic:敏捷里面的概念,定义史诗,往下是 feature。
    • @Feature:功能点的描述,理解成模块往下是 story。
    • @Story:故事 story 是 feature 的子集。

Allure epic/feature/story 的关系

  • epic:敏捷里面的概念,用来定义史诗(需求,项目),相当于定义一个项目。
  • feature:相当于一个功能模块,相当于 testsuite,可以管理很多个子分支 story。
  • story:相当于对应这个功能或者模块下的不同场景,分支功能。
  • epic 与 feature、feature 与 story 类似于父子关系。

系统模块:@Epic/@Epics

  • 应用场景:在测试报告中看到用例所在的项目,或者定义一个项目的需求。
  • 解决方案:@Epic注解。
@Epic("需求1")
//@Epic("需求13")
@Epics({
    @Epic("需求2"),
    @Epic("需求3")
})
@DisplayName("步骤方法验证")
public class StepMethodTest {
    int result;

    @Test
    @DisplayName("加法步骤验证")
    void testSum() {
        //测试逻辑代码
    }

    @Test
    @DisplayName("一个测试方法中添加多个大步骤")
    void testMultipleSteps() {
        //测试逻辑代码
    }

    @Test
    @DisplayName("多个步骤验证")
    void testSum2() {
        //测试逻辑代码
    }
}

功能模块:@Feature/@Features

  • 应用场景:表示被测系统的不同功能模块或特性。
  • 解决方案:@Feature注解。
@Epic("需求1")
//@Epic("需求13")
@Epics({
    @Epic("需求2"),
    @Epic("需求3")
})
@Feature("功能模块2")
@Features({
        @Feature("功能模块3"),
        @Feature("功能模块4")

})
@DisplayName("步骤方法验证")
public class StepMethodTest {
    int result;

    @Test
    @DisplayName("加法步骤验证")
    void testSum() {
        //测试逻辑代码
    }

    @Test
    @DisplayName("一个测试方法中添加多个大步骤")
    void testMultipleSteps() {
        //测试逻辑代码
    }

    @Test
    @DisplayName("多个步骤验证")
    void testSum2() {
        //测试逻辑代码
    }
}
用户故事:@Story/@Stories
应用场景:定义具体的需求、用户故事或场景等。
解决方案:@Story注解。
@Epic("需求1")
//@Epic("需求13")
@Epics({
    @Epic("需求2"),
    @Epic("需求3")
})
@DisplayName("步骤方法验证")
public class StepMethodTest {
    int result;

    @Story("子功能1")
    @Stories({
            @Story("子功能2"),
            @Story("子功能3")

    })
    @Test
    @DisplayName("加法步骤验证")
    void testSum() {
        //测试逻辑代码
    }

    @Story("子功能2")
    @Stories({
            @Story("子功能4"),
            @Story("子功能3")

    })
    @Test
    @DisplayName("一个测试方法中添加多个大步骤")
    void testMultipleSteps() {
        //测试逻辑代码
    }

    @Story("子功能7")
    @Stories({
            @Story("子功能3"),
            @Story("子功能5")
    })
    @Test
    @DisplayName("多个步骤验证")
    void testSum2() {
        //测试逻辑代码
    }
}

用户故事:@Story/@Stories

  • 应用场景:定义具体的需求用户故事场景等。
  • 解决方案:@Story注解
@Epic("需求1")
//@Epic("需求13")
@Epics({
    @Epic("需求2"),
    @Epic("需求3")
})
@DisplayName("步骤方法验证")
public class StepMethodTest {
    int result;

    @Story("子功能1")
    @Stories({
            @Story("子功能2"),
            @Story("子功能3")

    })
    @Test
    @DisplayName("加法步骤验证")
    void testSum() {
        //测试逻辑代码
    }

    @Story("子功能2")
    @Stories({
            @Story("子功能4"),
            @Story("子功能3")

    })
    @Test
    @DisplayName("一个测试方法中添加多个大步骤")
    void testMultipleSteps() {
        //测试逻辑代码
    }

    @Story("子功能7")
    @Stories({
            @Story("子功能3"),
            @Story("子功能5")
    })
    @Test
    @DisplayName("多个步骤验证")
    void testSum2() {
        //测试逻辑代码
    }
}
package com.junit5.allure2casedesciption_l2.allurereport_addstep;

import io.qameta.allure.*;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;

@DisplayName("步骤方法验证-调用方法方式添加用例步骤")
@Epic("购物平台")
//@Epic("需求1")
/**
 * @Epic@Epics共存时,只能各一个,不能有多个
 */
@Epics({
        @Epic("需求2"),
        @Epic("需求3"),
})
@Feature("登录模块")
public class StepMethodTest {
    int result;

    /**
     * 语法结构
     * Allure.step("输入数字 3",()->{
     *     测试步骤代码(可省略)
     * });
     */
    @Test
    @DisplayName("加法步骤验证")
    @Story("通过用户名和密码登录")
    void testSum() {
        Allure.step("输入数字 3");
        int a = pressDigit(3);
        Allure.step("输入加号");
        String str = pressAddition();
        Allure.step("输入数字 2");
        int b = pressDigit(2);
        Allure.step("点击等号");
        result = sum(a, b);
        Allure.step("验证结果是否正确");
        assertEquals(5, result, a + str + b + "计算错误");
    }

    @Test
    @DisplayName("一个测试方法中添加多个大步骤")
    @Story("通过手机号登录")
    void testSteps() {
        List<Executable> list = new ArrayList<>();
        //验证登录搜索后播放是否正常
        Allure.step("步骤1",()->{
            //步骤1代码
            System.out.println("登录");

            Allure.step("输入用户名");
            String name = "admin";
            Allure.step("输入密码");
            String pwd = "123456";
            Allure.step("点击登录");
            String login = name+pwd;
//            assert
            list.add(()->assertEquals("admin123456",login));
            //...
        });
        Allure.step("步骤2",()->{
            //步骤2代码
            System.out.println("搜索");
            Allure.step("输入搜索内容名称");

            Allure.step("点击搜索按钮");

            Allure.step("获取搜索结果");

            list.add(()->assertEquals("搜索成功","搜索成功"));
            //...
        });
        Allure.step("步骤3",()->{
            //步骤3代码
            System.out.println("播放");
            Allure.step("点击播放按钮");

            Allure.step("等待2秒");

            Allure.step("获取当前播放进度时间");
            list.add(()->assertEquals("播放成功","播放成功"));
            //...
        });

        assertAll(list);
    }

    private int pressDigit(int digit) {
        return digit;
    }

    private String pressAddition() {
        return "+";
    }

    public int sum(int... numbers) {
        return IntStream.of(numbers).sum();
    }
}
package com.junit5.allure2casedesciption_l2.allurereport_addstep;

import com.junit5.User;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature;
import io.qameta.allure.Step;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

/**
 * @Step只能添加到非静态测试方法上
 */
@DisplayName("步骤方法验证-注解方式添加用例步骤")
@Epic("购物平台")
@Feature("订单模块")
public class StepAnTest {
    int result;


    /**
     *@Step("步骤描述")
     */
    @Test
    @DisplayName("减法步骤验证")
    @Step("--减法步骤验证")
    void testSub() {
        User user =new User("刘诗诗",28);
        addUser(user);
        int a =  pressDigit(6);
        String str = pressSubtraction();
        int b = pressDigit(2);
        result = subtract(a, b);
        assertEquals(4, result, a + str + b + "计算错误");
    }

    @Step("输入的用户名和年龄为 {user.name},{user.age}")
    private int addUser(User user) {
        return user.getAge();
    }
    @Step("输入数字 {digit}")
    private int pressDigit(int digit) {
        return digit;
    }
    @Step("输入减号")
    private String pressSubtraction() {
        return "-";
    }

    @Step("减法计算")
    public int subtract(int x, int y) {
        return x-y;
    }
}

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

【霍格沃兹测试开发】6 小时轻松上手功能测试/ 软件测试工作流程/ 测试用例设计/Bug 管理