app自动化测试python

时间:2021-03-26 18:36:24
 1 #/usr/bin/python
 2 #encoding:utf-8
 3 import csv
 4 import os
 5 import time
 6 
 7 
 8 class App(object):
 9     def __init__(self):
10         self.content = ""
11         self.startTime = 0
12 
13     #启动App
14     def LaunchApp(self):
15         cmd = 'adb shell am start -W -n com.android.browser/.BrowserActivity'
16         self.content=os.popen(cmd)
17 
18     #停止App
19     def StopApp(self):
20         #cmd = 'adb shell am force-stop com.android.browser'
21         cmd = 'adb shell input keyevent 3'
22         os.popen(cmd)
23 
24     #获取启动时间
25     def GetLaunchedTime(self):
26         for line in self.content.readlines():
27             if "ThisTime" in line:
28                 self.startTime = line.split(":")[1]
29                 break
30         return self.startTime
31 
32 #控制类
33 class Controller(object):
34     def __init__(self, count):
35         self.app = App()
36         self.counter = count
37         self.alldata = [("timestamp", "elapsedtime")]
38 
39     #单次测试过程
40     def testprocess(self):
41         self.app.LaunchApp()
42         time.sleep(5)
43         elpasedtime = self.app.GetLaunchedTime()
44         self.app.StopApp()
45         time.sleep(3)
46         currenttime = self.getCurrentTime()
47         self.alldata.append((currenttime, elpasedtime))
48 
49     #多次执行测试过程
50     def run(self):
51         while self.counter >0:
52             self.testprocess()
53             self.counter = self.counter - 1
54 
55     #获取当前的时间戳
56     def getCurrentTime(self):
57         currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
58         return currentTime
59 
60     #数据的存储
61     def SaveDataToCSV(self):
62         csvfile = file('startTime2.csv', 'wb')
63         writer = csv.writer(csvfile)
64         writer.writerows(self.alldata)
65         csvfile.close()
66 
67 if __name__ == "__main__":
68     controller = Controller(10)
69     controller.run()
70     controller.SaveDataToCSV()

 

 

 1 #/usr/bin/python
 2 #encoding:utf-8
 3 import csv
 4 import os
 5 import  time
 6 
 7 #控制类
 8 class Controller(object):
 9     def __init__(self):
10         #定义收集数据的数组
11         self.alldata = [("id", "vss", "rss")]
12 
13     #分析数据
14     def analyzedata(self):
15         content = self.readfile()
16         i = 0
17         for line in content:
18             if "com.android.browser" in line:
19                 print line
20                 line = "#".join(line.split())
21                 vss = line.split("#")[5].strip("K")
22                 rss = line.split("#")[6].strip("K")
23 
24                 #将获取到的数据存到数组中
25                 self.alldata.append((i, vss, rss))
26                 i = i + 1
27 
28     #数据的存储
29     def SaveDataToCSV(self):
30         csvfile = file('meminfo.csv', 'wb')
31         writer = csv.writer(csvfile)
32         writer.writerows(self.alldata)
33         csvfile.close()
34 
35     #读取数据文件
36     def readfile(self):
37         mfile = file("meminfo", "r")
38         content = mfile.readlines()
39         mfile.close()
40         return  content
41 
42 if __name__ == "__main__":
43     controller = Controller()
44     controller.analyzedata()
45     controller.SaveDataToCSV()

 

 

 1 #/usr/bin/python
 2 #encoding:utf-8
 3 import csv
 4 import os
 5 import time
 6 
 7 #控制类
 8 class Controller(object):
 9     def __init__(self, count):
