自动化测试框架解析2-----关于python的多线程问题

在阅读代码的时候,碰到了python中多线程的问题。在这里做一个记录

mport time 
import threading
def movie(func):
	for i in range(2):
		print "I am watching movie <%s>, time:%s"%(func,time.ctime())
		time.sleep(5)

def music(func):
	for i in range(2):
		print "I am listennig music <%s>, time:%s "%(func,time.ctime())
		time.sleep(3)

threads=[]
t1=threading.Thread(target=movie,args=("Movie funny",))
t2=threading.Thread(target=music,args=("Music funny",))
threads.append(t1)
threads.append(t2)

if __name__ == ‘__main__‘:
	for i in threads:
		i.start()
	for i in threads:
		i.join()
	print "I am done, enjoy it."

输出:

I am watching movie <Movie funny>, time:Mon Jan 04 11:19:38 2016
I am listennig music <Music funny>, time:Mon Jan 04 11:19:38 2016 
I am listennig music <Music funny>, time:Mon Jan 04 11:19:41 2016 
I am watching movie <Movie funny>, time:Mon Jan 04 11:19:43 2016
I am done, enjoy it.
[Finished in 10.2s]

注意时间!以上代码属于函数式多线程。movie和music是同时运行的。然后一个经过了5秒,一个经过了3秒后结束。说明5秒的函数在运行的时候,3秒的函数也在运行。体现了我们写的代码没有错误。这是一个最简单的多线程案例。

使用对象包装多线程:

#!/usr/bin/env python
#-*-coding:utf-8-*-
import time 
import threading
class ThreadTest(threading.Thread):
	def __init__(self,name,pause):
		threading.Thread.__init__(self)
		self.name=name
		self.pause=pause
		self.thread_stop=False
	def run(self):
		while not self.thread_stop:
			print "I am doing %s time : %s"%(self.name,time.ctime())
			time.sleep(self.pause)
	def stop(self):
		self.thread_stop=True

def test():
	t1=ThreadTest("movie",5)
	t2=ThreadTest("music",2)
	t1.start()
	t2.start()
	time.sleep(10)
	t1.stop()
	t2.stop()
if __name__ == ‘__main__‘:
	test()
	print "main done."

这个是使用类来封装多线程。类继承threading。包含初始化,运行,停止三个方法。如果没有停止的话就一直运行多线程里面定义的方法。我们可以看一下输出。证明一下我们的多线程是有效的

I am doing movie time : Mon Jan 04 13:55:33 2016
I am doing music time : Mon Jan 04 13:55:33 2016
I am doing music time : Mon Jan 04 13:55:35 2016
I am doing music time : Mon Jan 04 13:55:37 2016
I am doing movie time : Mon Jan 04 13:55:38 2016
I am doing music time : Mon Jan 04 13:55:39 2016
I am doing music time : Mon Jan 04 13:55:41 2016
I am doing movie time : Mon Jan 04 13:55:43 2016
main done.

一共运行了十秒,才停止。一个运行需要5秒,一个运行需要2秒。是多线程在运行的。

多线程还涉及到了锁,同步等

import random
import threading
#producer
class producer(threading.Thread):
	def __init__(self,t_name):
		threading.Thread.__init__(self,name=t_name)
	def run(self):
		global x
		con.acquire()
		if x>0:
			con.wait()
		else:
			for i in range(5):
				x+=1
				print "producing..."+str(x)
			con.notify()
		print x
		con.release()
class consumer(threading.Thread):
	def __init__(self,t_name):
		threading.Thread.__init__(self,name=t_name)
	def run(self):
		global x
		con.acquire()
		if x==0:
			print "consumer waitting"
			con.wait()
		else:
			for i in range(5):
				x-=1
				print str(x)+" ----\t consuming....%s"%(time.ctime(),)
			con.notify()
			print x
		con.release()

con=threading.Condition()
x=0
print "start consumer.."
c=consumer("consumer")
print "start producing.."
p=producer("producer")
p.start()
c.start()
p.join()
c.join()
print "main done"

输出:

start consumer..
start producing..
producing...1
producing...2
producing...3
producing...4
producing...5
5
4 ----	 consuming....Mon Jan 04 15:12:39 2016
3 ----	 consuming....Mon Jan 04 15:12:39 2016
2 ----	 consuming....Mon Jan 04 15:12:39 2016
1 ----	 consuming....Mon Jan 04 15:12:39 2016
0 ----	 consuming....Mon Jan 04 15:12:39 2016
0
main done
[Finished in 0.3s]

