2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 自动化测试之:猴子测试Windows端GUI-Monkey实现

自动化测试之:猴子测试Windows端GUI-Monkey实现

时间:2020-02-01 19:57:57

相关推荐

自动化测试之:猴子测试Windows端GUI-Monkey实现

以windows计算机程序为例:

一、笨蛋猴子

首先,定义如下文件:

1、BasicMonkey.py 实现猴子测试的文件

2、recurrencelog.py 复现猴子测试的文件

展开脚本编写:

1、BasicMonkey.py

1)定义一些随机操作

2)将随机操作生成随机序列

按常见操作使用频率排序,或等分....

3)定义随机序列中随机操作的日志记录函数

4)主函数中调用随机序列函数,设置操作次数,记录日志

import os,time,randomimport threadingfrom pymouse import PyMousefrom pykeyboard import PyKeyboardclass BasicMonkey:def __init__ (self):self.keyboard = PyKeyboard()self.mouse = PyMouse()def move(self):'''随机移动'''x = random.randint(50,1350)y = random.randint(50,850)print("移动至(",x,y,")")self.mouse.move(x,y)self.writelog('move',x,y,"")return x,ydef click(self):'''随机点击'''x,y = self.move()print("点击(", x, y,")")self.mouse.click(x,y)self.writelog('click', x, y, "")def dclick(self):'''随机双击'''x, y = self.move()print("双击(", x, y,")")self.mouse.click(x,y,n = 2)self.writelog('dclick', x, y, "")def input(self):x,y = self.move()string_lsit = ["ww","123456","H中国人",">"]rand_index = random.randrange(0,len(string_lsit)-1)rand_string = string_lsit[rand_index]print("在(", x, y, ")输入字符串", rand_string)self.keyboard.type_string(rand_string)self.writelog('input', x, y, rand_string)# self.keyboard.type_string("12345")def key(self):x,y = self.move()key_dict = {'Enter':self.keyboard.enter_key,'Backspace':self.keyboard.backspace_key,'Tab':self.keyboard.tab_key,'Space':self.keyboard.space_key}key_list = ['Enter','Backspace','Tab','Space']rand_key = random.sample(key_list,1)[0]rand_value = key_dict[rand_key]# self.keyboard.press_key(self.keyboard.end_key)# self.keyboard.release_key(self.keyboard.end_key)self.keyboard.press_key(rand_value)self.keyboard.release_key(rand_value)print("在(",x,y,")按下",rand_key)self.writelog('key', x, y, rand_key)def starttest(self,loop):'''生成随机序列'''for i in range(1,loop+1):number = random.randint(1,100)print("随机序列:i=", i,";number=",number)if number <= 30:self.click()elif number <= 20:print("执行双击")elif number <= 70:self.key()else:self.input()time.sleep(2)def run_app(self,app):os.popen(app)time.sleep(5)threading.Thread(Target=self.check_app).start()def writelog(self,action,x,y,content):#在当前目录中闯进一个monkeylog目录并以时间戳命名now = time.strftime('%Y%m%d_%H.log')TIME = time.strftime('%Y%m%d_%H%M%S')log_path = r"F:\monkeying"+nowwith open(log_path,mode='a+',encoding='utf-8')as f:f.write(TIME+','+action+','+str(x)+','+str(y)+','+str(content)+'\n')# def check_app(self):#while True:# now = time.strftime("%Y%m%d_%H%M%S.png")# screen_path = os.path.abspath('.')+'/screenshoot/'+nowif __name__ == '__main__':monkey = BasicMonkey()os.popen("calc.exe")time.sleep(5)monkey.starttest(30)

2.生成的日志文件如下:

