多线程执行测试用例二

计算密集型 vs. IO密集型

计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。对于计算密集型任务,最好用运行效率高的C语言编写。也可使用python多进程,充分利用多cpu。

涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。对于IO密集型任务,最好用脚本语言编写。可使用python多线程。

多线程执行测试用例
实例:
    import threading
    from time import sleep,ctime
    from selenium import webdriver
    #测试用例1
    def test_baidu(browser,search):
        print("开始,现在时间是%s"%ctime())
        print("浏览器是%s"%browser)
        if browser =="ff":
            driver = webdriver.Firefox()
        elif browser =="chrome":
            driver = webdriver.Chrome()
        elif browser =="ie":
            driver =webdriver.Ie()
        else:
            print("浏览器输入错误!")
     
        driver.get(r"http://www.baidu.com")
        driver.implicitly_wait(5)
        driver.find_element_by_xpath("//*[@id=‘kw‘]").send_keys(search)
        driver.find_element_by_id("su").click()
        sleep(2)
        driver.quit()
    if __name__ =="__main__":
        #定义字典存放test_baidu函数的参数
        dicts = {"ff": "python", "chrome": "selenium", "ie": "unittest"}
        #创建空列表存放线程
        threads =[]
        #遍历字典,并把线程append进threads
        for browser,search in dicts.items():
            t = threading.Thread(target=test_baidu,args=(browser,search))  #args参数是一个元组,作用是给test_baidu()传参
            threads.append(t)
        #把字典内容索引替代
        file = range(len(dicts))
        #启动线程
        for i in file:
            threads[i].start()
        #守护线程
        for i in file:
            threads[i].join()

测试结果:

由测试结果得到:多线程同时开始执行测试用例,大大缩小测试总时间。

多线程结合分布式执行测试用例
Selenium Girl 只是提供了多操作系统、多浏览器的执行环境,但不提供并行执行测试用例,Selenium Girl只能现在一个系统或浏览器上执行完测试用例外再从另一个操作系统或浏览器上执行测试用例。
启动Selenium server
在本机启动一个主hub和一个node节点:本机IP地址(192.168.0.101),节点端口4444/5555
java -jar selenium-server-standalone-2.48.0.jar -role hub
java -jar selenium-server-standalone-2.48.0.jar -role node -port 5555
启动一个远程node:p(192.168.0.102)在虚拟机里面:端口是6666
java -jar selenium-server-standalone-2.48.0.jar -role node -port 6666 -hub http://192.168.0.101:4444/gird/register
测试脚本:

