自动化测试报告(allure/html)
pytest有两种生成测试报告的方法(html和allure),今天就给大家一一介绍下
html
一.pytest-html基本语法
1.安装:pip install pytest-html
2.查看版本:pip show pytest-html
3.生成测试报告基本语法:
语法一:pytest --html=生成报告的url 运行用例的.py文件
语法二:pytest --html=生成报告的url --self-contained-html 运行用例的.py文件
二.实例
1.创建一个test_pytestHtml.py文件,编写几条用例(忽略警告)
2.在Terminal运行命令:pytest --html=生成报告的url 运行用例的.py文件,运行成功后,这个时候我们去
生成报告的url下可以看见生成两个文件,一个是我们生成的html报告,另一个是assets文件,里面存放的是
css文件,打开素材的html报告后可以看见用例的执行情况
3.我们再在Terminal运行命令:pytest --html=生成报告的url --self-contained-html 运行用例的.py文件,
同样运行成功后,我们去看下生成的文件,发现只有html生成,并没有assets文件,这是因为css语法
写在了html文件中,没有单独放出来。所以方便以后报告的发送,建议使用第二中语法。
三.修改生成的测试报告(挂钩用法见pytest官方:https://docs.pytest.org/en/latest/reference/reference.html#hooks)
1.环境的修改
我们可以看到在html中248行,环境是以表格的形式呈现出来的,如果我们想删除某些默认环境或者添加自
己想要的环境,可在根目录下创建conftest.py文件,如下图,pytest_configure(config): 许插件和conftest文
件执行初始配置。我在再来重新生成html报告可以看见我们在Environment下修改的内容
2.概括的修改
可以看到源代码中264行表示的是概括,但默认的内容只有用例总数和运行时间,如果我们想要增加自己想要的
信息模块,可在conftest.py下编写函数,再次运行生成html文件就可看见需要的内容了
3.标题的修改
同样在conftest文件下编写pytest_html_report_title函数,如下
allure(如果可以的话建议使用allure,美观+高级+好用)
一.环境配置
1.下载jdk配置java运行环境,下载地址:https://www.oracle.com/java/technologies/downloads/#jdk18-windows
2.下载安装完成后配置java环境变量(属性>高级设置>环境变量>新建),添加JAVA_HOME。
在path下里添加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
3.配置完成后可在dos窗口输入javac,java -version,能输出版本号及相关指令即安装配置成功
4.下载allure工具:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/,下载成功
后配置环境变量,path下添加allure的bin文件所在目录
5.配置完成在dos创建输入allure有相关内容时即安装成功
6.安装allure-pytest工具,打开你使用的编程工具,这里以pycharm为例,在Terminal输入pip install allure-pytest
二.allure报告的生成指令
1.生成json文件:pytest -q --alluredir=生成json文件的路径 需要运行的case路径(说明:-q简要输出)
2.将生成的json文件转出html格式
(1)指定路径生成html报告:allure generate -o 生成html报告的路径 json文件路径
(2)默认路径生成html报告:allure generate -clear json文件路径(说明:默认路径
为allure-report,clear清空该路径原有的报告)
(3)open及serve用法
serve:allure serve -o 生成html报告的路径 json文件路径(说明:与generater
不同的是,serve生成html后会自动在浏览器打开该报告)
open:allure open -h ip地址 html路径(说明:打开生成的html报告)
注:serve和open运行时会自动打开一个java进程,且只能手动关闭,因此多次使用
serve和open会增加java消耗
三.allure报告的用法(本次介绍下面几种常用的allure方法)
方法 | 说明 |
@allure.epic() | 一级类目 |
@allure.feature() | 二级类目 |
@allure.story() | 三级类目 |
@allure.title() | 用例标题 |
@allure.testcase() | case地址 |
@allure.issue() | bug地址 |
@allure.description() | case描述 |
@allure.step() | case步骤 |
@allure.severity() | case等级 |
@allure.link() | 链接 |
1.@allure.epic(),allure.feature(),allure.story()的使用
(1)创建一个test.two.py文件,写法如下
import allure
@allure.epic("我是一级目录")
@allure.feature("我是二级目录")
@allure.story("我是三级目录")
class TestDome:
def test_one(self):
print("我是test_one")
assert True def test_two(self):
print("我是test_two")
assert False
(2)生成json文件:pytest --alluredir=./report/2022-5-22 testcase/test_two.py
(3)将生成的json文件转出html:allure generate -o ./allure-report/2022-5-22 ./report/2022-5-22
此时我们可以看见allrue-report目录下有个2022-5-22/index.html,打开后在Behaviors下可看见运行case
2.@allure.title()的使用
(1)从上面可以看出每条case的标题都是函数名字(如:test_one,test_two),我们可以用title修改默认标题
class TestDome:
@allure.title("我是one")
def test_one(self):
print("我是test_one")
assert True @allure.title("我是two")
def test_two(self):
print("我是test_two")
assert False
(2)运行后的结果
3.@allure.testcase(),@allure.issue(),@allure.link()用法
(1)allure作用与class上,那么该class下所有的函数都会被定义到,如果allure作用于
每个函数上,那么只对该函数生效
@allure.testcase("path url", name="我是存放测试用例的地址")
@allure.issue("bug url", name="bug地址")
@allure.link("link url", name="链接地址")
class TestDome:
@allure.title("我是one")
def test_one(self):
print("我是test_one")
assert True @allure.title("我是two")
def test_two(self):
print("我是test_two")
assert False
(2)运行后的结果,可以看出case右侧多出links模块
4.@allure.description()用法
(1)用法一:使用description编写case描述
import pytest
import allure @allure.epic("我是一级目录")
@allure.feature("我是二级目录")
@allure.story("我是三级目录")
@allure.testcase("path url", name="我是存放测试用例的地址")
@allure.issue("bug url", name="bug地址")
@allure.link("link url", name="链接地址")
class TestDome:
@allure.description("我是来描述test_one这条case的")
@allure.title("我是one")
def test_one(self):
print("我是test_one")
assert True @allure.title("我是two")
def test_two(self):
print("我是test_two")
assert False
运行后该条case右侧overview多出了description模块
(2)用法二:无需使用@allure.description(),可在函数中使用(""""""),生成测试报告会自动获取
import pytest
import allure @allure.epic("我是一级目录")
@allure.feature("我是二级目录")
@allure.story("我是三级目录")
@allure.testcase("path url", name="我是存放测试用例的地址")
@allure.issue("bug url", name="bug地址")
@allure.link("link url", name="链接地址")
class TestDome:
@allure.title("我是one")
def test_one(self):
"""我是test_one实例方法,该方法是TestDome第一个实例方法"""
print("我是test_one")
assert True @allure.title("我是two")
def test_two(self):
print("我是test_two")
assert False # pytest --alluredir=./report/2022-5-22-02 testcase/test_two.py
# allure generate -o ./allure-report/2022-5-22-02 ./report/2022-5-22-02
运行后的结果
5.@allure.step()用法
(1)该方法在函数外使用时直接@allure.step()即可。要是在函数中使用,需要with allure.step():
import pytest
import allure class TestDome:
@allure.step("步骤一")
@allure.step("步骤二")
@allure.step("步骤三")
def test_one(self):
print("我是test_one")
assert True def test_two(self):
print("我是test_two")
assert False
import pytest
import allure class TestDome: def test_one(self):
with allure.step("步骤一:打开登录页面"):
with allure.step("步骤二:输入正确的用户名和密码"):
with allure.step("步骤三:点击登录"):
assert True def test_two(self):
print("我是test_two")
assert False
运行后结果,可以看到test body下的运行步骤
6.@allure.severity()用法
(1)severity有四种等级
blocker | 阻塞缺陷 |
critical | 严重缺陷 |
normal | 一般缺陷 |
trivial | 轻微缺陷 |
minor | 次要缺陷 |
(2)具体用法:@allure.severity("等级")
import pytest
import allure class TestDome:
@allure.severity("trivial")
def test_one(self):
with allure.step("步骤一:打开登录页面"):
with allure.step("步骤二:输入正确的用户名和密码"):
with allure.step("步骤三:点击登录"):
assert True def test_two(self):
print("我是test_two")
assert False
(3)运行结果,如果不手动定义的话,默认为normal bug
四.allure和pytest参数连用
1.@pyteat.mark.parametrize参数化
import pytest
import allure class TestDome:
@pytest.mark.parametrize("param", [{"name": "李明", "age": 18}, {"name": "李华", "age": 17}])
def test_one(self,param):
with allure.step("步骤一:打开登录页面"):
with allure.step("步骤二:输入正确的用户名和密码"):
with allure.step("步骤三:点击登录"):
assert True def test_two(self):
print("我是test_two")
assert False
运行后结果,可以看出这里test_one运行了两次,成功测试报告后参数值会自己填充在parameters中
2.skip和xfail
(1)我们先来了解下这两种方法的定义
@pytest.mark.skip()来跳过该条case不执行,可以看出以下代码运行后并不会执行test_one case
import pytest
import allure
class TestDome:
@pytest.mark.skip(reason="跳过该条case")
def test_one(self):
print("我是test_one")
assert True
def test_two(self):
print("我是test_two")
assert True
@pytest.mark.xfail()标记预期结果值,
import pytest
import allure class TestDome:
@pytest.mark.xfail(reason="预期返回True")
def test_one(self):
print("我是test_one")
assert True def test_two1(self):
print("我是test_two")
assert True
(2)接下来进入正题,skip and xfail与alure一起使用这里直接贴图吧,具体写法和上面一致
这里可以看出test_one case跳过后并没有运行,置灰显示
五.在allure报告中打印日志和print内容
1.首先我们需要先封装下logging日志,具体写法如下(这里你定义一个函数,编写在函数中)
import logging
import os logger = logging.getLogger("weixin_api_log") # 设置日志名称
logger.setLevel(logging.DEBUG) # 设置日志等级
formats = logging.Formatter("[%(asctime)s] [%(levelname)s] %(message)s") # 设置打印格式
file_url = logging.FileHandler("C:/Users/XXX/PycharmProjects/weixin_api/log/weixin.log", mode="a+",
encoding="utf8") # log文件路径
# file_url1 = logging.StreamHandler() # 操作台打印
file_url.setFormatter(formats) # 赋予打印格式
# file_url1.setFormatter(formats) logger.addHandler(file_url)
# logger.addHandler(file_url1)
2.创建test_one.py调用logging
import pytest
import allure
from commom.log import logger
import datetime class TestDome:
def test_one(self):
logger.debug(f"日志时间:{datetime.datetime.now()}")
print("我是test_one")
assert True def test_two1(self):
print("我是test_two")
assert True
3.运行结果(这里需要注意的是,运行是不用加-s参数,如果加的话,print打印内容不会再报告中显示)
在test body下log里会展示打印的日志,stdout里展示的是print打印的内容
自动化测试报告(allure/html)的更多相关文章
- Allure自动化测试报告我是这样用的
关于自动化测试报告: 之前用过testNG自带的测试报告.优化过reportNG的测试报告.extentreport.Zreport(大飞总原创),这些是我之前都用过的,也是在去年雯姐和我说过Allu ...
- Allure自动化测试报告之修改allure测试报告名称
1.从github获取allure代码 https://github.com/allure-framework/allure2 2.安装gradle,用于打包jar brew install grad ...
- Python&Selenium&pytest借助allure生成自动化测试报告
一.摘要 本篇博文将介绍Python和Selenium进行自动化测试时,如何借助allure生成自动化测试报告 二.环境配置 首先python环境中安装pytest和pytest_allure_ada ...
- 【测试设计】使用jenkins 插件Allure生成漂亮的自动化测试报告
前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告,后来也尝试过用Python的PyH模块自己构建测试报告,在后来看到了RobotFramework的测试报告,感觉之前用的 ...
- pytest+allure生成接口自动化测试报告
准备环境 1.安装pytest pip install pytest -i http://pypi.douban.com/simple pytest-ordering pytest.main([ &q ...
- jmeter生成html格式接口自动化测试报告
jmeter生成html格式接口自动化测试报告 jmeter自带执行结果查看的插件,但是需要在jmeter工具中才能查看,如果要向领导提交测试结果,不够方便直观. 笔者刚做了这方面的尝试,总结出来分享 ...
- HTMLTESTRunner自动化测试报告增加截图功能
我们都知道HTMLTESTRunner自动化测试报告,是Unittest单元测试框架报告,那么在做ui测试的时候就有点不适用了. 我们需要出错截图功能. 以下是我改的,增加了截图功能,先展示界面,再展 ...
- Python+Selenium----使用HTMLTestRunner.py生成自动化测试报告2(使用PyCharm )
1.说明 在我前一篇文件(Python+Selenium----使用HTMLTestRunner.py生成自动化测试报告1(使用IDLE ))中简单的写明了,如何生产测试报告,但是使用IDLE很麻烦, ...
- Python+Selenium----使用HTMLTestRunner.py生成自动化测试报告1(使用IDLE)
1.说明 自动化测试报告是一个很重要的测试数据,网上看了一下,使用HTMLTestRunner.py生成自动化测试报告使用的比较多,但是呢,小白刚刚入手,不太懂,看了很多博客,终于生成了一个测试报告, ...
- Python2 HTMLTestRunner自动化测试报告美化
python2 的测试报告美化,需要的同学直接用 #coding=utf-8 """ A TestRunner for use with the Python unit ...
随机推荐
- html5不熟悉的标签全称
<dl></dl> 定义列表(英文全称:DefinitionList) <dt> 放在每个定义术语词前(定义术语.英文全称:DefinitionTerm) 名称 & ...
- 在小程序中Tabbar显示和隐藏的秘密
其实对Tabbar 的用法的理解总结下来分这几个阶段: 第一阶段:在 app.json 中配置 "tabBar": { "list": [{ "pag ...
- CSS - 定位属性position使用详解(static、relative、fixed、absolute)
position 属性介绍 (1)position 属性自 CSS2 起就有了,该属性规定元素的定位类型.所有主流浏览器都支持 position 属性. (2)position 的可选值有四个:sta ...
- java中的排序除了冒泡以来, 再给出一种方法, 举例说明
9.5 排序: 有一种排序的方法,非常好理解,详见本题的步骤,先找出最大值和最小值,把最小值打印出来后,把它存在另一个数组b当中,再删除此最小值,之后再来一次找出最小值,打印出最小值以后,再把它存 ...
- title与h1的区别、b与strong的区别、i与em的区别
strong标签有语义,是起到加重语气的效果,而b标签是没有的,b标签只是一个简单加粗标签.b标签之间的字符都设为粗体,strong标签加强字符的语气都是通过粗体来实现的,而搜索引擎更侧重strong ...
- Mybatis更新和删除数据
接上文->Mybatis快速入门<- 1.在UserMapper.xml配置更新和删除 <!-- 更新操作--> <update id="update" ...
- 为什么说TCP协议是可靠的?
TCP 实现可靠通信的两种方式 我们都知道 IP 协议是"不太靠谱".因为 IP 协议是不可靠的,所以 IP 数据包可能在传输过程中发生错误或者丢失.这就意味着,TCP 协议不得不 ...
- C++五子棋(五)——实现AI落子
AI思考落子点 在之前我们已经实现计算权值了,现在要想让AI落子,应根据之前的计算结果使棋子落在分值最大点上.当然可能会出现多个分值相同的最大点,这时在其中随机取一个点落下即可. chessData. ...
- vue3响应式模式设计原理
vue3响应式模式设计原理 为什么要关系vue3的设计原理?了解vue3构建原理,将有助于开发者更快速上手Vue3:同时可以提高Vue调试技能,可以快速定位错误 1.vue3对比vue2 vue2的原 ...
- vscode golang 不能自动补全问题
问题描述: 使用vscode编辑go语言时,有时候会莫名其妙的代码不能自动补全,struct的属性值不能自动提示,这时候如果重新启动vscode也没有效果,就可能是gocode插件出了问题或者有了更新 ...