在app自动化的过程中,可能会需要通过自动化来做一些手机的兼容性测试,但是需要同时在多个手机启动app
环境搭建
1、模拟器选择的是雷电模拟器多开器。
2、两台设备都安装淘宝
3、安装appium命令行
配置手机信息
需要把手机信息,就是通常我们启动手机的desired_caps配置信息。这里安静通过yaml的方式进行配置
- devices: emulator-5554
port: 4730
desired_caps:
platformName: Android
deviceName: emulator-5554
appPackage: com.taobao.taobao
noReset: !!bool True
appActivity: com.ali.user.mobile.login.ui.UserLoginActivity
- devices: emulator-5556
port: 4740
desired_caps:
platformName: Android
deviceName: emulator-5556
appPackage: com.taobao.taobao
noReset: !!bool True
appActivity: com.ali.user.mobile.login.ui.UserLoginActivity
automationName: uiautomator2
多线程启动appium
这里和前面写的多线程进行启动,其实类型的,只是单独的把启动appium封装起来,其中也包括了一些读取设备信息,以及获取设备的端口号和设备信息
# coding:utf-8
# coding:utf-8
import time
from common.dos_cmd import Dos_adb
from common.read_yaml import GetYaml
import os
from appium import webdriver
import threading
path =os.path.dirname(os.getcwd())
app = os.path.join(os.path.join(path,'config'),'app.yaml')
class Server():
def __init__(self):
self.adb = Dos_adb()
self.yaml = GetYaml(app)
def get_driver(self):
'''获取设备列表'''
devices_list = self.adb.get_device()
return devices_list
def get_dos(self):
'''命令行启动appium'''
result = self.yaml.get_data()
dos_list = []
android_list = []
for j in result:
port = j['port']
devices = j['desired_caps']['deviceName']
android_list.append(j['desired_caps'])
for i in range(1):
a = 'appium -p %s -U %s' %(port,devices)
dos_list.append(a)
return dos_list
def get_commad(self):
'''执行appium启动'''
self.dos_list = self.get_dos()
for i in self.dos_list:
self.adb.get_adb(i)
def get_android(self,devicesName):
'''获取port和设备信息'''
desired_caps = self.yaml.get_data()
for i in desired_caps:
if devicesName in i['devices']:
port = i['port']
desired_cap = i['desired_caps']
return (port,desired_cap)
def main(self):
'''多线程启动'''
thread_list = []
for i in range(2):
appium_server = threading.Thread(target=self.get_commad)
thread_list.append(appium_server)
for j in thread_list:
j.start()
time.sleep(5)
def android_start(self,deviceName):
'''启动webdriver'''
android = self.get_android(deviceName)
driver = webdriver.Remote('http://127.0.0.1:%s/wd/hub' % android[0], android[1])
return driver
if __name__ == '__main__':
xx = Server()
devices = xx.get_driver()
print(devices)
for i in devices:
xx.main()
time.sleep(5)
xx.android_start(i)
编写测试用例
用例还是用的以前的那个用例,然后直接进行通过设备的方式进行启动appium
# coding:utf-8
from pages.login_page import LoginPage
import time
import os
from common.aa import Server
path =os.path.dirname(os.getcwd())
# 获取到yaml文件路径
yaml_path = os.path.join(os.path.join(path,'config'),'element.yaml')
class BaseDriver:
def login(self,driver):
page =LoginPage(driver)
time.sleep(8)
# 获取用户名元素以及输入内容
use = page.get_username_element(yaml_path)
use.send_keys('1111')
# 获取密码元素以及输入内容
pas = page.get_password_element(yaml_path)
pas.send_keys('22222')
# 进行点击登录
button = page.get_login_button_element(yaml_path)
button.click()
if __name__ == '__main__':
x = BaseDriver()
server = Server()
server.main()
drivers = server.get_driver()
for i in drivers:
driver = server.android_start(i)
x.login(driver)
这里虽然用到了多线程,但是还是上一个用例结束,才会去执行下一台机器。
注:这里代码只上传了部分代码,完整代码可以去前面定位封装中进行查看。
点赞关注~~持续分享,加入我们,642830685,免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。