10         #定义测试的次数
11         self.counter = count
12         #定义收集数据的数组
13         self.alldata = [("timestamp", "power")]
14 
15     #单次测试过程
16     def testprocess(self):
17         #执行获取电量的命令
18         result = os.popen("adb shell dumpsys battery")
19         #获取电量的level
20         for line in result:
21             if "level" in line:
22                 power = line.split(":")[1]
23 
24         #获取当前时间
25         currenttime = self.getCurrentTime()
26         #将获取到的数据存到数组中
27         self.alldata.append((currenttime, power))
28 
29     #多次测试过程控制
30     def run(self):
31         #设置手机进入非充电状态
32         os.popen("adb shell dumpsys battery set status 1")
33         while self.counter >0:
34             self.testprocess()
35             self.counter = self.counter - 1
36             #每5秒钟采集一次数据
37             time.sleep(5)
38 
39     #获取当前的时间戳
40     def getCurrentTime(self):
41         currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
42         return currentTime
43 
44     #数据的存储
45     def SaveDataToCSV(self):
46         csvfile = file('meminfo.csv', 'wb')
47         writer = csv.writer(csvfile)
48         writer.writerows(self.alldata)
49         csvfile.close()
50 
51 if __name__ == "__main__":
52     controller = Controller(5)
53     controller.run()
54     controller.SaveDataToCSV()

 

 

 1 #/usr/bin/python
 2 #encoding:utf-8
 3 import csv
 4 import os
 5 import string
 6 import time
 7 
 8 #控制类
 9 class Controller(object):
10     def __init__(self, count):
11         #定义测试的次数
12         self.counter = count
13         #定义收集数据的数组
14         self.alldata = [("timestamp", "traffic")]
15 
16     #单次测试过程
17     def testprocess(self):
18         #执行获取进程的命令
19         result = os.popen("adb shell ps | grep com.android.browser")
20         #获取进程ID
21         pid = result.readlines()[0].split(" ")[5]
22 
23         #获取进程ID使用的流量
24         traffic = os.popen("adb shell cat /proc/"+pid+"/net/dev")
25         for line in traffic:
26             if "eth0" in line:
27                 #将所有空行换成#
28                 line = "#".join(line.split())
29                 #按#号拆分,获取收到和发出的流量
30                 receive = line.split("#")[1]
31                 transmit = line.split("#")[9]
32             elif "eth1" in line:
33                 # 将所有空行换成#
34                 line =  "#".join(line.split())
35                 # 按#号拆分,获取收到和发出的流量
36                 receive2 = line.split("#")[1]
37                 transmit2 = line.split("#")[9]
38 
39         #计算所有流量的之和
40         alltraffic = string .atoi(receive) + string .atoi(transmit) + string .atoi(receive2) + string .atoi(transmit2)
41         #按KB计算流量值
42         alltraffic = alltraffic/1024
43         #获取当前时间
44         currenttime = self.getCurrentTime()
45         #将获取到的数据存到数组中
46         self.alldata.append((currenttime, alltraffic))
47 
48     #多次测试过程控制
49     def run(self):
50         while self.counter >0:
51             self.testprocess()
52             self.counter = self.counter - 1
53             #每5秒钟采集一次数据
54             time.sleep(5)
55 
56     #获取当前的时间戳
57     def getCurrentTime(self):
58         currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
59         return currentTime
60 
61     #数据的存储
62     def SaveDataToCSV(self):
63         csvfile = file('traffic.csv', 'wb')
64         writer = csv.writer(csvfile)
65         writer.writerows(self.alldata)
66         csvfile.close()
67 
68 if __name__ == "__main__":
69     controller = Controller(5)
70     controller.run()
71     controller.SaveDataToCSV()

 

 

 1 #/usr/bin/python
 2 #encoding:utf-8
 3 import csv
 4 import os
 5 import time
 6 
 7 #控制类
 8 class Controller(object):
 9     def __init__(self, count):
10         self.counter = count
11         self.alldata = [("timestamp", "cpustatus")]
12 
13     #单次测试过程
14     def testprocess(self):
15         result = os.popen("adb shell dumpsys cpuinfo | grep com.android.browser")
16         for line in result.readlines():
17             cpuvalue =  line.split("%")[0]
18 
19         currenttime = self.getCurrentTime()
20         self.alldata.append((currenttime, cpuvalue))
21 
22     #多次执行测试过程
23     def run(self):
24         while self.counter >0:
25             self.testprocess()
26             self.counter = self.counter - 1
27             time.sleep(3)
28 
29     #获取当前的时间戳
30     def getCurrentTime(self):
31         currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
32         return currentTime
33 
34     #数据的存储
35     def SaveDataToCSV(self):
36         csvfile = file('cpustatus.csv', 'wb')
37         writer = csv.writer(csvfile)
38         writer.writerows(self.alldata)
39         csvfile.close()
40 
41 if __name__ == "__main__":
42     controller = Controller(10)
43     controller.run()
44     controller.SaveDataToCSV()

 

