当前位置:   article > 正文

python模拟并发是多线程_Python + Selenium+ HTMLTestRunner 多线程并发执行,并合并报告...

python selenium多线程 并发

1、背景:因为被测试服务器有很多限制,一秒内单页面请求只有3个/s,访问同一个页面,经常要等待4s才能保证访问不异常(异常是503,nginx配置的)

2、按一个用例文件一个报告文件,输出如下截图,最后一个是合并的报告文件

333.jpg

思路其实很简单。HTMLTestRunner.run()会返回一个result对象,报告生成用到的数据,都在result里面。我们只要把多文件跑的result集中起来,像小厨师一样,去掉头和尾,就可以下锅了。

1、Html 无法展开子项,样式问题已经解决。(展开行、展开下属行,点击概览部分)

2、问题,case的print内容错乱,尝试了几种方法还是如此(原因是HTMLTestRunner 获取当前标准输入输出作为case的output,而多线程时候print本来就不是有序的。)

3、如果忽视print内容的话,直接看case error也能分析问题的话,还是可以用的。

MergeResult运行的方法思路

1、init_rows方法 > 遍历所有result。填充html>hr数据行,run_times 变化是为了能展开当前case的tr td数据。返回slef.rows数据

2、rows_to_report方法,给case 产生的tr行(存储在slef.rows),添加表头等数据

3、组装完整html文件,写入文件

1、主要运行入口

# -*- coding: utf-8 -*-

# @Time : 2020/7/8 16:34

# @Author : gh

# @Software: PyCharm

import platform

from M_site_selenium.HTMLTestRunner import *

import sys

import os

import threadpool

import time

# 解决bat执行的路径问题

curPath = os.path.abspath(os.path.dirname(__file__))

rootPath = os.path.split(curPath)[0]

print(rootPath)

sys.path.append(rootPath)

current_path = os.getcwd()

current_path = r"绝对路径"

allcase = r"用例绝对路径"

if platform.platform().startswith("Linux"):

current_path = "M_site_selenium"

allcase = "M_site_selenium/case"

def create_suite():

# 不要太多其他的

discover = unittest.defaultTestLoader.discover(allcase, pattern='test*.py', top_level_dir=None)

return discover

# 所有case 结果result,存入list

all_result = []

def run_case(all_case, report_path, nth=0):

"""执行所有的用例, 并把结果写入测试报告"""

retry_count = 2

fp_temp = open(report_path, "wb")

runner = HTMLTestRunner(stream=fp_temp, verbosity=3, retry=retry_count, title=u'XX站点UI', description=u'测试用例结果' + report_path)

# 调用add_case函数返回值

res = runner.run(all_case)

# 每个结果result 存在集合中,完事时候,集中输出html

all_result.append(res)

fp_temp.close()

if __name__ == "__main__":

# 按目录获取到的cases

allcasenames = create_suite()

# 保存的.html 结果目录

if not os.path.isdir(current_path + "/report/rp2"):

os.mkdir(current_path + "/report/rp2")

time_stamp = int(time.time())

count = 0

start_time = datetime.datetime.now()

# 3线程数

task_pool = threadpool.ThreadPool(3)

lst = []

for i, j in zip(allcasenames, range(len(list(allcasenames)))):

file_path = current_path + '/report/rp2/index' + str(time_stamp) + str(count) + ".html"

count += 1

# 禁止文件路转义

file_path = file_path.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/1012662
推荐阅读
相关标签
  

闽ICP备14008679号