您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
Selenium with Python學(xué)習(xí)點(diǎn)滴
作者:-voyage- 發(fā)布時(shí)間:[ 2016/7/19 14:27:55 ] 推薦標(biāo)簽:功能測試 單元測試 線程

  1.查詢API的方法
  命令行輸入
  python -m pydoc -p 8090
  瀏覽器輸入127.0.0.1:8090能查看已安裝的package的API
  2.Frame內(nèi)的元素查找需要先切換到相關(guān)frame內(nèi)才能查找到
  switch_to_frame('frame_name'),返回默認(rèn)視圖為switch_to_default_content()
  3.查找元素的方法多樣,盡量選擇比較固定的方式,后期如果頁面有改動(dòng)不會影響元素的定位
  xpath是xml語言查找信息的語言.
  例如取百度搜索的第一條記錄的title的xpath,采用定位方式為
  /html/body/div[3]/div[4]/div/div[3]/div[1]/h3/a
  采用相對方式定位
  //div[@id='1']/h3/a
  或者是
  //div[@id='content_left']/div[1]/h3/a
  顯然采用的方式定位時(shí),如果頁面有一點(diǎn)改動(dòng),例如增加div嵌套后定位失效了.
  此外還有其它的定位方式:
  id,name,class name,link text,tag name,xpath,css selector
  4.多個(gè)測試用例的執(zhí)行方案:
  由于采用了HTMLTestRunner,一種方案是將所有的測試用例全部加入到一個(gè)Testsuit生成完整的測試報(bào)告.
  或者采用另一種方案,執(zhí)行py文件,每個(gè)文件生成一個(gè)報(bào)告,后再將多份報(bào)告進(jìn)行整合.(報(bào)告的整合部分另外說明)
  如果不采用多線程,第一種方案比較簡單,不用考慮測試報(bào)告的合并問題.(第一種方案另外說明)
  但是如果采用多線程,只能另一種方案了.多線程結(jié)合Selenium grid,這樣測試效率更高.
  如下代碼,5個(gè)線程,執(zhí)行py文件500次.
1 import threading,sys
2 from time import ctime,sleep
3 from subprocess import Popen,PIPE
4
5 lock=threading.Lock()
6 class MyThread(threading.Thread):
7     def __init__(self,filename,timeout):
8         threading.Thread.__init__(self)
9         self.filename=filename
10         self.timeout=timeout
11     def run(self):
12         p=Popen("python "+filename,shell=True,stdout=PIPE)
13         print p.stdout.readlines()
14         sleep(timeout)
15 if __name__=='__main__':
16     print 'main start time:%s' %ctime()
17     file=[]
18     for j in range(500):
19         file.append("E:\python\sub.py")
20     finishjob=0
21     while finishjob<len(file):
22         for i in range(5):
23             #此處加鎖是為了取列表的時(shí)候避免重復(fù)
24             lock.acquire()
25             filename=file[i+finishjob]
26             timeout=i+1+finishjob
27             lock.release()
28             my_thread=MyThread(filename,timeout)
29             my_thread.start()
30         my_thread.join()
31         finishjob+=5
32     print 'main end time:%s' %ctime()
  sub.py
1 #! /usr/bin/env python
2 #coding=utf-8
3 import sys,random,threading
4 from time import ctime,sleep
5 if __name__=='__main__':
6     thread=threading.current_thread()
7     print 'Start:%s' %(str(ctime())[14:19])
8     rtime=random.randint(5,30)
9     sleep(rtime)
10     print 'sleep:%s' %(str(rtime))
11     print 'End:%s' %(str(ctime())[14:19])
  執(zhí)行結(jié)果:
  main start time:Wed Jun 22 09:50:17 2016
  [[[[['Start:50:18 ''Start:50:17 ''Start:50:17 ''Start:50:18 ''Start:
  50:18 ', 'sleep:29 ', 'End:50:47 '], 'sleep:29 ', 'End:50:47 ']
  , 'sleep:8 ', 'End:50:26 ']
  , , 'sleep:26 ', 'End:50:44 ']'sleep:5 ', 'End:50:23 ']
  [[[[['Start:50:52 ''Start:50:52 ''Start:50:52 ''Start:50:52 ''Start:
  50:52 ', 'sleep:20 ', 'End:51:12 '], 'sleep:10 ', 'End:51:02 ']
  , 'sleep:14 ', 'End:51:06 '
  , 'sleep:9 ', 'End:51:01 '], 'sleep:22 ', 'End:51:14 ']
  ]
  .....

上一頁12下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd