目录

1、Allure简介

2、Pytest框架集成Allure

2.1 环境配置

2.2 生成html报告

2.3 定制报告

2.3.1 Features、Story定制详解

2.3.2 用例标题和用例描述定制详解

2.3.3  Severity定制详解

2.3.4 Step定制详解

2.3.5 Issue和TestCase定制详解

2.3.6 Environment定制详解

2.3.7  attach定制详解

3、持续集成 Jenkins 构建 Allure Report

3.1 安装插件 allure-jenkins-plugin

3.2  构建配置

3.3  查看报告

4、问题总结

1  Jenkins 集成时打包本地python 环境

2  Jenkins中执行python命令,出现python不是内部命令的问题

3  allure-result 不存在,allure报告数据为空


1、Allure简介

Allure是一款非常轻量级并且非常灵活的开源测试报告生成框架。 它支持绝大多数测试框架, 例如TestNG、Pytest、JUint等。它简单易用,易于集成。下面就Pytest如何与Allure集成做详细介绍。

2、Pytest框架集成Allure

Pytest是Python的单元测试框架,非常方便和易用。强烈推荐对于用Python进行测试工作的小伙伴使用这个测试框架,相比与Python自带的UnitTest好用太多太多。今天我们主要是介绍如何将测试报告生成工具Allure集成到Pytest中。目前现在已经有allure2了,我们要使用的就是这个allure2。

2.1 环境配置

a、因为allure2需要在java的环境下,并且要求必须是jdk1.8级以上,所以要首先保证这一点。

b、安装allure-pytest,他用来在pytest执行测试结束后生成allure所需要的配置信息。安装使用pip命令即可:

安装Python依赖库:
pip3 install allure-pytest

注意:我看到许多教程是让安装 pytest-allure-adaptor 的,我刚开始也是安装的它,但是使用的时候出了错。查了解决方法就是卸掉pytest-allure-adaptor,安装allure-pytest。后来了解到官方已经放弃维护pytest-allure-adaptor~

c、下载allure2:https://github.com/allure-framework/allure2/releases,我们下载的是allure-2.8.0版本;下载后解压,放在某个位置(建议放在C:\python35\Lib\site-packages下);配置环境变量:环境变量path中加上解压好的文件夹下的bin目录下的allure.bat文件的路径(这里是:C:\python35\Lib\site-packages\allure-2.8.0\bin)

2.2 生成html报告

if __name__=="__main__":pytest.main(['-s','-q','--alluredir','report/result','test_Pytest.py'])os.system("C:/python35/Lib/site-packages/allure-2.8.0/bin/allure.bat ""generate ""F:/pycharm_workspace/FirstApplication/testPytest/report/result ""-o ""F:/pycharm_workspace/FirstApplication/testPytest/report/html")

2.2.1 pytest命令基础上加--alluredir,生成测试数据

pytest命令基础上加--alluredir,生成测试数据。(测试脚本中添加了Allure特性之后,在执行测试的时候需要先生成Allure报告所需要的测试结果数据。在py.test执行测试的时候,指定–alluredir选项及测试数据保存的目录即可)

pytest -s -q --alluredir [xml_report_path]
//[xml_report_path]根据自己需要定义文件夹,作者定义为:/report/result

例子:

#test_Pytest.py文件
#coding=utf-8import pytest
import osclass Test_Pytest():def test_one(self):print("test_one方法执行" )assert 1==1def test_two(self):print("test_two方法执行" )assert "s" in "love"def test_three(self):print("test_three方法执行" )assert 3-2==1if __name__=="__main__":pytest.main(['-s','-q','--alluredir','report/result','test_Pytest.py'])

运行结果:

2.2.2 命令行方式

第一步:用命令行或os模块运行allure命令,来生成html格式的报告(通过下面的命令将./result/目录下的测试数据生成测试报告
命令如下:(因为我们已经将allure.bat放在环境变量中,所以在哪里打开cmd窗口都可以找到allure/allure.bat)

allure generate 配置信息的路径 -o 生成报告的路径

allure generate ./result/ -o ./report/html --clean

这样在./report/目录下就生成了Allure的测试报告了。–clean目的是先清空测试报告目录,再生成新的测试报告

第二步:打开/report/html,下面的index.html

第三步:通过下面的命令打开测试报告:

$ allure open -h 127.0.0.1 -p 8083 ./report/

解释:127.0.0.1:是IP,可以替换成本机IP,这样就可以远程打开网页了,8083是端口号,用一个不常用的就行

本机的浏览器将打开http://127.0.0.1:8083/index.html网页,展示测试报告。

或者参考下面方式,打开HTML,但是一般用上面的方面简单:

第二种方式,打开HTML,参考https://blog.csdn.net/baozi_xiaoge/article/details/103380307

2.3 定制报告

@allure.feature # 用于定义被测试的功能,被测产品的需求点
@allure.story # 用于定义被测功能的用户场景,即子功能点
with allure.step # 用于将一个测试用例,分成几个步骤在报告中输出
allure.attach # 用于向测试报告中输入一些附加的信息,通常是一些测试数据信息
@pytest.allure.step # 用于将一些通用的函数作为测试步骤输出到报告,调用此函数的地方会向报告中输出步骤

2.3.1 Features、Story定制详解

# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
import allure
import pytest@allure.feature('test_module_01')
@allure.story('test_story_01')
def test_case_01():"""用例描述:Test case 01"""assert 0@allure.feature('test_module_01')
@allure.story('test_story_02')
def test_case_02():"""用例描述:Test case 02"""assert 0 == 0if __name__ == '__main__':pytest.main(['-s', '-q', '--alluredir', './report/xml'])

$ py.test test/ --allure_features='test_module_01' --allure_stories='test_story_01'

2.3.2 用例标题和用例描述定制详解

# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
import allure
import pytest@allure.feature('test_module_01')
@allure.story('test_story_01')
#test_case_01为用例title
def test_case_01():"""用例描述:这是用例描述,Test case 01,描述本人"""#注释为用例描述assert 0if __name__ == '__main__':pytest.main(['-s', '-q', '--alluredir', './report/xml'])

2.3.3  Severity定制详解

Allure中对严重级别的定义:
1、 Blocker级别:中断缺陷(客户端程序无响应,无法执行下一步操作)
2、 Critical级别:临界缺陷( 功能点缺失)
3、 Normal级别:普通缺陷(数值计算错误)
4、 Minor级别:次要缺陷(界面错误与UI需求不符)
5、 Trivial级别:轻微缺陷(必输项无提示,或者提示不规范)

# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
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 == 0if __name__ == '__main__':pytest.main(['-s', '-q', '--alluredir', './report/xml'])

2.3.4 Step定制详解

#!/usr/bin/env python
# coding=utf-8import pytest
import allure@allure.feature('购物车功能')  # feature定义功能
class TestShoppingTrolley(object):@allure.story('加入购物车')  # story定义用户场景def test_add_shopping_trolley(self):login('刘春明', '密码')  # 调用“步骤函数”with allure.step("浏览商品"):  # 将一个测试用例分成几个步骤,将步骤打印到测试报告中,步骤2allure.attach('商品1', '刘春明')  # attach可以打印一些附加信息allure.attach('商品2', 'liuchunming')with allure.step("点击商品"):  # 将一个测试用例分成几个步骤,将步骤打印到测试报告中,步骤3passwith allure.step("校验结果"):allure.attach('期望结果', '添加购物车成功')allure.attach('实际结果', '添加购物车失败')assert 'success' == 'failed'@allure.story('修改购物车')def test_edit_shopping_trolley(self):pass@pytest.mark.skipif(reason='本次不执行')@allure.story('删除购物车')def test_delete_shopping_trolley(self):pass@allure.step('用户登录')  # 还可以将一个函数作为一个步骤,调用此函数时,报告中输出一个步骤,步骤名字通常是函数名,我把这样的函数叫“步骤函数”
def login(user, pwd):print(user, pwd)

2.3.5 Issue和TestCase定制详解

#-*- coding: utf-8 -*-
#@Time    : 2018/8/17 上午10:10
#@Author  : WangJuan
#@File    : test_case.py
import allure
import pytest@allure.step("字符串相加:{0},{1}")
#测试步骤,可通过format机制自动获取函数参数
def str_add(str1, str2):print('hello')if not isinstance(str1, str):return "%s is not a string" % str1if not isinstance(str2, str):return "%s is not a string" % str2return str1 + str2@allure.feature('test_module_01')
@allure.story('test_story_01')
@allure.severity('blocker')
@allure.issue("http://www.baidu.com")
@allure.testcase("http://www.testlink.com")
def test_case():str1 = 'hello'str2 = 'world'assert str_add(str1, str2) == 'helloworld'if __name__ == '__main__':pytest.main(['-s', '-q', '--alluredir', './report/xml'])

2.3.6 Environment定制详解

# 具体Environment参数可自行设置
allure.environment(app_package='com.mobile.fm')
allure.environment(app_activity='com.mobile.fm.activity')
allure.environment(device_name='aad464')
allure.environment(platform_name='Android')

2.3.7  attach定制详解

file = open('../test.png', 'rb').read()
allure.attach('test_img', file, allure.attach_type.PNG)

在报告中增加附件:allure.attach(’arg1’,’arg2’,’arg3’):
arg1:是在报告中显示的附件名称 
arg2:表示添加附件的内容 
arg3:表示添加的类型(支持:HTML,JPG,PNG,JSON,OTHER,TEXTXML)

3、持续集成 Jenkins 构建 Allure Report

3.1 安装插件 allure-jenkins-plugin

  1. 进入系统管理 - 管理插件
  2. 搜索Allure,并进行安装,重启Jenkins
  3. 进入系统管理 - 全局工具配置 - Allure Commandline
  4. 点击 Allure Commandline安装,如下图:其中name可随便定义,作为标识用。

点击后,弹出下面的页面,输入Allure的命令别名和版本后,点击Apply 和Save。(或者不勾选自动安装,使用你已经下载好的包,把包的路径复制到这里就行,如下图:)

3.2  构建配置

  1. General - 参数化构建过程 处增加参数ALLURE_HOME,参数值填写存放allure results的默认路径。
  2. 构建 - Execute shell 处增加命令:--alluredir ${ALLURE_HOME}   如:pytest src\testcase\ -s -q --alluredir report\result
  3. 构建后操作 - Allure Report ,Results Path处设置${ALLURE_HOME}

注意:一定要在jenkins添加shell命令生成result(生成报告的数据源),在脚本里面写的生成的数据源生不成HTML报告(血泪史)

3.3  查看报告

构建已配置好的工程,即可查看Allure Report,有多处入口,点击任意入口即可查看Report,见下图

4、问题总结

1  jenkins 集成时打包本地python 环境

在本地执行:pip freeze > requirements.txt

安装有jenkins的服务上面执行:pip install -r requirements.txt,,,,将上面打包的环境导入到新环境中,新环境的python 环境将于之前的环境一样,这样所使用的包就不用手动一个一个的导入了

2  Jenkins中执行python命令,出现python不是内部命令的问题

问题描述:已安装python安装包,但是还是提示python 不是内部命令

定位原因:python.exe 不在jenkins执行用户的PATH里面

解决:构建的时候Python命令加上python.exe的路径

3  allure-result 不存在,allure报告数据为空

就是生成allure htlm的数据源不存在

问题描述:

我出现的问题是,在脚本中已经执行命令: pytest src\testcase\ -s -q --alluredir report\result,生成了数据,但是Jenkins中构建成功,生成allure-HTML时,还是提示allure htlm的数据源不存在,生成的报告数据为空

解决:

a .一定要在jenkins添加shell命令生成result(生成报告的数据源),如下:

b. 下面2处地址一定要一致

pytest+Allure+jenkins相关推荐

  1. pytest allure测试报告_Appium+pytest+allure+jenkins如何实现多台手机连接

    很多人可能想到的是多线程(threading). 今天分享一种比多线程更简单的方法,虽然不是多台手机同时运行,但可以连接多台手机依次运行. 大致的运行方式是:001号测试用例:A手机,B手机...,0 ...

  2. CSDN绝无仅有只此一篇:Appium+pytest+allure+jenkins如何实现多台手机连接详细教程教学

    使用appium可以实现app自动化测试,我们之前是连接一台手机去运行, 如何同时连接多台手机呢? 很多人可能想到的是多线程(threading). 今天分享一种比多线程更简单的方法,虽然不是多台手机 ...

  3. Pytest+Allure+Jenkins接口自动化项目实战(一)

    经过一周多时间,基于python+pytest+excel+allure框架的接口自动化测试初版已基本实现,包括基本配置读取.用例读取.用例执行.sql读取执行.前置数据准备.后置数据清理以及测试报告 ...

  4. 22.【终结篇】poco/airtest+pytest+allure+jenkins框架篇

    如果这些内容对你有帮助,也可以打开微信扫一扫,加关注: ​ 前几篇文章已分享了所有代码层相关内容,并提供了源码文件,接下来看下怎么和jenkins配合使用. 为了更方便获取框架源码,下面再汇总下前面几 ...

  5. python自动化框架pytest接口关联串联_python(pytest)+allure+jenkins 实现接口自动化的思路...

    ABZ理论 前言 身为著名的创业者+投资人,LinkedIn和Paypal的联合创始人Reid Hoffman有一个令我印象深刻的ABZ理论,他认为,你在任何时刻,手中都需要有三个计划:A计划.B计划 ...

  6. python自动化测试报告 之 allure_Pytest+ Allure + Jenkins 自动化测试报告

    在自动化测试执行之后,生成一个美观大方的测试报告,也是测试过程中,非常最要的一环.测试报告直接反应了测试过程中发现的问题,分析测试报告是解决问题的最重要手段.那么一个专业的测试报告应该长什么样呢?废话 ...

  7. pytest测试框架(七)---pytest与jenkins集成(pytest+jenkins+allure)

    目录 一.pytest注册命令行选项 1.addoption 2.pytestconfig.getoption 3.示例 二.Jenkins上显示allure测试报告 1.安装插件 2.配置Allur ...

  8. 最新出炉 全网最牛最新的pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试【超详细】从0到封装

    接口自动化测试框架(用例自动生成) 项目说明 本框架是一套基于pytest+requests+Python3.7+yaml+Allure+Jenkins+docker而设计的数据驱动接口自动化测试框架 ...

  9. pytest allure测试报告_用Pytest+Allure生成漂亮的HTML图形化测试报告

    对于软件测试工作来说,测试报告是非常重要的工作产出.一个漂亮.清晰.格式规范.内容完整的测试报告,既能最大化我们的测试工作产出,又能够减少开发人员和测试人员的沟通成本. 本篇文章将介绍如何使用开源的测 ...

最新文章

  1. python实时处理_python实时处理log文件脚本
  2. python批量读取csv文件-使用Python读写csv文件的三种方法
  3. 接收端收到数据包以后的处理过程
  4. (原创)c#学习笔记08--面向对象编程简介02--OOP技术02--继承
  5. CISCO路由器连接ADSL之PPPoE配置
  6. tomcat查看当前内存
  7. Python运算符和表达式注意的地方
  8. 基于matlab的信源编码pcm,信源编码仿真实现
  9. 【Java】认识Sring、String的常见操作和StringBuffer 和StringBuilder的区别【字符串详解】
  10. 报错:No coverage information was collected, exit without writing coverage information
  11. java-php-python-ssm网上购物超市系统计算机毕业设计
  12. 2022华南师范大学软院软件工程考研经验贴(初试380)
  13. 高级远程办公解决方案 ETX ,用于桌面虚拟化和远程访问图形要求苛刻的应用程序
  14. 视频人体动作捕捉技术
  15. J-Link软件和文档包的版本发行说明(3)[V6.14 ~ V6.48b版本]
  16. Windows系统的【Windows照片查看器】没有了
  17. 阿里腾讯外包Java怎样_阿里Java岗、腾讯后台开发岗面经(拿到AT双Offer)
  18. 前端生成PDF文件实现方案
  19. 快手小程序、网红探店小程序、多商户版(裂变分销+商家核验+集字卡片活动+积分抵扣)
  20. 郭光灿院士:量子计算技术的研究现状与趋势

热门文章

  1. Java对接高德地图计算距离_高德地图计算两点之间的距离java+html
  2. 不解“安全态势感知”为何物?
  3. 大学生应对面试宝典(电话、现场面试)
  4. spring--享学课堂
  5. Qt安装及配置资源链接
  6. MySQL事务的四种隔离界别以及会造成的问题和解决办法
  7. 自定义滚动条样式 -webkit-scrollbar
  8. git merge\git merge --no-commit\git merge --squash区别
  9. 比较两个文件夹找出不同的文件,并按路径复制到另外一个文件夹(shell练习记录1)
  10. 2012年最新的12款超棒jQuery插件