这次allure报告基于pytest测试框架写的,共分为4部,首先安装java的jdk,再安装allure,生成报告,最后再定制报告。
1、安装java的jdk
因为allure需要java的环境,所以要首先安装java环境
1.1 下载JDK
下载java安装包,至少要1.8.0以上版本,也就是jdk-8u321-windows-x64.exe
1.2 安装JDK
首先需要安装Java的JDK, 以jdk-8u321-windows-x64.exe为例。
双击安装包安装,点击下一步
点击下一步
点击下一步,安装jre
展示已经安装成功了。点击关闭。现在我们的jdk装好了。
下面开始配置环境变量
win10 系统 点击计算机--右键--属性--高级系统设置--环境变量--系统变量,
win 11 系统,打开控制面板,搜索查看高级系统设置
点击高级-->环境变量
选择系统变量下的新建,新建一个JAVA_HOME的系统变量,变量值为Java的JDK所在路径。
C:\Program Files\Java\jdk1.8.0_321
选择“系统变量”下面的”新建“选项,变量名为“CLASSPATH,变量值.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar
在环境变量中找到变量path,双击打开
在变量值最前面添加%Java_Home%\bin;%Java_Home%\jre\bin;
把后面有一个变量值C:\Windows\system32放到开头,因为%不能放在开头,否则会导致展开不了的问题。
环境变量Path点击编辑不展开解决办法_环境变量编辑页面展开不了-CSDN博客
环境变量配置完成后,点击确定选项
检查Java环境是否配置成功
按快捷键Win+R,输入cmd
输入java
输入javac
输入java -version,每次检查,都必须重新打开dos窗口
这样java的环境已经配置好了。
2、安装allure
2.1 下载allure命令行工具
下载地址,以2.17.3为例,先下载
点进去后,下载
allure-commandline-2.17.3.zip
2.2 安装
再C盘新建DDD文件夹,将下载的报告解压进去,
下面就是allure环境变量的路径 ,C:\DDD\allure-2.17.3\bin
配置环境变量
开始菜单搜索:高级系统设置-->切换到 高级选项卡--->点击环境变量按钮
选择Path双击,
选择新建环境变量,将刚才的环境变量复制进去
点击确定,确定,确定
检查,cmd 弹出小黑窗,allure--version
检查是否能显示出来allure的版本
3、生成报告
3.1 下载代码库
在这里,我们要在PyCharm里面下载allure-pytest、allure-python-commons两个代码库。
allure-pytest的作用是,运行pytest时,生成符合allure标准的测试结果数据。提供测试报告的数据。
在PyCharm中点击File--Settings
点击加号
可以选择特定版本,比如2.9.45,点击Install Package
另一个包安装与此类似,
3.2 编辑pytest.ini文件
编辑pytest.ini文件,加上addopts=-vs --alluredir ./result
加上这一句的意思是,将在result下生成测试结果中间数据,方便下一步测试报告的分析。
3.3 执行命令
在Terminal中执行命令"pytest"
可以看到result下面会生成很多的结果文件
把命令复制过来运行,分析测试结果,生成测试报告“allure generate ./result -o ./report --clean”
此时可以在report下面查看测试报告了
选择index.html右键Open In-->Browser-->Chrome
打开后是这样的
有六条执行失败了,可以看
点进去就会报详细信息
失败1:说找不到这个元素
元素未定位到,可能被删掉了
可能没有加时间等待。后面修改一下。
失败2:
# csrftoken 和sessionid 的值是动态变化的,时间长了也会过期,
即使设置了cookie的有效期,csrftoken和sessionid的值也是动态变化的,时间长了也会过期,所以通过cookie绕过登录的方法,只能保证短时间内执行大量的测试用例。
3.4 注意
其中还有注意的几点。
1.读取excel方法中,应该把excel路径改成绝对路径
D:\python\autoFuncTest2\utils\excel_utils.py
import os
from openpyxl import load_workbook
from datetime import datetime,date
def read(file_name):
sheet_name = file_name.split('\\')[-1].split('.')[0]
base_path = os.path.dirname(__file__)
# print(base_path) # 'D:\\python\\autoFuncTest2\\utils'
# 当前excel文件的绝对路径是'D:\\python\\autoFuncTest2\\resource\\test_data.xlsx'
path = base_path.replace('utils','resource\\test_data.xlsx')
# print(path) # D:\python\autoFuncTest2\resource\test_data.xlsx
excel = load_workbook(path)
sheet = excel[sheet_name]
table = []
date_column = 0
verify_date_column = 0
for row in sheet:
line = []
for cell in row:
if cell.row == 1 and cell.value == 'date':
date_column = cell.column
if cell.row == 1 and cell.value == 'verify_date':
verify_date_column = cell.column
if cell.row != 1 and cell.column == date_column:
# 2000/06/04 20:49
# 2000/6/4 20:49:00
cell.value = cell.value.strftime('%Y/%m/%d %H:%M')
if cell.row != 1 and cell.column == verify_date_column:
# Jun 4, 2024
# cell.value = cell.value.strptime(cell.value,'%Y/%m/%d %H:%M')
# cell.value = cell.value.strftime('%b %d, %Y') 'Jun 04, 2024'
# 如何去掉前导的0,
cell.value = cell.value.strftime('%b') + ' ' + str(int(cell.value.strftime('%d')))\
+ ', ' + cell.value.strftime('%Y')
line.append(cell.value)
table.append(line)
# print(table[1:])
return table[1:]
# 'if __name__ == '__main__':' 的作用,其他文件导入这个文件时,这段代码不会自动执行
# 否则,如果没有’if __name__ == '__main__':‘,要么在当前文件的方法不能被执行,
# 要么其他文件import当前文件时,下面的代码就会自动执行。
if __name__ == '__main__':
table1 = read(r'D:\python\autoFuncTest2\test_cases\test_login5.py')
print(table1)
base_path1 = os.path.dirname(__file__)
# print(base_path1) # 'D:\\ython\\autoFuncTest2\\utils'
# 当前excel文件的绝对路径是'D:\\python\\autoFuncTest2\\resource\\test_data.xlsx'
path1 = base_path1.replace('utils','resource\\test_data.xlsx')
# print(path1) # D:\python\autoFuncTest2\resource\test_data.xlsx
通过下面的这几句代码,把相对路径改成绝对路径
base_path = os.path.dirname(__file__)
# print(base_path) # 'D:\\ython\\autoFuncTest2\\utils'
# 当前excel文件的绝对路径是'D:\\python\\autoFuncTest2\\resource\\test_data.xlsx'
path = base_path.replace('utils','resource\\test_data.xlsx')
# print(path) # D:\python\autoFuncTest2\resource\test_data.xlsx
excel = load_workbook(path)
2、页面非中文不好理解,点击左下角Zh,选择中文
3、conftest.py文件的方法改成@pytest.fixture(scope='function'),每一条测试用例重新打开浏览器,避免互相影响
4、conftest.py文件的time.sleep(10)注释掉,否则运行的太慢,调试时可以加上便于观察
4、定制报告
一般写模块名、功能名、中文名就够了。
以登录login模块为例。
首先修改配置文件Pytest.ini
-k "login"模糊匹配login,使测试只找到带login的用例进行运行。
下面以test_login1.py为例介绍,
@allure.feature('登录模块') 说明多个测试用例在登录模块这个测试模块里面,便于观察结果
@allure.story('正常登录') 说明有这个用例的功能使正常登录,其他用例还有异常的登录等。
@allure.title('正常登录功能测试') 用例的头名字
@allure.description('用例描述') 这是对用例的描述
@allure.issue('bug链接','bug编号') 这个是附上以前的bug的信息的
@allure.severity("严重级别") 这个是说明用例的严重级别的
allure.attach.file(source="图片路径",name="图片名称") 这个是保留截图文件的。
下面是测试报告