adb logcat \ grep START

 

 

HybridScript:

 1 # urs/bin/python
 2 # encoding:utf-8
 3 import time
 4 from appium import webdriver
 5 import unittest
 6 
 7 class MyTestCase(unittest.TestCase):
 8     def setUp(self):
 9         # 定义初始化的属性信息
10         self.desired_caps = {}
11         self.desired_caps['platformName'] = 'Android'
12         self.desired_caps['platformVersion'] = '4.3'
13         self.desired_caps['deviceName'] = '192.168.56.101:5555'
14         self.desired_caps['appPackage'] = 'com.example.zhangjian.minibrowser2'
15         self.desired_caps['appActivity'] = '.myapplication.MainActivity'
16         self.desired_caps["unicodeKeyboard"] = "True"
17         self.desired_caps["resetKeyboard"] = "True"
18         self.desired_caps["automationName"] = "Selendroid"
19         self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)
20 
21     '''def testSearch(self):
22         #Locate 定位输入框
23         input = self.driver.find_element_by_id("url")
24         #Operate 操作
25         input.send_keys("http://wap.sogou.com")
26 
27         searchbutton = self.driver.find_element_by_id("searchbutton")
28         searchbutton.click()
29 
30         time.sleep(5)
31 
32         #Switch 切换当前的上下文
33         print self.driver.contexts
34         self.driver.switch_to.context('WEBVIEW_0')
35         print self.driver.current_context
36         time.sleep(5)
37 
38         #定位web输入框
39         webinput = self.driver.find_element_by_xpath('//*[@id="keyword"]')
40         webinput.click()
41         webinput.send_keys("mook")
42         websearchbutton = self.driver.find_element_by_xpath('//*[@id="searchform"]/div/div[1]/div[3]/input')
43         websearchbutton.click()
44         time.sleep(5)
45 
46         #检验查询结果
47         firstresult = self.driver.find_element_by_xpath('//*[@id="mainBody"]/div[2]/div[2]/a')
48         self.assertTrue(u"中国大学" in firstresult.text)'''
49 
50     def testFindElements(self):
51         # Locate 定位输入框
52         input = self.driver.find_element_by_id("url")
53         # Operate 操作
54         input.send_keys("http://wap.sogou.com")
55 
56         searchbutton = self.driver.find_element_by_id("searchbutton")
57         searchbutton.click()
58 
59         time.sleep(5)
60 
61         # Switch 切换当前的上下文
62         print self.driver.contexts
63         self.driver.switch_to.context('WEBVIEW_0')
64         print self.driver.current_context
65         time.sleep(5)
66 
67         #定位元素组
68         elements = self.driver.find_elements_by_xpath('//*[@id="page"]/div[2]/div[2]/div/table/tbody/tr/td')
69 
70         #输出所有元素的名称
71         for el in elements:
72             print el.text
73 
74     def tearDown(self):
75         self.driver.quit()
76 
77 if __name__ == '__main__':
78     unittest.main()

 

 

