精华内容
下载资源
问答
  • Appium并发测试

    2020-01-27 00:04:42
    启动多个Appium服务 Appium常用参数 参数 默认值 含义 -u, --udid null 连接设备的唯一设备标识符 -a, --address 0.0.0.0 监听的ip地址 -p, --port 4723 监听的端口 ,...

    启动多个Appium服务

    Appium常用参数

    <
    参数 默认值 含义
    -u, --udid null 连接设备的唯一设备标识符
    -a, --address 0.0.0.0 监听的ip地址
    -p, --port 4723 监听的端口 ,(设置监听端口号时最好间隔一位设置,例如设置下一个端口号设置为4725)
    -bp, --bootstrap-port 4724 连接Android设备的端口号(Android-only)(设备端口号与监听端口号相隔一位)
    -g, --log null 将日志输出到指定文件
    –no-reset false session之间不重置应用状态
    –session-override false 允许session被覆盖(冲突的话)
    –app-activity null 打开Android应用时,启动的Activity(Android-only)的名字
    –app null 本地绝对路径或http URL所指向的一个安装包
    展开全文
  • appium并发测试

    千次阅读 2017-09-13 19:29:51
    Appium 是一个开源的,跨平台的自动化测试工具。 它支持模拟器(iOS,FirefoxOS,Android)和真机(iOS, Android, FirefoxOS)上的原生应用,混合应用和移动 web 应用。 appium 工作原理 appium Android ...

    appium 介绍

    Appium 是一个开源的,跨平台的自动化测试工具。 它支持模拟器(iOS,FirefoxOS,Android)和真机(iOS, Android, FirefoxOS)上的原生应用,混合应用和移动 web 应用。

    appium 工作原理

    appiumappium

    Android

    在Android端,appium基于WebDriver协议,利用Bootstrap.jar,最后通过调⽤用UiAutomator的命令,实现App的自动化测试。

    UiAutomator测试框架是Android SDK自带的App UI自动化测试Java库。

    另外由于UiAutomator对H5的支持有限,appium引入了chromedriver以及safaridriver等来实现基于H5的自动化。

    appium 在android端工作流

    1. client端也就是我们 test script是我们的webdriver测试脚本。

    2. 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium
      Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。

    3. appium server会把请求转发给中间件Bootstrap.jar ,它是用java写的,安装在手机上.
      Bootstrap监听4724端口并接收appium 的命令,最终通过调⽤用UiAutomator的命令来实现。

    4. 最后Bootstrap将执行的结果返回给appium server。

    5. appium server再将结果返回给 appium client。

      ios

      在IOS端,appium同样使⽤WebDriver的一套协议。

    与Android端测试框架不同的是,appium ios封装了apple的 Instruments框架,主要用了Instrument里的UI Automation(Apple的⾃自动化测试框架),然后在设备中注⼊入bootstrap.js进⾏行监听。

    appium 在ios端工作流

    1. client端 依然是 test script是我们的webdriver测试脚本。

    2. 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium
      Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。

    3. appium server调用instruments.js 启动⼀一个socket server,同时分出一个⼦子进程运⾏instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤于和外界进行交互

    4. 最后Bootstrap.js将执行的结果返回给appium server

    5. appium server再将结果返回给 appium client。

    所以我们可以看到android与ios区别在于appium 将请求转发到bootstrap.js或者bootstrap.jar.然后由bootstrap 驱动UIAutomation和UiAutomator去devices上完成具体的动作。

    appium 并发

    appium bingfaappium bingfa

    关于appium并发,我将之分为2类,第一类单机并发。第二类基于selenium grid 多节点并发测试,也可称之为云测。

    appium 单机并发

    Android并发测试
    Appium提供了在一台设备上启动多个Android会话的方案。

    appium -p 4492 -bp 2251 -U 32456

    启动多个Android会话的重要指令包括:

    指令 功能
    -pAppium的主要端口
    -U设备id
    -bpAppium bootstrap端口
    –chromedriver-portchromedriver端口(当使用了webviews或者chrome)
    –selendroid-portselendroid端口(当使用了selendroid)

    iOS并发测试

    不幸的是,IOS不能进行本地并发测试。跟Android不一样,IOS在同一时间只能启动一个版本的模拟器来运行多个测试。

    总结:
    单机并发目前只能在android实现,且必须启动n个appium server 对应不同devices,这里devices可以是真机或模拟器。但是必须保证端口后没有重复使用。
    接下来工作就是利用测试框架(testng,jasmine,rspec,cucumber等)将测试分发到不同appium server上。

    代码示例

    github

    代码解析:

    1. 首先让我们来看下代码中的AppiumParallelTest这个类,他们先判断操作系统,并获取操作系统上连接的devices。
      利用AndroidDeviceConfiguration.java 与 IOSDeviceConfiguration.java 中的getIOSUDID,getDevices方法分别获取真机与模拟器的id.

    2. 然后利用startAppiumServer方法启动appium server, 利用appiumServerForAndroid()或者appiumServerForIOS().

    3. aa

    appium grid 分布式并发

    1. start selenium grid sever

      1
      
      java -jar selenium-server-standalone-2.47.1.jar -port 4444 -role hub   -hub http://192.168.199.140:4444/grid/registe
      
    2. Registered appium server as the grid node

      1
      
      appium --nodeconfig appium_node_S3.json  -p 4823  -bp 3356 -U "192.168.99.104:5555" --chromedriver-port 4738
      
    3. Configure the test script,run the tests

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      @BeforeTest
          @Parameters({"deviceName"})
          public void setUp(String deviceName) throws Exception {
              capabilities.setCapability("deviceName",deviceName);
              capabilities.setCapability("platformVersion", "5.0");
              capabilities.setCapability("app", getApp("ContactManager.apk"));
      
              setUpAndroidDriver();
          }
      

    GRID NODE CONFIGURATION EXAMPLE JSON FILE

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    {
      "capabilities":
          [
            { "deviceName": "192.168.56.101:5555",
              "browserName": "<e.g._iPhone5_or_iPad4>",
              "version":"<version_of_iOS_e.g._7.1>",
              "maxInstances": 1,
              "platform":"<platform_e.g._MAC_or_ANDROID>"
            }
          ],
      "configuration":
      {
        "cleanUpCycle":2000,
        "timeout":30000,
        "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
        "url":"http://<host_name_appium_server_or_ip-address_appium_server>:<appium_port>/wd/hub",
        "host": <host_name_appium_server_or_ip-address_appium_server>,
        "port": <appium_port>,
        "maxSession": 1,
        "register": true,
        "registerCycle": 5000,
        "hubPort": <grid_port>,
        "hubHost": "<Grid_host_name_or_grid_ip-address>"
      }
    }
    


    https://qaseven.github.io/2016/05/05/appium/


    展开全文
  • appium 并发测试

    2016-12-07 11:52:00
    Android并发测试 Appium提供了在一台设备上启动多个Android会话的方案,而这个方案需要你输入不同的指令来启动多个Appium服务来实现。 启动多个Android会话的重要指令包括: -pAppium的主要端口 -U设备id -...

    Android并发测试

    Appium提供了在一台设备上启动多个Android会话的方案,而这个方案需要你输入不同的指令来启动多个Appium服务来实现。

    启动多个Android会话的重要指令包括:

    • -p Appium的主要端口
    • -U 设备id
    • -bp Appium bootstrap端口
    • --chromedriver-port chromedriver端口(当使用了webviews或者chrome)
    • --selendroid-port selendroid端口(当使用了selendroid)

     

    如果我们有两台设备,设备ID分别为43364和32456,我们应该用下面的命令启动来两个不同的Appium服务:

    node . -p 4492 -bp 2251 -U 32456

    node . -p 4491 -bp 2252 -U 43364

    只要你的Appium和Appium bootstrap端口介于0和65536即可,并且保证是两个不同的端口以便两个Appium服务不会监听相同的端口。确认你的-u参数绑定正确的设备ID。这可以让Appium知道连接哪台设备,所以参数一定要准确。

    如果你用了chromedriver或selendroid,不同的服务要设置不同的端口。

     

    IOS并发测试

    不幸的是,IOS不能进行本地并发测试。跟Android不一样,IOS在同一时间只能启动一个版本的模拟器来运行多个测试。 如果你想在IOS上进行并发测试,你需要用到Sauce。只需上传你的Appium测试脚本到Sauce,它就可以按照你的设置执行多个IOS或Android的并发测试。在Sauce上执行测试的

    转载于:https://www.cnblogs.com/testway/p/6140594.html

    展开全文
  • Appium并发测试 Capability必须要加上systemPort systemPort用于连接appium-uiautomator2-server默认值是8200,并行测试时,必须调整端口以避免冲突。 ...

    Appium并发测试

    参考官方文档解释:

    Appium 给用户提供了在一个机器上启动多个 Android sessions 的方案。该方案只需要通过不同参数来启动的多个 Appium 服务。

    以下是启动多个 Android 会话的一些重要参数:

    • -p Appium 主要端口
    • -U 设备 id
    • -bp Appium bootstrap 端口
    • --chromedriver-port chromedriver 端口 (若是在使用 webviews 或 chrome)
    • --selendroid-port selendroid 端口 (若是在使用 selendroid)

    更多相关参数的信息可以参考 这里 。

    如果我们有两台设备,且他们的设备 id 分别为 43364 和 32456,我们可以通过以下命令启动两个不同的 Appium 服务器:

    node . -p 4492 -bp 2251 -U 32456

    node . -p 4491 -bp 2252 -U 43364

    只要你的 Appium 与 Appium bootstrap 的端口在 0 到 65536 之间,且端口号并不相同,这样两个 Appium 服务器就不会去监听同一个端口。确保通过 -u 参数标志的 id 与对应的设备 id 是一致的。这就是 Appium 能知道设备之间是如何通信的原因,因此必须保证参数准确无误。

    如果你使用 chromedriver 或 selendroid,记得确保服务器的端口号是独一无二的。

    如果你使用 appium-uiautomator2-driver, 需要给 systemPort 这个 capability 配置为不同的系统端口。因为有时候如果没有使用不同的端口,会出现冲突,比如这个问题.

     

    所以Capability必须要加上systemPort

     

    systemPort 用于连接appium-uiautomator2-server默认值是8200,并行测试时,必须调整端口以避免冲突。

    https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/parallel-tests.md#parallel-android-tests

     

     

    Parallel Android Tests

    Appium provides a way for users to automate multiple Android sessions on a single machine on single server instance. All it involves is starting Appium server on any available port.

    The important capabilities:

    • udid the device id
    • chromeDriverPort the chromedriver port (if using webviews or chrome)
    • systemPort If you are using appium-uiautomator2-driver, set a different system port for each android session, set with systemPort capability since sometimes there can be a port conflict if different ports aren't used, such as in this issue.

    代码:

    #encoding:utf8
    from utils.YamlUtil import YamlReader
    from conf import Conf
    from appium import webdriver
    
    #1、通过yaml来读取caps.yml
    reader = YamlReader(Conf.conf_caps)
    data = reader.data()
    #2、结果,字典转换
    
    def appium_desired_caps(host,port,systemPort="8200"):
        #2、desired创建字典
        desired_caps=dict()
        #3、platformName
        desired_caps['platformName'] = data['platformName']
        #4、platformVersion
        desired_caps['platfromVersion']=data['platfromVersion']
        #5、deviceName
        desired_caps['deviceName'] = data['deviceName']
    
        #6、启动程序的包名appPackage
        desired_caps["appPackage"] = data['appPackage']
    
        #7、启动界面名appActivity
        desired_caps['appActivity'] = data['appActivity']
    
        #解决中文
        desired_caps["unicodeKeyboard"] = data['unicodeKeyboard']
        desired_caps["resetKeyboard"] = data['resetKeyboard']
    
        #获取toast automationName = uiautomator2
        desired_caps["automationName"] = data['automationName']
    
        #不清除app里的原有数据
        desired_caps["noReset"] = data["noReset"]
    
        #解决并发测试
        desired_caps["systemPort"] = systemPort
    
        # 8、http,连接appium服务器
        driver = webdriver.Remote('http://%s:%s/wd/hub'%(host,port), desired_caps)
    
        driver.implicitly_wait(20)
    
        return driver
    caps.yml
    
    #platformName
    platformName: 'Android'
    #platformVersion
    platfromVersion: '8.0'
    #deviceName
    deviceName: 'Google'
    
    #启动程序的包名appPackage
    appPackage: 'com.boxuegu'
    
    #启动界面名appActivity
    appActivity: 'com.boxuegu.activity.MainFlutterActivity'
    
    #解决中文
    unicodeKeyboard: True
    resetKeyboard:  True
    
    #启动app时不要清除app里的原有的数据
    noReset: True
    
    #获取toast automationName = uiautomator2
    automationName: 'uiautomator2'
    

    启动脚本

    import concurrent.futures
    import pytest
    from base.Allure_Report import allure_generate
    from conf import Conf
    import os
    
    # 1.方法实现
    def run_pytest(device):
        report_path = Conf.report_path + os.sep + "result"+os.sep+device["name"]
        report_html = Conf.report_path + os.sep + "html" +os.sep+device["name"]
        pytest.main([f"--cmdopt={device}","--alluredir",report_path])
        # time.sleep(2)
        allure_generate(report_path, report_html)
    
    # 3.pool并发
    def run_pool(devices):
        with concurrent.futures.ProcessPoolExecutor(len(devices)) as executor:
            executor.map(run_pytest,devices)
    
    if __name__ == '__main__':
        # 2.参数列表
        devices_list= list()
        device_1 = { "host":"127.0.0.1",
                   "port":"4723",
                   "bpport":"4724",
                   "udid":"192.168.56.104:5555",
                     "systemPort":8200,
                     "name": "华为mate9"}
    
        device_2 = { "host":"127.0.0.1",
                   "port":"4725",
                   "bpport":"4726",
                   "udid":"192.168.56.105:5555",
                     "systemPort": 8201,
                     "name": "华为mate10"}
        devices_list.append(device_1)
        devices_list.append(device_2)
        run_pool(devices_list)

     

    展开全文
  • Appium并发测试3-同时启动多服务多设备 Appium并发测试(6)-同时在2个设备上启动APP Appium 并发多进程基于 Pytest框架 使用 Appium 进行多设备的集群分布式 UI 自动化测试 Android并发测试 Appium学习总结...
  • 前言: 在回归测试阶段,UI测试...不同设备在并发下的测试结果可以为我们提供: 1. 兼容性测试(不同的手机品牌,Android版本, 分辨率等) 2. 性能测试(通过安装Emmagee,监控不同手机在同脚本下,性能的变化)...
  • 前面第1和第2种只能依次启动appium server,第3种可以并发同时启动appium服务 Python多进程介绍 Python启动appium主要是应用subprocess模块实现的;python并发启动appium则主要是应用多进行m...
  • Appium常用命令参数:查看更多命令参数,则输入appium -h 参数 默认值 含义 -U,--udid Null 连接物理设备的唯一设备标识符 -a,--ad...
  • 利用多进程并发启动多个设备并启动应用(具体设计思路如并发启动多个appium服务)     完整脚本: from time import sleep import multiprocessing from multi_appium.multi_server_sync imp...
  • 手动执行cmd命令结束端口占用:taskkill –f –pid <appium server占用的PID> 手动在任务管理器上结束进程 使用python的os模块自动释放端口 实现目标: 释放被占用的端口 脚本实现逻辑: 导入os...
  • Appium Grid并发测试

    2019-08-05 16:55:00
    背景 Selenium玩的比较6的同学比较清楚:在Selenium中三大组件中有...Selenium只是针对于web平台的自动化,然而移动端平台的兼容性测试所涉及到机型众多,多设备并发测试需求更加迫切。而Appium Grid恰好就是基于S...
  • appium单机并发测试-入门

    千次阅读 2016-12-14 18:49:53
    参考文档:https://anikikun.gitbooks.io/appium-girls-tutorial/content/start_appium_server.html  https://qaseven.github.io/2016/05/05/appium/ 测试应用:android移动端...测试方向:基于界面的自动化测试
  • 最近有人在群里问并发的问题,我就把我的经验写下来供...连接 2 个设备测试的时候每次都只运行一个设备? Appium Android ——利用 TestNG 并行执行用例 并发时要启动多个服务,所以端口号要不同,可以通过GUI
  • 之前通过重写unittest的初始化方法加入设备参数进行并发,实现了基于unittest的appium多设备并发,但是考虑到unittest的框架实在过于简陋,也不方便后期的Jenkins的持续集成,所以想换一个框架来使用。 那么通过...
  • Appium Grid 并发测试

    2021-03-15 21:16:19
    Selenium玩的比较6的同学比较清楚:在Selenium中三大组件中有包含了Selenium Grid,而其作用就是分布式执行测试用例。
  • 2019独角兽企业重金招聘Python工程师标准>>> ...启动appium时指定appium的端口 1 appium -p 4492 -bp 2251 2 appium -p 4493 -bp 2252 转载于:https://my.oschina.net/u/873595/blog/374434
  • Appium并发测试 并发启动两台appium服务,再并发启动2台设备测试考研帮APP 2个appium服务,端口如下: Appium服务端口:4723 ,bp端口:4724 Appium服务端口:4725 ,bp端口:4726 2台设备: 127.0.0.1:62001 ...
  • 关于,这一套测试框架的并发问题:基于mac端,启动多台appium服务器会导致appium的运行出错。这是因为多个appium_server的临时文件存放在同一个地址的原因。这个问题的解决思路很简单。只要在每个appiui...
  • appium真机并发运行

    2020-01-06 19:23:01
    appium端口和设备是一对一的关系,如果多台设备,都要通过手动执行命令的方式启动,过于麻烦,故直接在程序中开启appium服务,动态分配appium端口 命令:appium -a 127.0.0.1 -p 4723 -U 设备ID 程序动态开启: ...
  • 前言这个功能已经写完很长时间了,一直没有发出来,今天先把代码发出来吧,有一些代码是参考网上写的,具体的代码说明今天暂时先不发了,代码解释的太详细还得我花点时间, 毕竟想让每个人都能看明白也...
  • 前言 这个功能已经写完很长时间了,一直没有发出来,今天先把...领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流 文件源码 1 """ 2 ------------------------
  • 我只是初步实现了这样一个多手机并发的需求,并没有写的很详细,比如,让项目更加的规范还需要引入PO设计模式,我这里没写这部分,其次base_page.py中还可以封装更多的方法,我也只封装了几个方法,如果真正的把这个...
  • APPIUM 多设备并发

    千次阅读 2019-06-14 17:10:20
    APPIUM 多设备并发 Appium环境搭建比较简单,资料也比较全,按步骤操作即可。 项目实际使用中启动单个appium服务,比较简单 ,但是只能控制单台设备。如果需要针对多台设备测试或者做一些其它想做的事情 >_<...
  • 最近在是用appium进行app的并发测试,并且Android已经实现在同一台PC机使用多个模拟器并发测试的功能 这里说一句模拟器使用的是逍遥安卓 好,然后就开始了坑人的ios并发。。。 1.ios 使用mac npm 安装的命令行版的...
  • 前言我们知道,单台 PC 上用 Appium 连接多个 Android 终端进行测试时,需要同时用不同的端口号启动不同的 Appium Server,例如启动两个服务器:node main.js -p 4723 -bp 4724 -chromedriver-port 9515 -U emulator...
  • 1. 前言Appium结合Pytest开展App自动化测试时,你知道如何实现用例并发执行吗?费话不多说,直接上代码,毕竟想让每个人都能看明白也不容易,所以先放代码,有兴趣的先自行研究。2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,350
精华内容 540
关键字:

appium并发测试