这个同步的线程还没有实际应用到。理解不是很深。

时间: 2024-12-30 03:23:48

自动化测试框架解析2-----关于python的多线程问题的相关文章

Python3+Selenium2完整的自动化测试实现之旅(五):自动化测试框架、Python面向对象以及POM设计模型简介

前言 之前的系列博客,陆续学习整理了自动化测试环境的搭建.IE和Chrome浏览器驱动的配置.selenium-webdriver模块封装的元素定位以及控制浏览器.处理警示框.鼠标键盘等方法的使用,这些内容还需要后续多加练习掌握,以达到灵活运用的程度.but,这仅仅只是开始,说明咱们能够使用selenium框架下的webdriver写出一个个测试用例脚本,也仅仅写给自己看看,如果需要写100条.1000条测试脚本,并能够高效快速的编写完成并批量执行,且要看到完整的执行结果,失败多少,成功多少,等

小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(上)

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装 小白学 Python 爬虫(7):HTTP 基础 小白学 Python 爬虫(8):网页基

一步一步教你搭建自动化测试框架——python篇

这两天用python写了一个自动化测试框架,取名为Auty.准备用来做Web方面的接口测试,以下为Auty框架一步一步的搭建过程—— Auty自动化测试框架第一篇——生成执行列表 Auty自动化测试框架第二篇——读取与执行脚本列表 Auty自动化测试框架第三篇——添加异常处理与日志收集 Auty自动化测试框架第四篇——生成测试结果报告 Auty自动化测试框架第五篇——自动化安装库与配置说明

Selenium + Python 自动化测试框架搭建

这段时间在自学Python,主要是想接触自动化测试,在一番摸索下,觉得用selenium+python的自动化测试框架来开展自动化测试,第一步自然是要先搭建好环境.在网上搜了不少帖子,加上自己的摸索,做了一些记录,希望能够帮助到需要的小伙伴.具体步骤如下: Step1.安装python3.6.1 官网网址为https://www.python.org/downloads/windows/ (我不喜欢把软件装在C盘,影响内存,所以选择安装在D盘) 安装的时候选择的是自定义安装,勾选一下加入环境变量

使用jenkins + python + selenium一步步搭建web自动化测试“框架”(1) - 各部件简介

原先搭建过一个自动化测试框架,迷迷糊糊不求甚解,算是搭建了一个仅限于能用的.根本算不上框架的玩意儿. 现在回过头来好好看看究竟每一步是怎么联系起来的,是怎么运行起来的. 本次博客先说说各部件都是干什么的. 各部件简介: jenkins: 提到jenkins就不能不提持续集成.jenkins是一个持续集成方面很好很成熟的开源软件,jenkins本身又是一个java的开源项目,提供了很多功能丰富的插件. 那到底持续集成是个什么东西?整这么多专业名词一点都不接地气.说说我的白话理解: 先看看持续和集成

基于python的接口自动化测试框架

公司内部的软件采用B/S架构,大部分是数据的增删改查,由于还在开发阶段,所以UI界面的变化非常快,难以针对UI进行自动化测试,那样会消耗大量的精力与时间维护自动化脚本.针对此种情况,针对接口测试较为有效. 工具选择 针对接口测试的工具也很多,例如soup UI, robot framework ,甚至jmeter这样的性能测试工具也可以进行接口测试. robot framework测试框架有很多的第三方库可以使用,采用的是填表的方式进行,较容易上手,但是无法深入底层的了解客户端与服务器的交互过程

Python 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

目录 1.      写在前面 2.      开发环境 3.      大致流程 4.      框架简介 5.      运行结果展示 6.      文件与配置 7.      测试接口实例 n      1.登陆接口 n      2.支付密码更改接口 8.      数据库设计 9.      测试用例.测试数据准备 10.        模块与类.函数设计 11.        代码实现 a)         class congfighttp.ConfigHttp b)      

Python+Selenium搭建UI自动化测试框架

Python语言是非常强大的编程语言,很多时候也拿来当脚本语言用. Selenium是web应用测试工具,支持Java.Python等多种语言脚本,支持Chrome.Firefox等多种主流浏览器.主要实现的就是模拟人使用web应用,自动的打开浏览器.打开应用.进入应用进行各种模拟业务操作等等. 接下来,一步一步带领大家实现下Python+Selenium实现使用脚本自动发微博的功能. 1.Python安装 一般Linux系统自带了Python,Windows系统可以参考本人之前文章 [Pyth