selenium+python自动化89-unittest多线程执行用例

前言

假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时。。。

那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线程了,理论上开2个线程时间节省一半,开5个线程,时间就缩短五倍了。

一、 项目结构

1.项目结构跟之前的设计是一样的:

- case test开头的.py用例脚本

- common 放公共模块,如HTMLTestRunner

- report 放生成的html报告

- run_all.py 用于执行全部脚本

2.case文件夹里面用例参考

```

# coding:utf-8

import unittest

from selenium import webdriver

import time

class Test1(unittest.TestCase):

@classmethod

def setUpClass(cls):

cls.driver = webdriver.Firefox()

def setUp(self):

self.driver.get("http://www.cnblogs.com/yoyoketang/")

def test_01(self):

time.sleep(3)

t = self.driver.title

print t

# 随便写的用例,没写断言

def test_02(self):

time.sleep(3)

t = self.driver.title

print t

h = self.driver.window_handles

print h

# 随便写的用例,没写断言

@classmethod

def tearDownClass(cls):

cls.driver.quit()

if __name__ == "__main__":

unittest.main()

```

二、 多线程执行

1.多线程设计思路:

- 先写一个run的函数

- 保证for循环能跑的通

- 在run函数上加个装饰器 @threads(n),n是线程数

2.run_all参考代码

```

# coding=utf-8

import unittest

from common import HTMLTestRunner

import sys

from tomorrow import threads

# python2需要这三行,python3不需要

import os

reload(sys)

sys.setdefaultencoding('utf8')

# 获取路径

curpath = os.path.dirname(os.path.realpath(__file__))

casepath = os.path.join(curpath, "case")

reportpath = os.path.join(curpath, "report")

def add_case(case_path=casepath, rule="test*.py"):

'''加载所有的测试用例'''

discover = unittest.defaultTestLoader.discover(case_path,

pattern=rule,

top_level_dir=None)

return discover

@threads(3)

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

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

report_abspath = os.path.join(report_path, "result%s.html"%nth)

fp = open(report_abspath, "wb")

runner = HTMLTestRunner.HTMLTestRunner(stream=fp,

title=u'自动化测试报告,测试结果如下:',

description=u'用例执行情况:')

# 调用add_case函数返回值

runner.run(all_case)

fp.close()

if __name__ == "__main__":

# 用例集合

cases = add_case()

# 之前是批量执行,这里改成for循环执行

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

run_case(i, nth=j) # 执行用例,生成报告

```

3.生成报告,这里生成的报告是多个的,每个.py脚本生成一个html的报告,接下来遇到的难点就是合并报告了

那么问题来了,如何把多个html报告合并成一个报告呢?

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

GitHub最流行语言:JS 还第一,Python 反超 Java

转自:开源中国 ? GitHub Universe 是 GitHub 的年度盛会,今年10月10-12日,GitHub Universe 大会在旧金山召开。同时...

39780
来自专栏IT派

干货 | PyTorch相比TensorFlow,存在哪些自身优势?

1、 PyTorch 课替代NumPy 使用:PyTorch 本身主要构件是张量——和 NumPy 看起来差不多。使得 PyTorch 可支持大量相同的 API...

2K40
来自专栏IT派

Python机器学习入门到进阶

导语:Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源。你现在也在考虑从 Python 入门机器学习吗?本教程或许能帮你成功上手,...

51430
来自专栏数说工作室

跟你说个事儿

大家好! 数说君最近在做一个生物大数据的项目汇报,忙成狗了。 因此这段时间更新比较少, 预计下周恢复。 将继续为大家带来: SAS正则表达式、python、我自...

36270
来自专栏IT派

从零开始:手把手教你安装深度学习操作系统、驱动和各种python库!

为了研究强化学习,最近购置了一台基于 Ubuntu 和英伟达 GPU 的深度学习机器。尽管目前在网络中能找到一些环境部署指南,但目前仍然没有全面的安装说明。另外...

52880
来自专栏IT派

【源码】Python的开源人脸识别库:离线识别率高达99.38%

如果你觉得好的话,不妨分享到朋友圈。 以往的人脸识别主要是包括人脸图像采集、人脸识别预处理、身份确认、身份查找等技术和系统。现在人脸识别已经慢慢延伸到了ADAS...

1K60
来自专栏IT派

推荐|2017年最受数据科学欢迎的Top15个Python库!

如果你觉得好的话,不妨分享到朋友圈。 近几年Python已成为数据科学行业中大火的编程语言,我们将根据以往的经验来为大家总结一下数据科学家和工程师几个最实用的...

36240
来自专栏IT派

基于OpenCV的摄像头圆心计算

导语:这几天,小编学习到了一个好玩的摄像头图像圆心计算的程序代码。另外,小编Tom邀请你一起搞事情! 在这份程序代码中,小编在Python3下运行,使用到...

40950
来自专栏IT派

机器学习实战之Python3实现决策树算法

导语:今天这篇文章也是我们的志愿编辑写出来的文章哦,稳重介绍了如何在python3中实现自己的决策树算法并画出来!另外,小编Tom邀请你一起搞事情! 预备知识:...

59250
来自专栏IT派

Python做机器学习之路

导语:Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源。你现在也在考虑从 Python 入门机器学习吗?本教程或许能帮你成功上手,...

62870

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励