selenium grid 多进程 (同步,异步) 启动多个 appium

发布时间:2023-12-26 00:17:17

目录

前言:

介绍

使用

源代码分析

运行情况


前言:

在使用 Selenium Grid 进行自动化测试时,可以使用多进程的方式启动多个 Appium 实例,从而实现同时测试多个应用程序。

介绍

  • python 基于 unittest 参数化
  • 多进程 (同步,异步) 启动多个 appium 的解决方案

使用

基于上篇帖子,唯一不同的地方是命名运行方式,请加上 bp 参数

node D:\\app\Appium\\node_modules\\appium\\bin\\appium.js  -p 4723 -bp 4733  -U DU2TAN15AJ049163 --nodeconfig D:\app\appium_study\testRunner\test.json

源代码分析

  • 基类 testBase unittest 参数化
    • 注意 param 参数,就是常用的 webdriver 的设置参数
from appium import webdriver
import unittest
import os
PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p)
)
class ParametrizedTestCase(unittest.TestCase):
    def __init__(self, methodName='runTest', param=None):
        super(ParametrizedTestCase, self).__init__(methodName)
        self.param = param[0]
    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = "ANDROID"
        desired_caps['platformVersion'] = self.param["platformVersion"]
        desired_caps['deviceName'] = self.param["deviceName"]
        desired_caps['udid'] = self.param["deviceName"]
        desired_caps['appPackage'] = "cn.ibona.t1_beta"
        desired_caps['appActivity'] = "cn.ibona.t1.main.ui.activity.SplashActivity"
        remote = "http://192.168.1.218:" + "4444" + "/wd/hub" # 这里填 hub的地址
        # desired_caps['app'] = PATH('../img/t.apk')
        print(self.param["deviceName"])
        # time.sleep(5)
        desired_caps["unicodeKeyboard"] = "True"
        desired_caps["resetKeyboard"] = "True"
        self.driver = webdriver.Remote(remote, desired_caps)
    def tearDown(self):
        self.driver.close_app()
        self.driver.quit()
    @staticmethod
    def parametrize(testcase_klass, param=None):
        """ Create a suite containing all tests taken from the given
            subclass, passing them the parameter 'param'.
        """
        testloader = unittest.TestLoader()
        testnames = testloader.getTestCaseNames(testcase_klass)
        suite = unittest.TestSuite()
        for name in testnames:
            suite.addTest(testcase_klass(name, param=param))
        return suite
  • 看看实际用例
from testRunner.testBase import ParametrizedTestCase as pt
import time
class testHome(pt):
    def test_home(self):
        time.sleep(5)
        self.driver.find_element_by_id("cn.ibona.t1_beta:id/passwordEditText").send_keys("111111")
        time.sleep(5)
        self.driver.find_element_by_id("cn.ibona.t1_beta:id/phoneNumberEditText").send_keys("136111111")
  • 看看代码入口
import sys
sys.path.append("..")
import unittest
from multiprocessing import Pool
from testRunner.testBase import ParametrizedTestCase
from testRunner.test3 import testHome

t = [[{'deviceName': 'DU2TAN15AJ049163', 'platformVersion': '4.4.2'}],
     [{'deviceName': 'MSM8926', 'platformVersion': '4.3'}]]
def f():
  pool = Pool(2)
  # for i in range(2):
  #     pool.apply_async(sample_request, args=(t[i],)) # 异步
  pool.map(sample_request, t) # 并行
  pool.close()
  pool.join()

def sample_request(devices):
    suite = unittest.TestSuite()
    suite.addTest(ParametrizedTestCase.parametrize(testHome, param=devices))
    # suite.addTest(ParametrizedTestCase.parametrize(testHome, param=devices)
    # suite.addTest(TestInterfaceCase.parametrize(testContact))
    unittest.TextTestRunner(verbosity=2).run(suite)
if __name__ == '__main__':
    f()

运行情况

??作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N6B9http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MlSJV6ISUuVb2x_i-6ay4HRSdy3u_2cd&authKey=6d2k0Iz2MZDejl8f1hdTEkt94KvLoEXQmeNoC0MC00%2BRhq2Yfmy27T0Hslhzenuz&noverify=0&group_code=574737577?

?

文章来源:https://blog.csdn.net/DJ355/article/details/132170936
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。