time,action,x,y,content1106_001316,move,1325,689,1106_001316,key,1325,689,Backspace1106_001318,move,885,506,1106_001318,input,885,506,ww1106_001320,move,553,469,1106_001320,click,553,469,1106_001322,move,365,773,1106_001322,key,365,773,Space1106_001324,move,993,267,1106_001324,key,993,267,Enter1106_001326,move,964,286,1106_001326,input,964,286,ww1106_001328,move,1081,723,1106_001328,click,1081,723,1106_001330,move,1267,630,1106_001330,input,1267,630,H中国人1106_001332,move,1136,747,1106_001332,key,1136,747,Enter1106_001334,move,1275,489,1106_001334,key,1275,489,Space1106_001336,move,1112,50,1106_001336,input,1112,50,1234561106_001338,move,346,761,1106_001338,click,346,761,1106_001340,move,775,683,1106_001340,click,775,683,1106_001342,move,1128,651,1106_001342,input,1128,651,ww1106_001344,move,748,457,1106_001344,click,748,457,1106_001346,move,102,717,1106_001346,input,102,717,ww1106_001348,move,177,694,1106_001348,key,177,694,Tab1106_001350,move,235,68,1106_001350,key,235,68,Tab1106_001352,move,172,622,1106_001352,click,172,622,1106_001354,move,584,672,1106_001354,click,584,672,1106_001356,move,499,311,1106_001356,key,499,311,Backspace1106_001358,move,451,367,1106_001358,key,451,367,Backspace1106_001400,move,168,300,1106_001400,key,168,300,Enter1106_001402,move,1311,714,1106_001402,key,1311,714,Space1106_001404,move,1097,56,1106_001404,input,1097,56,1234561106_001406,move,643,152,1106_001406,click,643,152,1106_001408,move,270,294,1106_001408,key,270,294,Tab1106_001410,move,418,430,1106_001410,input,418,430,1234561106_001412,move,1044,588,1106_001412,key,1044,588,Space1106_001414,move,1291,295,1106_001414,key,1291,295,Enter

3. 复现猴子测试

import os,time,randomimport threadingfrom pymouse import PyMousefrom pykeyboard import PyKeyboardclass MonkeyTest:def __init__ (self):self.keyboard = PyKeyboard()self.mouse = PyMouse()def readlog(self,filename):fp = filenamewith open(fp,mode='r',encoding='utf-8')as file:content_list = file.readlines()#读取整个文件,每一行为列表的一个索引值,该列表长度为txt文本行数,长度为ncoloumn_list = content_list[0].strip().split(',')#读取txt文件第一行,表头print("coloumn_list[0]值为:", coloumn_list[0])print("coloumn_list[1]值为:", coloumn_list[1])list = []#遍历所有行文本,i为索引for i in range(0,len(content_list)):dict = {}for j in range(1,len(coloumn_list)):dict[coloumn_list[j]] = content_list[i].strip().split(',')[j]list.append(dict)print("处理后的list:",'\n',list)return listdef recurrence(self,filename):list = self.readlog(filename)print("r函数的list:",list)for key in list:if key['action'] =='move':self.re_move(int(key['x']), int(key['y']))elif key['action'] == 'click':self.re_click(int(key['x']),int(key['y']))elif key['action'] == 'dclick':self.re_dclick(int(key['x']), int(key['y']))elif key['action'] == 'input':self.re_input(int(key['x']), int(key['y']),key['content'])elif key['action'] == 'key':self.re_key(int(key['x']), int(key['y']),key['content'])# elif a['action'] == :def re_move(self,x,y):'''重现移动'''print("移动至(",x,y,")")self.mouse.move(x,y)def re_click(self,x,y):'''重现单击'''print("点击(", x, y,")")self.mouse.click(x,y)time.sleep(1)def re_dclick(self,x,y):'''重现双击'''print("双击(", x, y,")")self.mouse.click(x,y,2)time.sleep(1)def re_input(self,x,y,content):'''重现输入文本'''print("在(", x, y, ")输入字符串", content)self.mouse.move(x, y)self.keyboard.type_string(content)time.sleep(1)def re_key(self,x,y,content):key_dict = {'Enter':self.keyboard.enter_key,'Backspace':self.keyboard.backspace_key,'Tab':self.keyboard.tab_key,'Space':self.keyboard.space_key}# self.keyboard.press_key(self.keyboard.end_key)# self.keyboard.release_key(self.keyboard.end_key)print("在(", x, y, ")按下", content)self.mouse.move(x,y)self.keyboard.press_key(key_dict[content])self.keyboard.release_key(key_dict[content])time.sleep(1)if __name__ == '__main__':monkey = MonkeyTest()# loadlogpath = str(input())# auto_Testrecord = monkey.readlog(r"F:\monkeying1105_21.log")os.popen("calc.exe")time.sleep(5)# loadlogpath = str(input())# auto_Testrecord = MonkeyTest().readlog(loadlogpath)# r"F:\monkeying1105_21.log"# print('auto_Testrecord:','\n',auto_Testrecord)monkey.recurrence(r"F:\monkeying1106_00.log")

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。