zoukankan      html  css  js  c++  java
  • Allure快速入门

    1.关于Allure

        Allure框架是一个灵活轻量级多语言测试报告工具,它不仅可以以WEB的方式展示简介的测试结果,而且允许参与开发过程的每个人从日常执行的测试中最大限度的提取有用信息。
        Allure报告简化了常见缺陷的统计:失败的测试可以分为BUG和被中断的测试,还可以配置日志、步骤、fixture、附件、计时、执行历史以及与BUG管理系统集成,所以,通过以上配置,所有负责的开发人员和测试人员可以尽可能的掌握测试信息。

    2.Allure安装

    • 1.下载JDK,下载地址如下所示:
    https://www.oracle.com/java/technologies/downloads/
    
    • 2.设置环境变量

        以Windows为例,如下所示:

    JAVA_HOME=D:Program FilesJava
    Path中添加%JAVA_HOME%in
    

        在命令行中分别输入以下命令,不报错,即代表设置成功

    C:Usersadmin>java -version
    java version "17.0.1" 2021-10-19 LTS
    Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
    Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)
    
    C:Usersadmin>javac -version
    javac 17.0.1
    
    • 3.下载Allure命令行,下载地址如下所示:
    https://github.com/allure-framework/allure2/releases/
    
    • 4.将下载到本地的allure压缩包解压到指定目录,并添加相应的环境变量
    Path=D:Program FilesAllureallure-2.16.0in
    

        在命令行中输入allure,不出现报错即可

    Usage: allure [options] [command] [command options]
      Options:
        --help
          Print commandline help.
        -q, --quiet
          Switch on the quiet mode.
          Default: false
          ...
    

    3.Allure用法

    3.1 语法格式

     allure [options] [command] [command options]
    

    3.2 常用option和command

    • Options

      • -q, --quiet:切换到静默模式,默认关闭
      • -v, --verbose:切换详细日志模式,默认关闭
    • Commands

      • generate:生成allure的HTML报告
        • -c, --clean:在生成新报告前,清理之前生成报告的目录,默认关闭
        • --config:Allure命令行配置文件路径,如果指定将覆盖--profile和--configDirectory所设定的值
        • --configDirectory:Allure命令行配置文件目录,默认值为: ALLURE_HOME目录
        • --profile:Allure命令行配置文件
        • -o, --report-dir, --output:指定生成报告的目录,默认allure-report
      • serve:启动serve并查看报告
        • 基本语法:serve [options] allure结果目录
        • --config:Allure命令行配置文件路径,如果指定将覆盖--profile和--configDirectory所设定的值
        • --configDirectory:Allure命令行配置文件目录,默认值为: ALLURE_HOME目录
        • --profile:Allure命令行配置文件
        • -h, --host:指定访问报告的web服务器地址
        • -p, --port:指定访问报告的web服务器地端口,默认为0
      • open:查看报告
        • 基本语法:open [options] allure报告目录
        • -h, --host:指定访问报告的web服务器地址
        • -p, --port:指定访问报告的web服务器地端口,默认为0

    1.generate常用参数主要为-c和-o
    2.open常用参数主要为-h和-p

    4.Allure报告结构

    • Overview

        报告总览

    • Categories

        类别,允许用户创建自定义的类别。默认分为失败和错误,在执行结果是其中一类时则被归到相应的类中。

    • Suites

        测试套件,即所有用例的层级关系,可以按package/module/class/method进行查找

    • Graphs

        测试结果图形化,包含测试用例的运行结果分布图、耗时、优先级等

    • Timeline

        时序图,将测试用例的执行顺序和测试时间以可视化形式展现出来

    • Behaviors

        行为驱动,根据Epic、Feature、Story来对测试用例进行分组

    • Packages

        用例按Package进行分组,根据测试结果按不同的Package进行分组,并以树形结构进行展示

    5.Allure特性

    5.1 Flaky

        该特性用来标识不够稳定的测试用例集,即有些用例运行时,时而成功时而失败。其用意主要如下所示:

    • 当用例失败的情况下,能够获取足够详细的信息
    • 不标记为Flaky的话,可能就要禁用这些测试

        用法如下所示:

    @Flaky
    public void aTestWhichFailsFromTimeToTime {
         ...
    }
    

    5.2 Environment

        Environment表示环境变量参数,用来显示本次测试运行环境的参数。在生成allure-result结果前,通过创建environment.propertiesenvironment.xml文件,并把文件放置到allure-result目录中。

    environment.properties

    Browser=Chrome
    Browser.Version=95.0
    Stand=Production
    

    environment.xml

    <environment>
        <parameter>
            <key>Browser</key>
            <value>Chrome</value>
        </parameter>
        <parameter>
            <key>Browser.Version</key>
            <value>95.0</value>
        </parameter>
        <parameter>
            <key>Stand</key>
            <value>Production</value>
        </parameter>
    </environment>
    

    environment.properties和environment.xml不允许存在中文

    5.3 Categories

        默认分类分为两种,如下所示:

    • Product defects:产品缺陷,测试结果为失败(failed tests)
    • Test defects:测试缺陷,测试结果为错误(broken tests)

        除了默认分类之外,也可以自定义创建分类。通过创建categories.json文件,在生成allure-result结果前,提前放置到该目录即可。

    categories.json

    [
      {
        "name": "Ignored tests", 
        "matchedStatuses": ["skipped"] 
      },
      {
        "name": "Infrastructure problems",
        "matchedStatuses": ["broken", "failed"],
        "messageRegex": ".*bye-bye.*" 
      },
      {
        "name": "Outdated tests",
        "matchedStatuses": ["broken"],
        "traceRegex": ".*FileNotFoundException.*" 
      },
      {
        "name": "Product defects",
        "matchedStatuses": ["failed"]
      },
      {
        "name": "Test defects",
        "matchedStatuses": ["broken"]
      }
    ]
    
    • name(必填项):分类名称
    • matchedStatuses(可选项):测试用例的运行结果,默认值["failed", "broken", "passed", "skipped", "unknown"]
    • messageRegex(可选项):测试用例运行的错误信息,默认是 .* ,通过正则进行匹配
    • traceRegex(可选项):测试用例运行的错误堆栈信息,默认是 .* ,通过正则进行匹配

    6.Allure与Pytest集成

    6.1 Allure行为驱动

        allure除了支持Pytest自带的特性之外(fixture、parametrize、xfail、skip),自身也有非常强大的特性,下面来详细介绍。

    6.1.1 @allure.step

        allure报告允许对每个测试用例的执行步骤进行详细说明,该功能通过@allure.step()装饰器来实现

    @allure.step()只有一个参数,就是title

    6.1.2 @allure.attach

        allure报告支持添加附件并进行展示,可用以补充测试结果,第一种基本语法如下所示:

    allure.attach(body, name, attachment_type, extension) 
    
    • body:要显示的附件内容
    • name:附件名称
    • attachment_type:附件类型,属于allure.attachment_type里面的一种
    • extension:附件扩展名

    allure.attachment_type主要有TEXT、CSV、HTML、XML、JSON、YAML、PCAP、PNG、JPG、SVG、GIF、BMP、MP4、OGG、WEBM、PDF等

        第二种基本语法如下所示:

    allure.attach.file(source, name, attachment_type, extension) 
    
    • source:上传文件所在路径
    • 其他参数和上面参数一致

    6.1.3 @allure.description

        给用例添加详细的描述,常见语法有三种:

    • 1.@allure.description(str)

    • 2.在测试用例函数声明下方添加 """ """

    • 3.@allure.description_html(str)

    相当于传一个HTML代码组成的字符串,类似 allure.attach()中传HTML

    方式一和方式二作用和效果是一样的

    6.1.4 @allure.title

        添加测试用例标题,支持占位符传递关键字参数(动态标题,结合(@pytest.mark.parametrize使用)

    如果没有添加 @allure.title()的话,测试用例的标题默认就是函数名

    6.1.5 @allure.link&@allure.issue&@allure.testcase

        三个装饰器源码如下所示:

    def link(url, link_type=LinkType.LINK, name=None):
        return safely(plugin_manager.hook.decorate_as_link(url=url, link_type=link_type, name=name))
    
    
    def issue(url, name=None):
        return link(url, link_type=LinkType.ISSUE, name=name)
    
    
    def testcase(url, name=None):
        return link(url, link_type=LinkType.TEST_CASE, name=name)
    
    • issue()和testcase()调用的也是link(),只是link_type不一样
    • url:跳转的链接,必传参数
    • name:显示在allure报告的名字,如果不传就是显示完整的链接

    出现三个装饰器的原因是为了更好地将链接分类访问连接Bug链接测试用例链接

    6.1.6 BDD标记装饰器

        在pytest中,可以使用@pytest.mark进行标识,但并不会显示在allure报告上,而allure也提供了三种类型的标记装饰器,它们则是可以显示在allure报告上的,如下所示:

    • @allure.epic:敏捷里面的概念,往下是 feature
    • @allure.feature:功能点的描述,理解成模块往下是 story
    • @allure.story:故事,往下是 title

    1.story 是 feature 的子集,当测试用例有 @allure.feature、@allure.story 时,在报告上会先显示 feature,点开之后再显示 story

    2.如果不加 @allure.feature、@allure.story 时,在Behaviors栏目下,测试用例都不会分类显示

        用命令行方式运行时,可以指定运行某个story、feature、epic

    --allure-epics
    --allure-features
    --allure-stories
    

    6.1.7 @allure.severity

        allure提供了用例级别,因此在allure报告可以清晰看到不同级别用例的缺陷数量。详细等级如下所示:

    级别 含义 详细解释
    blocker 阻塞缺陷 无法执行下一步操作等
    critical 严重缺陷 功能点缺失或直接崩溃等
    normal 一般缺陷 边界值问题,格式错误等
    minor 次要缺陷 UI类错误等
    trivial 轻微缺陷 必填项无提示或提示信息不规范和统一等

    6.2 Allure和Pytest安装

        执行以下命令安装即可:

    pip install -U allure-pytest pytest
    

    6.3 Allure与Pytest集成示例

    6.3.1 allure.step示例

        示例代码如下所示:

    import pytest
    import allure
    import os
    
    @allure.step("这是第一步")
    def inputUrl(url:str):
        print(f"输入的网址为:{url}")
    
    @allure.step(title="这是第二步")
    def locateElement(xpath:str):
        print(f"查找元素的xpath是{xpath}")
    
    @allure.step("这是第三步")
    def sendElement():
        inputUsernameAndPasswd("Surpass","password")
    
    @allure.step("这是第四步,{username},{password}")
    def inputUsernameAndPasswd(username:str,password:str):
        print(f"输入的用户名和密码分别为:{username},{password}")
    
    @allure.step("这是第五步")
    def test_login():
        inputUrl("https://www.baidu.com")
        locateElement('//*[@id="su"]')
        sendElement()
    

        生成结果如下所示:

    6.3.2 allure.attach示例

        示例代码如下所示:

    import pytest
    import allure
    import os
    
    def attach01(body,name,attachment_type=allure.attachment_type.TEXT):
        """
        附件为内容
        """
        allure.attach(body,name,attachment_type=attachment_type)
    
    def attach02(filePath,name,attachment_type=allure.attachment_type.TEXT):
        """
        附件为文件
        """
        allure.attach.file(filePath,name,attachment_type=attachment_type)
    
    def test_attach01():
        body = "<h3>方法一:测试allure附件内容为HTML</h3>"
        name = "attach-01-test"
        attach01(body,name,attachment_type=allure.attachment_type.HTML)
    
    
    def test_attach02():
        filePath=os.path.join(os.getcwd(),"attach","sample.png")
        name="attach-02-test"
        attach02(filePath,name,attachment_type=allure.attachment_type.PNG)
    

        生成结果如下所示:

    6.3.3 allure.description示例

        示例代码如下所示:

    import pytest
    import allure
    
    
    def test_allureDescription01():
        """这是一个allure.description示例01"""
        assert (7+8)==15
    
    @allure.description("这是一个allure.description示例02")
    def test_allureDescription02():
        assert (7+8)==15
    
    @allure.description_html("""
      <h2>这是一个
        <font size=15>allure.description </font>示例03
       </h2>
      """)
    def test_allureDescription03():
        assert (7+8)==15
    

        生成结果如下所示:

    6.3.4 allure.title示例

        示例代码如下所示:

    import pytest
    import allure
    
    @allure.title("登录")
    @pytest.fixture(scope="session")
    def loginData(request):
        params=request.param
        name=params.get("name","")
        password=params.get("password","")
        code=params.get("code","")
        print(f"param is {name},{password},{code}")
        yield name,password,code
    
    @allure.title(f"登录成功")
    @pytest.mark.parametrize("loginData",[
        {"name":"Surpass","password":"123456","code":"SHCQ"},
        {"name":"Diana","password":"20210227","code":"FKDT"}
      ],indirect=True)
    def test_loginSucces(loginData):
        name,password,code=loginData
        body=f"用户名:{name},密码:{password},验证码:{code}"
        name="allure.title.test"
        allure.attach(body,name,attachment_type=allure.attachment_type.TEXT)
    

        生成结果如下所示:

    6.3.5 allure.link&allure.issue&allure.testcase示例

        示例代码如下所示:

    import pytest
    import allure
    
    
    @allure.link("https://www.google.com")
    def test_basicLink():
        pass
    
    @allure.link(url="https://www.surpassme.com",name="basicLink")
    def test_basicLinkWithName():
        pass
    
    @allure.issue(url="https://www.baidu.com",name="issueLink")
    def test_issueLink():
        pass
    
    @allure.testcase(url="https://www.zentao.net",name="testcaseLink")
    def test_testcaseLink():
        pass
    

        生成结果如下所示:

    6.3.6 BDD标记装饰器示例

        示例代码如下所示:

    import pytest
    import allure
    
    @allure.step("第一步")
    def firstStep():
        print("这是第一步")
    
    @allure.step("第二步")
    def secondStep():
        print("这是第二步")
    
    @allure.step("第N步")
    def nStep():
        print("第N步")
    
    @allure.epic("总体描述")
    @allure.feature("测试模块A")
    class TestEpicAndFeatureAndStory():
        @allure.issue("http://www.surpamssme.com/issue/id=0227")
        @allure.testcase("http://www.surpassme.com/testcase/id=0227")
        @allure.title("功能A-用例-01")
        @allure.story("测试功能A")
        @allure.description("Surpassme 测试验证")
        def test_CaseA01(self):
            print("test_Case01")
            firstStep()
            secondStep()
    
        @allure.story("测试功能A")
        @allure.title("功能A-用例-02")
        def test_CaseA02(self):
            pass
    
        @allure.story("测试功能A")
        @allure.title("功能A-用例-03")
        def test_CaseA03(self):
            pass
    
        @allure.story("测试功能B")
        @allure.title("功能B用例-01")
        def test_CaseB01(self):
            pass
    
        @allure.story("测试功能B")
        @allure.title("功能B用例-03")
        def test_CaseB02(self):
            pass
    

        生成结果如下所示:

    6.3.7 allure.severity

        示例代码如下所示:

    import allure
    
    @allure.title("blocker")
    @allure.severity("blocker")
    def test_Case01():
        pass
    
    @allure.title("critical")
    @allure.severity("critical")
    def test_Case02():
        pass
    
    @allure.title("normal")
    @allure.severity("normal")
    def test_Case03():
        pass
    
    @allure.title("minor")
    @allure.severity("minor")
    def test_Case04():
        pass
    
    @allure.title("trivial")
    @allure.severity("trivial")
    def test_Case05():
        pass
    

        生成结果如下所示:

    原文地址:https://www.cnblogs.com/surpassme/p/15491632.html

    本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

    作者: Surpassme

    来源: http://www.jianshu.com/u/28161b7c9995/

             http://www.cnblogs.com/surpassme/

    声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 ,否则保留追究法律责任的权利。如有问题,可发送邮件 联系。让我们尊重原创者版权,共同营造良好的IT朋友圈。

  • 相关阅读:
    排列组合算法
    C++内存管理——堆&&栈
    编程之美——1.2 中国象棋将帅问题
    Gentoo: fcitx的安装
    Gentoo NTFS USB盘有写权限
    Gentoo U盘无法自动挂载,打开报告Not Authorized,xfce只有logout,suspend/shutdown灰化等问题解决方法
    Kernel: 打开CONFIG_EMBEDDED从而使更多的kernel option可以更改
    Gentoo Enable framebuffer console (没有安装X,KDE的时候)
    转载:Gentoo和Ubuntu包管理命令对比集
    Gentoo Rebuild virtualboxmodules when kernel is updated
  • 原文地址:https://www.cnblogs.com/surpassme/p/15491632.html
Copyright © 2011-2022 走看看