nativapp:

  1 # urs/bin/python
  2 # encoding:utf-8
  3 import time
  4 from appium import webdriver
  5 import unittest
  6 
  7 class MyTestCase(unittest.TestCase):
  8     #脚本初始化,获取操作实例
  9     def setUp(self):
 10         desired_caps = {}
 11         desired_caps['platformName'] = 'Android'
 12         desired_caps['platformVersion'] = '4.3'
 13         desired_caps['deviceName'] = '192.168.56.101:5555'
 14         #desired_caps['appPackage'] = 'com.android.calculator2'
 15         #desired_caps['appActivity'] = '.Calculator'
 16         #desired_caps['appPackage'] = 'com.android.customlocale2'
 17         #desired_caps['appActivity'] = '.CustomLocaleActivity'
 18         desired_caps['appPackage'] = 'com.example.zhangjian.minibrowser2'
 19         desired_caps['appActivity'] = '.myapplication.MainActivity'
 20         desired_caps["unicodeKeyboard"] = "True"
 21         desired_caps["resetKeyboard"] = "True"
 22         self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
 23 
 24     #释放实例,释放资源
 25     def tearDown(self):
 26         self.driver.quit()
 27 
 28     #测试的脚本, LOVE原则
 29     '''def testAdd(self):
 30         #Locate 定位一个元素
 31         number8 = self.driver.find_element_by_id("digit8")
 32         # Operate 操作一个元素
 33         number8.click()
 34         # Locate 定位一个元素
 35         addopertion = self.driver.find_element_by_id("plus")
 36         # Operate 操作一个元素
 37         addopertion.click()
 38         # Locate 定位一个元素
 39         number5 = self.driver.find_element_by_id("digit5")
 40         # Operate 操作一个元素
 41         number5.click()
 42         # Locate 定位一个元素
 43         equal = self.driver.find_element_by_id("equal")
 44         # Operate 操作一个元素
 45         equal.click()
 46 
 47         #Verify 验证操作的结果
 48         result = self.driver.find_element_by_class_name("android.widget.EditText")
 49         value = result.text
 50         self.assertEqual(u"13", value)
 51         #Exception 处理异常的情况'''
 52     def testOtherAPI(self):
 53         '''elements = self.driver.find_elements_by_id("digit8")
 54         elements[0].click()
 55         time.sleep(5)
 56         print(len(elements))'''
 57         time.sleep(3)
 58         #self.driver.press_keycode(8)
 59         #self.driver.press_keycode(7)
 60         input = self.driver.find_element_by_class_name("android.widget.EditText")
 61         input.send_keys("10")
 62 
 63         element = self.driver.find_element_by_accessibility_id(u"")
 64         element.click()
 65 
 66         self.driver.press_keycode(12)
 67 
 68         equal = self.driver.find_element_by_id("equal")
 69         equal.click()
 70         time.sleep(5)
 71 
 72     #其他更多APIs的使用实例
 73     def testMoreAPIs(self):
 74         #获取元素列表
 75         els = self.driver.find_elements_by_class_name('android.widget.CheckedTextView')
 76         #滚动API scroll 的用法
 77         #self.driver.scroll(els[10], els[1])
 78         #拖拽API drag_and_drop的用法
 79         #self.driver.drag_and_drop(els[10], els[3])
 80         #滑动API swipe的用法
 81         #self.driver.swipe(100, 750, 100, 100)
 82         #点击API tap的用法
 83         #self.driver.tap([(100, 750)])
 84 
 85         #快速滑动 API flick的用法
 86         #self.driver.flick(100, 750, 100, 100)
 87         #当前activity API current_Activity的用法
 88         #print self.driver.current_activity
 89         #将某一个App置于后台
 90         #self.driver.background_app(3)
 91         #等待指定activity显示 API wait_activity的用法
 92         #print self.driver.wait_activity(".CustomLocaleActivity", 3, 1)
 93 
 94         #判断app是否安装了
 95         #print self.driver.is_app_installed("com.example.zhangjian.minibrowser2")
 96         #删除app
 97         #self.driver.remove_app("com.example.zhangjian.minibrowser2")
 98         #安装app
 99         #self.driver.install_app("/Users/zhangjian/Downloads/app-debug.apk")
100         #启动app
101         #self.driver.launch_app()
102 
103         #关闭app
104         #self.driver.close_app()
105         #self.driver.launch_app()
106         #启动activity
107         self.driver.start_activity("com.example.zhangjian.minibrowser2",
108                                                ".myapplication.NewActivity")
109         time.sleep(3)
110         #截屏
111         self.driver.get_screenshot_as_file("test.png")
112         time.sleep(5)
113 
114 
115 if __name__ == '__main__':
116     suite = unittest.TestSuite()
117     suite.addTest(MyTestCase('testMoreAPIs'))
118     runner = unittest.TextTestRunner(verbosity=2)
119     runner.run(suite)