0
点赞
收藏
分享

微信扫一扫

python接口测试:2.9 Pytest之Allure报告生成


前面我们实现pytest-html模块的报告生成,虽然可以实现增强操作,但是其报告还是不是很直观,那么我们今天就来学习下allure报告吧,allure就是那种可以实现花里胡哨的,让你们领导喜欢的报告。我们技术人员其实注重的是数据,是结果,而不是花里胡哨的,但是领导一般喜欢,从这点也可以辨别你们的领导是技术型的还是管理型的~~~



小 木 正 文


——————————————

❶allure环境准备

——————————————

首先我们现在用的都是allure2版本了,以前老的版本使用pytest-allure-adpator插件完成的,但是这个已经跟不上时代了,并且里面缺少很多用例的描述性操作,网上有些教程大多数都是使用该版本的,所以后面操作会发现有些调用不出来。装了的同学记得将其进行卸载哦,因为与我们今天要讲的allure2版本是不兼容的,有冲突的。


通过pycharm进行下载两个包:allure-pytest、allure-python-commons。


安装好后则需要进行下载allure命令行工具。有很多同学无法找到这个官网的下载地址:

https://github.com/allure-framework/allure2/releases

python接口测试:2.9 Pytest之Allure报告生成_html

下载完成之后,直接解压到本地电脑,然后找到bin目录进行配置到环境变量path中即可。

python接口测试:2.9 Pytest之Allure报告生成_用例_02

然后在dos中输入allure --help即可相应的帮助信息

python接口测试:2.9 Pytest之Allure报告生成_html_03

如果提示不是内部或者外部命令则说明环境变量配置有问题哦~~~

——————————————

❷运行测试用例

——————————————

下面给出一个完整demo的测试用例代码

#-*- coding:utf-8 -*-#
#-------------------------------------------------------------------------
#ProjectName:       Python2020
#FileName:          TestCaseManager.py
#Author:            mutou
#Date:              2020/7/26 15:51
#Description:
#--------------------------------------------------------------------------
import pytest
import allure
import sys


#实现测试用例管理策略设计
#@pytest.mark.xfail    #可以应用于断言的操作,如果执行到这里测试人员可以自定义让其设定是一个失败的结果,可以等价在测试过程中
#添加判定pytest.xfail方法,同样可以根据条件进行设定以及设定原因
def test_add_5(get_cal):
    # if  get_cal.c:
    #     pytest.xfail("c属性实现初始化赋值操作")
    assert get_cal.add_1(1,1)==2


@pytest.mark.xfail(sys.version_info>(3,8),reasnotallow="当前版本小于3.8")
#此形式执行会产生四种状态:passed/xpassed(X)/failed/xfail(x)
def test_add_1(get_cal):
    assert get_cal.add_1(1,0)==2




#除了直接跳过当前用例以外,还可以通过设定跳过的条件完成,例如:当前的操作系统/当前的python版本等3.8<那么就不执行,如果大于3.8的版本那就执行
@pytest.mark.skipif(sys.version_info>(3,8),reasnotallow="当前版本小于3.8")
#其实第一个参数要求是字符串类型bool表达式那么reason可以不声明,但是如果直接使用bool表达式的话,那么reason参数必须声明
#实际等价于eval("sys.version_info>(3,8)") 将该字符串转换成bool表达式执行
def test_add_2(get_cal):
    assert get_cal.add_1(1,1)==2






#但是minus方法源码还没有实现,所以先设定好了测试用例,但是当前情况不想执行它,可以通过标记skip完成
@allure.title("这是减法浮点运算")
@pytest.mark.skip(reasnotallow="该方法开发还没有实现")
def test_minus_3(get_cal):
    """
    :param get_cal:测试固件中所传入的参数
    :return: 无返回值
    """
    assert get_cal.minus(2,1)==4
    #添加对应的附件




@allure.epic("一级别目录")
@allure.feature("二级目录")
@allure.story("三级目录")
@allure.title("这是参数化操作a:{a},b:{b},c:{sum}")
@allure.testcase("http://lcoahost:XXXX-1",name="登陆成功")   #可以指定当前测试用例与功能的测试用例对应
@allure.issue("http://localhost:XXXX")    #实现缺陷的关联
@allure.step("输入a,输入b,求和")  #添加测试用例的步骤
@allure.severity(allure.severity_level.BLOCKER)
@allure.link("http://localhost:5858")   #定义一个连接,在报告中进行显示   外部连接地址,比如对应需求的链接
@pytest.mark.parametrize("a,b,sum",[(1, 1,2),pytest.param(2,2,4,marks=pytest.mark.xfail(reasnotallow="该组参数功能还没实现"))])
def test_add_4(get_cal,a,b,sum):
    assert get_cal.add_1(a,b)==sum




@allure.epic("这是一个较大的story")
@allure.feature("测试加法方法的测试类")
class TestAdd():
    @allure.story("第一个故事")
    @allure.title("test_add2")
    def test_add_2(self,get_cal):
        assert get_cal.add_1(1, 1) == 2


    @allure.story("第二个故事")
    def test_add_3(self,get_cal):
        assert get_cal.add_1(1, 1) == 2
if __name__ == '__main__':
     pytest.main()

运行测试用例,在dos中先使用命令执行生成结果目录,

pytest  测试用例模块所在路径   --alluredir   报告所需要生成的目录路径

同时也可以直接配置到pycharm中进行运行,例如:pycharm中配置,

python接口测试:2.9 Pytest之Allure报告生成_用例_04

执行后结果:

python接口测试:2.9 Pytest之Allure报告生成_用例_05

