python自动化测试报告 之 Allure

一、Allure  介绍

前面在编写自动化测试用例的时候,使用了HTMLTestRunner,是对于测试用例执行结果的一个统计和展示的报告。

Allure  是一个report框架,可以基于一些测试框架生成测试报告,比较常用的一般是Junit/Testng框架;
Allure 生成的报告样式简洁美观,同时又支持中文
Allure还支持使用Jenkins工具持续集成,整套环境搭建下来以后,使用起来非常方便。

二、Pytest介绍

因为这里也需要用到pytest去运行最后编写的case,那么这里也了解下pytest.

pytest和unittest差不多,都是测试框架,功能比unit test多。都是识别以test开头的case 然后依次去执行。

三、在自己电脑上使用pytest+ allure 生成自动化测试报告

1、需要有jdk1.8+环境

2、下载Allure包,地址:https://pan.baidu.com/s/1Za-9Dny5ha_0rCdpPm0o2A

下载下来包后直接解压,放到一个指定目录下,然后将下面的bin目录添加到path系统环境变量中:

完了后,打开cmd,输入 allure --version,有版本信息出现代表成功。

3、安装pytest

pip install pytest

4、安装allure-pytest

pip install allure-pytest

5、试着写一个简单的py文件,然后用allure展示出来

import allure
import pytest

@allure.feature('test_module_01')
@allure.story('test_story_01')
@allure.severity('blocker')
def test_case_01():
    """
    用例描述:Test case 01
    """
    assert 0

@allure.feature('test_module_01')
@allure.story('test_story_01')
@allure.severity('critical')
def test_case_02():
    """
    用例描述:Test case 02
    """
    assert 0 == 0

@allure.feature('test_module_01')
@allure.story('test_story_02')
@allure.severity('normal')
def test_case_03():
    """
    用例描述:Test case 03
    """
    assert 0

@allure.feature('test_module_01')
@allure.story('test_story_02')
@allure.severity('minor')
def test_case_04():
    """
    用例描述:Test case 04
    """
    assert 0 == 0

 

@allure.feature('×××')   #一级分层

@allure.story('×××')   #二级分层

@allure.serverity('×××')   #case重要级

  1. BLOCKER = 'blocker'  中断缺陷(客服端程序无响应,无法执行下一步骤)
  2. CRITICAL = 'critical'  临界缺陷(功能点缺失)
  3. NORMAL = 'normal'  普通缺陷(数据计算错误)
  4. MINOR = 'minor'  次要缺陷(界面错误与ui需求不符)
  5. TRIVIAL = 'trivial'  轻微缺陷(必须项无提示,或者提示不规范)

6、cmd命令行,用pytest命令将py文件转成json样式的文件

pytest  test.py --alluredir allure-report     

*注意:如果后面省略test.py 文件名,也就是不指定运行某一个py文件,那么就会去运行当前目录下所有以 test_开头的py文件中的case!!

当然执行命令的时候你可以添加一些参数,如:

-q: 减少用例执行过程叙述

-v:增加用例执行过程叙述

-k:只运行匹配到的测试用例。-k 'test_method or test_other' 只会匹配运行包含test_method 或 test_other 的用例; -k 'not test_method and not test_other' 会匹配运行既不包含test_method 也不包含test_other 的用例。

其他更多好玩的用法指路:

 

然后你可以看到在本目录下生成了一个allure-report的文件夹,里面放着一些文件:

当然你也可以直接在你的case文件里运行,如下:

if __name__ == '__main__':
    pytest.main([ __file__, '-s','-q','--alluredir', 'allure-report'])

7、使用allure命令将上述生成的文件转成报表,HTML格式

allure generate ison/ -o html

可以看到生成了html的一个文件夹,里面就是html形式allure报告文件相关的东西

****这里需要注意*****

如果直接在文件夹里打开这个index.html 文件的话,很可能出现跟我一样的情况,如下:(空白页一直转圈圈)

这里我是直接在pycharm里面打开的,(看网上说也可以用Firefox直接打开)。步骤如下:

然后就可以看到报告生成了。

 

