简单的性能自动化测试架构设计和实现(pylot)-python
作者:网络转载 发布时间:[ 2013/5/20 10:02:14 ] 推荐标签:
5、结果生成部分:
代理中获取的数据终写到一个csv文件中,在代理部分的执行函数完成后,读取这个文件的内容,生成相关的结果数据和图片(图片在python中倾向于使用matlibplot包)。终将其写成html的结果报告形式:
重要代码:
def generate_results(dir, test_name):
print '
Generating Results...'
try:
merged_log = open(dir + '/agent_stats.csv', 'rb').readlines() # this log contains commingled results from all agents
except IOError:
sys.stderr.write('ERROR: Can not find your results log file
')
merged_error_log = merge_error_files(dir)
if len(merged_log) == 0:
fh = open(dir + '/results.html', 'w')
fh.write(r'<html><body><p>None of the agents finished successfully. There is no data to report.</p></body></html>
')
fh.close()
sys.stdout.write('ERROR: None of the agents finished successfully. There is no data to report.
')
return
timings = list_timings(merged_log)
best_times, worst_times = best_and_worst_requests(merged_log)
timer_group_stats = get_timer_groups(merged_log)
timing_secs = [int(x[0]) for x in timings] # grab just the secs (rounded-down)
throughputs = calc_throughputs(timing_secs) # dict of secs and throughputs
throughput_stats = corestats.Stats(throughputs.values())
resp_data_set = [x[1] for x in timings] # grab just the timings
response_stats = corestats.Stats(resp_data_set)
# calc the stats and load up a dictionary with the results
stats_dict = get_stats(response_stats, throughput_stats)
# get the pickled stats dictionaries we saved
runtime_stats_dict, workload_dict = load_dat_detail(dir)
# get the summary stats and load up a dictionary with the results
summary_dict = {}
summary_dict['cur_time'] = time.strftime('%m/%d/%Y %H:%M:%S', time.localtime())
summary_dict['duration'] = int(timings[-1][0] - timings[0][0]) + 1 # add 1 to round up
summary_dict['num_agents'] = workload_dict['num_agents']
summary_dict['req_count'] = len(timing_secs)
summary_dict['err_count'] = len(merged_error_log)
summary_dict['bytes_received'] = calc_bytes(merged_log)
# write html report
fh = open(dir + '/results.html', 'w')
reportwriter.write_head_html(fh)
reportwriter.write_starting_content(fh, test_name)
reportwriter.write_summary_results(fh, summary_dict, workload_dict)
reportwriter.write_stats_tables(fh, stats_dict)
reportwriter.write_images(fh)
reportwriter.write_timer_group_stats(fh, timer_group_stats)
reportwriter.write_agent_detail_table(fh, runtime_stats_dict)
reportwriter.write_best_worst_requests(fh, best_times, worst_times)
reportwriter.write_closing_html(fh)
fh.close()
# response time graph
def resp_graph(nested_resp_list, dir='./'):
fig = figure(figsize=(8, 3)) # image dimensions
ax = fig.add_subplot(111)
ax.set_xlabel('Elapsed Time In Test (secs)', size='x-small')
ax.set_ylabel('Response Time (secs)' , size='x-small')
ax.grid(True, color='#666666')
xticks(size='x-small')
yticks(size='x-small')
axis(xmin=0)
x_seq = [item[0] for item in nested_resp_list]
y_seq = [item[1] for item in nested_resp_list]
ax.plot(x_seq, y_seq,
color='blue', linestyle='-', linewidth=1.0, marker='o',
markeredgecolor='blue', markerfacecolor='yellow', markersize=2.0)
savefig(dir + 'response_time_graph.png')
# throughput graph
def tp_graph(throughputs_dict, dir='./'):
fig = figure(figsize=(8, 3)) # image dimensions
ax = fig.add_subplot(111)
ax.set_xlabel('Elapsed Time In Test (secs)', size='x-small')
ax.set_ylabel('Requests Per Second (count)' , size='x-small')
ax.grid(True, color='#666666')
xticks(size='x-small')
yticks(size='x-small')
axis(xmin=0)
keys = throughputs_dict.keys()
keys.sort()
values = []
for key in keys:
values.append(throughputs_dict[key])
x_seq = keys
y_seq = values
ax.plot(x_seq, y_seq,
color='red', linestyle='-', linewidth=1.0, marker='o',
markeredgecolor='red', markerfacecolor='yellow', markersize=2.0)
savefig(dir + 'throughput_graph.png') try: # graphing only works on systems with Matplotlib installed
print 'Generating Graphs...'
import graph
graph.resp_graph(timings, dir=dir+'/')
graph.tp_graph(throughputs, dir=dir+'/')
except:
sys.stderr.write('ERROR: Unable to generate graphs with Matplotlib
')
print '
Done generating results. You can view your test at:'
print '%s/results.html
' % dir
对于项目的运行,既可以采取控制台方式,也可以提供给QA人员GUI的方式。Pylot中提供了很好的GUI支持,可以作为示例使用。实际上不建议使用GUI的方式,另外pylot中没有用户指定策略的支持,这个需要自己专门进行开发;另外是pylot中的类封装结构还不是很好,对以后的扩展来说还需要一定的更改。但是作为一般使用已经足够了,下面是pylot的终报告结果(只做实例使用)。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11