这个是生成多个的json格式文件,我们一个一个去看的太不友好了,过于麻烦,所以我们肯定需要进一步处理这个数据的

——————————————

❸对生成allure结果数据处理

——————————————

实际对allure结果数据处理有以下几种不同的实现方式:


1.直接通过命令启动allure服务即可,命令如下:


allure  server  刚才所生成json的目录路径

启动服务后,会自动分配一个端口,直接使用默认浏览器打开

python接口测试:2.9 Pytest之Allure报告生成_html_06

生成报告结果如下:

python接口测试:2.9 Pytest之Allure报告生成_用例_07


2.可以使用命令将json格式的数据生成html报告,然后自己部署到容器中进行打开也可以,具体命令如下:

allure generate allure所生成json数据的路径  -o  需要生成html报告的路径

python接口测试:2.9 Pytest之Allure报告生成_测试用例_08

python接口测试:2.9 Pytest之Allure报告生成_测试用例_09

然后选择index.html进行右键选择Open in  Browser,然后选择对应的浏览器打开即可获取到跟上面报告结果一样的效果。

上面是一种打开方式,不能够直接进入html目录,通过浏览器直接打开index.html文件。否则结果如下:

python接口测试:2.9 Pytest之Allure报告生成_测试用例_10

注意:生成的html文件夹中拥有多个文件夹,该目录实际是一个web服务目录,需要通过服务进行发布才能够访问网站正常,不能够直接本地打开index.html页面这样的话不会自动加载数据,可以通过allure命令进行启动服务。

另外还可以通过open命令进行打开html目录报告,具体命令如下:

allure  open  allure所生成额html目录

open命令其还可以携带参数-h即对应的主机地址、ip地址,-p即端口自定义,这是使用自带的jetty容器进行发布的服务。


第三种方式:通过自定义容器发布,我们的容器有很多,例如:jetty、jboss、WebSphere、Tomcat等等。那么我今天给大家讲一款非常简单、小巧的容器anywhere,直接使用npm命令进行安装即可。

首先,之前我们配置过npm的环境变量,还记得吧,就是我们需要进行下载nodejs模块的时候,具体这里不多讲了,看前面的文章吧。

直接在dos中安装命令:

npm  install  anywhere  -g

安装完成后

python接口测试:2.9 Pytest之Allure报告生成_测试用例_11

我是已经装过的,所以给出的提示是更新结果,你们是安装成功结果的。

然后切换到html目录,直接使用命令,同样可以添加参数-h和-p

python接口测试:2.9 Pytest之Allure报告生成_用例_12

然后会自动弹出一个浏览器页面,与上面的结果一样。

——————————————

❹allure描述用例详解

——————————————

前面我们已经可以完美的实现pytest+allure结合了,但是allure的具体应用我们还一无所知,那么后面我们就一点一点来学习吧。

你们应该发现我们上面那个demo中我添加了大量的一些装饰器,这些装饰器有什么作用呢?

使用方法

参数值

参数说明

@allure.epic()

epic描述

敏捷里面的概念,定义史诗,往下是feature

@allure.feature()

模块名称

功能点的描述,往下是story

@allure.story()

用户故事

用户故事,往下是title

@allure.title(用例的标题)

用例的标题

重命名html报告名称

@allure.testcase()

测试用例的链接地址

对应功能测试用例系统里面的case

@allure.issue()

缺陷

对应缺陷管理系统里面的链接

@allure.description()

用例描述

测试用例的描述

@allure.step()

操作步骤

测试用例的步骤

@allure.severity()

用例等级

blocker,critical,normal,minor,trivial

@allure.link()

链接

定义一个链接,在测试报告展现

@allure.attachment()

附件

报告添加附件

上面demo报告具展示结合上面表格一一对象说明

python接口测试:2.9 Pytest之Allure报告生成_用例_13

pytest运行测试用例的时候可以添加allure标记用例的参数

python接口测试:2.9 Pytest之Allure报告生成_用例_14

选择运行你要执行epic的用例

pytest —alluredir ./report/allure —allure-epics=一级别目录

选择运行你要执行features的用例

pytest —alluredir ./report/allure —allure-features=二级别目录

选择运行你要执行stories的用例

pytest —alluredir ./report/allure —allure-stories=”三级别目录”

——————————————

❺allure标记用例级别

——————————————

我们在做功能测试时,执行完一轮测试我们都会有测试报告的输出,那么就会统计缺陷的数量和等级。

那么在自动化测试过程中,测试用例越来越多的时候,如果执行一轮发现有不同的用例,我们同样希望尽快统计出缺陷的等级。

其实前面我们有用allure框架的等级划分属性。


等级划分:

  • blocker    阻塞缺陷(功能未实现,无法下一步)
  • critical  严重缺陷(功能点缺失)
  • normal    一般缺陷(边界情况,格式错误)
  • minor      次要缺陷(界面错误与ui需求不符)
  • trivial   轻微缺陷(必须项无提示,或者提示不规范)


分析上面demo执行的结果图形模块,我们可以看到serverity部分,这表示的就是严重级别,具体如下图:

python接口测试:2.9 Pytest之Allure报告生成_测试用例_15

同样我们还可以使用allure命令行参数实现指定用例执行,

如果有很多测试用例,现在只想做个快速的回归测试,只测试用例级别为blocker和critical级别的测试用例

pytest —alluredir ./report/allure —allure-severities blocker,critical

也可以这样写

pytest —alluredir=./report/allure —allure-severities=blocker,critical

如果只执行blocker级别的用例

pytest —alluredir=./report/allure —allure-severities=blocker



举报

相关推荐

0 条评论