既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
[内部资源] 想拿年薪30W+的软件测试人员,这份资料必须领取~
在平时用JMeter做测试时,生成报告的模板,不是特别好,大家应该也知道Allure报告,页面美观。
先来看效果图,报告首页,如下所示:
报告详情信息,如下所示:
运行run.py文件,运行成功,如下所示:
接下来来看下实现过程。
安装Allure
Allure是开源的,直接到github上下载即可。就不细说了。
需要注意的是,环境变量的配置,Allure的bin路径,需要配置到环境变量path中。
JMeter配置
找到bin目录下的 jmeter.properties 配置文件,将如下所示对应配置取消注释,jmeter.save.saveservice.output_format 修改为xml。
# This section helps determine how result data will be saved.
# The commented out values are the defaults.
# legitimate values: xml, csv, db. Only xml and csv are currently supported.
jmeter.save.saveservice.output_format=xml
# The below properties are true when field should be saved; false otherwise
#
# assertion_results_failure_message only affects CSV output
#jmeter.save.saveservice.assertion_results_failure_message=true
#
# legitimate values: none, first, all
#jmeter.save.saveservice.assertion_results=none
#
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
jmeter.save.saveservice.response_data=true
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=true
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
# Only available with HttpClient4
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=true
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=true
jmeter.save.saveservice.hostname=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=true
jmeter.save.saveservice.idle_time=true
# Timestamp format - this only affects CSV output files
# legitimate values: none, ms, or a format suitable for SimpleDateFormat
jmeter.save.saveservice.timestamp_format=ms
jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS
生成JMeter结果文件
使用命令 jmeter -n -t C:\Users\Desktop\auth.jmx -l C:\Users\Desktop\result.xml 即可生成xml文件。
安装依赖包
按项目中的requirements.txt 文件,安装对应的依赖包即可。
文件解析生成Allure报告
1 文件解析
xml文件内容如下:
从上述的内容,我们可以分析得出如下内容:
- t 从请求开始到响应结束的时间
- ts 表示访问的时刻: dates 运行的结果
- lb 表示标题
- rc 返回的响应码rm 响应信息
- tn 线程的名字
- assertionResult:断言信息
- responseData/samplerData:返回数据
- queryString: 请求信息
2 代码实现
利用生成的结果文件生成pytest的参数化数据:
try:
converte_data = xmltodict.parse(result_file, encoding='utf-8')
sample_keys = list(converte_data['testResults'].keys())
result = []
ws_result = []
sample_result = converte_data['testResults']['httpSample'] if isinstance(
converte_data['testResults']['httpSample'],
list) else [converte_data['testResults']['httpSample']]
if 'sample' in sample_keys:
ws_result = converte_data['testResults']['sample'] if isinstance(converte_data['testResults']['sample'],
list) else [
converte_data['testResults']['sample']]
result_data = sample_result + ws_result
for data in result_data:
time = data['@t'] if '@t' in data else ''
date = data['@ts'] if '@ts' in data else ''
status = data['@s'] if '@s' in data else ''
title = data['@lb'] if '@lb' in data else ''
status_code = data['@rc'] if '@rc' in data else ''
status_message = data['@rm'] if '@rm' in data else ''
thread = data['@tn'] if '@tn' in data else ''
assertion = data['assertionResult'] if 'assertionResult' in data else ''
response_data = data['responseData']['#text'] if 'responseData' in data and '#text' in data['responseData'] \
else ''
sampler_data = data['samplerData']['#text'] if 'samplerData' in data and '#text' in data['samplerData'] \
else ''
request_data = data['queryString']['#text'] if 'queryString' in data and '#text' in data[
'queryString'] else ''
request_header = data['requestHeader']['#text'] if 'requestHeader' in data and '#text' in data[
'requestHeader'] else ''
request_url = data['java.net.URL'] if 'java.net.URL' in data else ''
story = '未标记'
assertion_name, assertion_result = None, None
if status == 'false':
assertion_name, assertion_result = get_assertion(assertion)
meta_data = (
time, date, status, story, title, status_code, status_message, thread, assertion_name, assertion_result,
response_data
, sampler_data, request_data, request_header, request_url)
result.append(meta_data)
return result
except Exception as e:
print(e)
![img](https://img-blog.csdnimg.cn/img_convert/6e00dbaf68b76a023bcb86e6394a0918.png)
![img](https://img-blog.csdnimg.cn/img_convert/dd8288b7924332f525978d57faa8e309.png)
![img](https://img-blog.csdnimg.cn/img_convert/5bda0fa3af9e32b5bb7e9007fe3828f9.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**