多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

Selenium+Python-Unittest多线程执行用例-自动化测试

更新时间:2022-03-31 09:47:36 作者:多测师 浏览:67

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

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

  项目结构

Selenium+Python-Unittest多线程执行用例-自动化测试

  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的报告,接下来遇到的难点就是合并报告了。

  以上内容为大家介绍了自动化测试中的Selenium+Python-Unittest多线程执行用例,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部