Allure

作者: 醒醒Coco | 来源:发表于2019-12-19 19:13 被阅读0次

    简介

    Allure是一款非常轻量级并且非常灵活的开源测试报告生成框架。 Allure 是一个独立的报告插件,生成美观易读的报告,它支持绝大多数测试框架, 例如TestNG、Pytest、JUint等。它简单易用,易于集成。

    Allure 安装

    安装 python 插件
    安装 allure
    • 下载: https://bintray.com/qameta/generic/allure2
    • 前置条件:已部署java环境
    • 配置环境变量:bin 目录配置到 path 系统环境变量
    • 检查是都配置成功:cmd输入allure命令,测试是否安装成功
    Allure使用
    • pytest.ini 配置文件
    [pytest]
    # 添加行参数
    addopts = -s --alluredir ./report/result
    # 文件搜索路径
    testpaths = ./scripts
    # 文件名称
    python_files = test_*.py
    # 类名称
    python_classes = Test*
    # 方法名称
    python_functions = test_*
    
    • demo示例
    @allure.feature("Allure测试标签")
    class TestAllure:
    
        def setup(self):
            self.result = None
    
        def teardown(self):
            desc = "<font color='red'>实际结果:</br> </font>{}".format(self.result)
            allure.dynamic.description(desc)
    
        @allure.title("测试用例1")
        @allure.description("测试用例1描述")
        def test_01(self):
            print('----------test1---------')
            self.result = "test1"
    
        @allure.title("测试用例2")
        def test_02(self):
            print('-----------test2-----------')
            self.result = "test2"
    
        @allure.title("测试用例3")
        def test_03(self):
            print('----------test3------------')
            self.result = "test3"
    
    if __name__ == '__main__':
    pytest.main(['test_allure.py'])
    
    • 运行结果,查看report/result目录
    • 生成html格式,运行命令 allure generate report/result -o report/html --clean
    • 生成在线测试报告: allure serve report/result

    Allure 详解

    title 标题
    @allure.title("用例标题1")
    def test_1():
    pass
    
    @allure.title("用例标题2")
    def test_2():
    pass
    
    description 描述
    @allure.title("用例标题1")
    @allure.description("这里是对test_1用例的一些详细说明")
    def test_1():
    pass
    
    @allure.title("用例标题2")
    def test_2():
    """
    test_2的描述
    """
    pass
    
    标签 @allure.feature
    @allure.feature('这里是一级标签:test')
    class TestAllure:
    
    @allure.title("用例标题1")
    @allure.description("这里是对test_1用例的一些详细说明")
    def test_1(self):
    pass
    
    @allure.title("用例标题2")
    def test_2(self):
    pass
    
    @allure.title("用例标题3")
    def test_3(self):
    pass
    
    标签 @allure.story
    @allure.feature('这里是一级标签:test')
    class TestAllure:
    
    @allure.title("用例标题1")
    @allure.description("这里是对test_1用例的一些详细说明")
    @allure.story("这里是二级标签:test_1")
    def test_1(self):
    pass
    
    @allure.story("这里是二级标签:test_2")
    @allure.title("用例标题2")
    def test_2(self):
    pass
    
    @allure.story("这里是二级标签:test_3")
    @allure.title("用例标题3")
    def test_3(self):
    pass
    
    @allure.severity

    定义用例的级别,有BLOCKER,CRITICAL,MINOR,NORMAL,TRIVIAL等几种类型,默认是NORMAL。

    @allure.feature('这里是一级标签:test')
    class TestAllure: 
    
    @allure.severity(allure.severity_level.BLOCKER)
    @allure.title("用例标题1")
    @allure.description("这里是对test_1用例的一些详细说明")
    @allure.story("这里是二级标签:test_1")
    def test_1(self):
    pass
    
    @allure.severity(allure.severity_level.CRITICAL)
    @allure.story("这里是二级标签:test_2")
    @allure.title("用例标题2")                      
    def test_2(self):
    pass
    
    @allure.severity(allure.severity_level.NORMAL)
    @allure.story("这里是二级标签:test_3")
    @allure.title("用例标题3")
    def test_3(self):
    pass
    

    只运行指定级别的用例
    --allure_severities=critical,blocker

    动态生成allure.dynamic
    params_1={"name":"动态获取test1","method":"post","url":"http://www.baidu.com"}
    params_2={"name":"动态获取test2","method":"get","url":"http://www.baidu.com"}
    @allure.title("用例标题0")
    @allure.severity(severity_level=allure.severity_level.CRITICAL)
    def test_0():
    pass
    
    @allure.title("用例标题1")
    def test_1():
    pass
    
    @pytest.mark.parametrize("params",[params_1,params_2])
    def test_2(params):
    allure.dynamic.title(params["name"])
    

    Allure报告自动生成

    • 配置文件pytest.ini
    addopts = -s --alluredir ./report/result
    
    • 代码实现自动生成html报告
    # 生成allure测试报告
    Base.py 
    def allure_report(report_path, report_html):
        # 执行命令 allure generate
        allure_cmd = "allure generate %s -o %s --clean" % (report_path, report_html)
        try:
            subprocess.call(allure_cmd, shell=True)
            my_log().debug("生成测试报告")
        except:
            my_log().debug("生成测试报告出错")
            raise
    
    

    设置程序主运行函数

    run.py
    if __name__ == '__main__':
        report_path = Conf.get_report_path() + os.sep + "result"
        report_html_path = Conf.get_report_path() + os.sep + "html"
        pytest.main(["-s", "--alluredir", report_path])
        Base.allure_report(report_path, report_html_path)
    

    Allure应用

    • 代码实现
    mport allure
    import pytest
    from pactverify.matchers import Matcher, EachLike, Like, PactVerify
    
    from testcase.im.apis import ApiTest
    
    
    @allure.feature("获取制定会话接口")
    class TestGetConversation:
    
        def setup(self):
            self.result = None
            self.verify_info = None
            self.verify_result = None
            self.request_param = None
    
        def teardown(self):
            desc = "<font color='red'>请求参数:</br> </font>{}</br>" \
                   "<font color='red'>实际结果:</br> </font>{}</br>" \
                   "<font color='red'>验证结果:</br> </font>{}</br>" \
                   "<font color='red'>验证信息:</br> </font>{}".format(self.request_param, self.result, self.verify_result,
                                                                   self.verify_info)
            allure.dynamic.description(desc)
    
        # 获取制定会话接口
        @pytest.mark.case_p0
        @allure.title("根据conversationId获取制定会话接口")
        def test_conversations_by_conversationId(self):
            """根据imId获取会话列表"""
            conversationId = '5da9659ff53f07328308b355'
            result = ApiTest().api_get_conversations_by_conversationId(conversationId)
            print("返回的结果%s" % (result.json()))
    
                    expect_format = Matcher({
                "statusCode": 200,
                "status": "success",
                "result": Like({
                    "unreadCount": Like(2, key_missable=True),
                    "messageReadTime": 34567890,
                    "userType": "CUSTOMER",
                    "_id": Matcher(conversationId),
                    "imId": "erp-2253F6D0-B558-466F-87FA-86395B5A2830",
                    "targetId": "erp-4B41582E-91D6-4337-846C-7D2B09D8F900",
                    "type": "PERSON",
                    "__v": 0,
                    "createdAt": "2019-10-18T07:11:27.350Z",
                    "displayName": "sdsa",
                    "latestMessage": {
                        "description": "hahahaha最近消息dhkasldhasjkfhklasfhklas"
                    },
                    "portraitUri": "https://cdn.mytoken.org/Fvuapzak9DwkHSuBPp0hcfw1emhf",
                    "tieId": "PERSON:erp-2253F6D0-B558-466F-87FA-86395B5A2830:erp-4B41582E-91D6-4337-846C-7D2B09D8F900",
                    "updatedAt": "2019-10-18T07:25:06.161Z",
                    "id": Matcher(conversationId)
                })
            })
    
            mPactVerify = PactVerify(expect_format, hard_mode=True)
    
            self.request_param = "conversationId" + str(conversationId)
            self.result = result.json()
            mPactVerify.verify(self.result)
    
            self.verify_info = mPactVerify.verify_info
            self.verify_result = mPactVerify.verify_result
            assert mPactVerify.verify_result == True
    
    • 测试报告


      image.png

    相关文章

      网友评论

          本文标题:Allure

          本文链接:https://www.haomeiwen.com/subject/xhcwmctx.html