‘‘‘
    在不同主机、不同浏览器同时执行测试用例,多线程;
    利用Selenium Girl提供分布式执行测试用例;
    先启动Selenium server,这里分别在本地主机启动一个hub和一个node,在其他主机(虚拟机)启动一个node。
    ‘‘‘
    from selenium.webdriver import Remote
    import threading
    from time import *
     
    #测试用例
    def test_baidu(host,browser):
        print("开始:%s"%ctime())
        print(host,browser)
        dc ={‘browserName‘:browser}
        driver = Remote(
                        command_executor=host,
                        desired_capabilities=dc
        )
        driver.get(r‘http://www.baidu.com‘)
        driver.implicitly_wait(10)
        driver.find_element_by_link_text("新闻").click()
        sleep(2)
        driver.get_screenshot_as_file(r‘D:\testscreen\baidu.jpg‘)
        driver.quit()
     
    if __name__ ==‘__main__‘:
        #启动参数,指定运行主机和浏览器
        lists={‘http://127.0.0.1:4444/wd/hub‘:‘chrome‘,
               ‘http://127.0.0.1:5555/wd/hub‘:‘internet explorer‘,
               ‘http://192.168.216.128:6666/wd/hub‘:‘firefox‘  #远程节点node
               }
        threads =[]
        files = range(len(lists))
        #创建线程,并append进线程组
        for host,browser in lists.items():
            t = threading.Thread(target=test_baidu,args=(host,browser))
            threads.append(t)
        #启动每一个线程
        for i in files:
            threads[i].start()
        #守护每一个线程
        for i in files:
            threads[i].join()

运行结果:

原文地址:https://www.cnblogs.com/xiaohuhu/p/10185350.html

时间: 2024-11-05 13:37:29

多线程执行测试用例二的相关文章

Selenium_多线程执行测试用例

多线程执行测试用例 这里以百度搜索为例,通过不同的浏览器来启动不同的线程. 1 #!/usr/bin/env python 2 # _*_ coding:utf-8 _*_ 3 __author__ = 'YinJia' 4 5 from threading import Thread 6 from selenium import webdriver 7 from time import ctime,sleep 8 9 #测试用例 10 def test_baidu(browser,search

Python 多线程执行测试用例并生成多个报告

为了满足之前的需求,同时运行多个测试用例. 1 #! /usr/bin/env python 2 #coding=utf-8 3 import threading 4 from multiprocessing import Queue 5 from time import ctime,sleep 6 from subprocess import Popen,PIPE 7 import os,time 8 lock=threading.Lock() 9 #单个测试用例生成的临时报告,当前目录下re

python之多线程执行和非线程执行的对比

一.非线程执行(普通的执行) 1.非线程运行,简单代码如下 #_*_coding:utf-8_*_ import time import threading a = [] b = [] def func1():     print "func1 start %s" % time.ctime()     alist = ["192.168.1.100","192.168.1.120","192.168.1.134","

Android多线程分析之二:Thread的实现

Android多线程分析之二:Thread 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前文<Android多线程分析之一:使用Thread异步下载图像>中演示了如何使用 Thread 处理异步事务.示例中这个 Java Thread 类都是位于 Framework 层的类,它自身是通过 JNI 转调 dalvik 里面的 Thread 相关方法实现的.因此要分析 Androd 中的线程,就需要分析这两层中的与线程相关的代码,这就是本文要

多线程开发之二 NSOperation

效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UITableViewController 4 @property (strong, nonatomic) NSArray *arrSampleName; 5 6 - (instancetype)initWithSampleNameArray:(NSArray *)arrSampleName; 7 8 @end  ViewContro

Java多线程基础(二)定时器类:Timer类和TimerTask类

Java多线程基础(二)定时器类:Timer类和TimerTask类 Timer类和TimerTask类是jdk实现定时器功能的早期方法,jdk1.5以前就支持Timer类和TimerTask类.JDK1.5之后引入了新的机制,将在后续博文中研究. 1 指定时间间隔后执行任务 import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TraditionalTimerTest {

最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程.以后各位只要着重如何编写测试用例即可,其他模板可以套用的,希望帮助到大家. 目录 一.编写测试用例 二.执行测试用例,查找最新测试用例,自动发送测试报告 三.定时执行测试用例 3.1方案一:Windows任务计划 3.2方案二:Jenkins持续集成 四.成果验收 环境准备: 操作系统:Windows7 集成开发环境:ec

进行概念详解 多线程上篇(二)

操作系统是程序与硬件交互的中间层,现代操作系统将程序的一次执行抽象为进程和线程的概念. 进程作为资源分配的基本单位,线程作为执行的基本单位. 进程和线程其实就是操作系统程序本身实现控制一个程序运行的数据项描述 所有的程序都是面向语言进行开发的,而语言本身是面向操作系统的,线程是操作系统对程序一次运行的抽象 所以,所有的多线程编程模型,必然遵从操作系统的大逻辑,必然是符合操作系统的对线程的抽象概念,操作系统在抽象之上提供了API供应用程序调用 简言之,应用程序的底层是借助于操作系统来完成多线程编程

SpringBoot多线程执行task任务

一.问题描述 Task定时任务默认都是使用单线程执行的,如果定时任务有很多的话,那么可能会导致很多任务无法按时准确执行,示例如下: import java.text.SimpleDateFormat; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import or