在上述生成的html中我们可以看到,已经用例的基本框架已经差不多了,但这只是基本的,接下来试着把用例更加详细化一点呢。

比如说,在测试用例里面添加一些执行步骤:

修改上面的test_case_01:

def test_case_01():
    """
    用例描述:Test case 01
            客户登陆客户端
    """
    with allure.step('输入用户账号'):
        allure.attach('***输入账号为:zhangdan')
    with allure.step('输入用户密码'):
        allure.attach('***输入密码为:123456')
    with allure.step('点击登陆按钮'):
        allure.attach('***提交登陆信息')
    with allure.step('获取成功与否标识'):
        allure.attach('***主页=成功,登陆=失败')
    attention = '主页'
    assert attention == '主页'

 

上面又用到了,allure.attach('××× ') 附件

allure.attach(body, name, attachment_type, extension)

body - 要写入文件的原始内容。

name - 包含文件名的字符串

attachment_type- 其中一个allure.attachment_type值 。 (支持:HTML,JPG,PNG,JSON,OTHER,TEXTXML)  

extension - 提供的将用作创建文件的扩展名

或者 allure.attach.file(source, name, attachment_type, extension)    ---【有待考证】

source - 包含文件路径的字符串。

 

 

 

既然都到这里了,那么我想把allure报告与自己之前写好的实际场景的测试用例结合起来....

之前我已经用unittest+ HTMLtestrunner 生成过html形式报表过了,那么我就在之前的用例上做下修改:

拿用户登陆测试....
之前的用例:

filepath = os.path.abspath('.').split('test')[0] + 'test\\element\\testcase.xls'
re = IOExcel(filepath)  # 获取测试用例数据
caseData = re.get_sheet('login')   #获取***sheet页的数据

class loginTest(unittest.TestCase):
    #每条case执行的前置条件
    def setUp(self):
        browser = Browser().open_browser()
        self.bpage = BasePage(browser)
        self.lpage = loginCase(self.bpage)  # 初始化page页类

    #每条case执行的后置条件
    def tearDown(self):
        self.bpage.close_browser()

    def test_loginSuccess0(self):
        #获取第**sheet页的第*行的数据,返回为list
        rowData = re.get_rowData(2)
        self.lpage.login_page_quick(rowData[4],rowData[5],rowData[6])
        self.bpage.delay(1)
        try:
            self.assertEqual(self.bpage.get_title(),rowData[9],'测试用例通过')
        except Exception as e :
            re.write_cell(2,10,'不通过')
            print(e)
        else:
            re.write_cell(2, 10, '通过')

 

现在的一条用例:

@allure.feature('登陆')
@allure.story('用户登陆成功')
@allure.severity('blocker')  # 设置用例重要级
def test_loginSuccess0():
    ''' 用户登陆成功的用例 '''

    browser = Browser().open_browser()
    bpage = BasePage(browser)
    lpage = loginCase(bpage)  # 初始化page页类
    
    #获取第**sheet页的第*行的数据,返回为list
    rowData = re.get_rowData(2)
    lpage.login_page_quick(rowData[4],rowData[5],rowData[6])
    with allure.step('输入账号%s' % rowData[4]):
        pass
    with allure.step('输入密码%s' % rowData[5]):
        pass
    with allure.step('点击登陆'):
        pass
    bpage.delay(1)
    allure.step('延迟一秒')
    try:
        # assertEqual(bpage.get_title(),rowData[9],'测试用例通过')
        assert bpage.get_title() == rowData[9]
    except Exception as e :
        re.write_cell(2,10,'不通过')
        print(e)
    else:
        re.write_cell(2, 10, '通过')
    bpage.close_browser()

 

生成的用例报告:

 

看到上图的报告,我们可以知道:

1、编写测试步骤,直接用allure.step('××'×) 是无法展示出来的,需要使用with allure.step('××'×) ***  才能正确展示。

2、allure还可以自动地把输出到日志文件中的日志 以及 输出到控制台中的日志 都集中展示到html报表中。

这样一比较,确实allure 比 htmltestrunner 好用得多~

 

 

 

 

 

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值