Failed to create virtualenv

Ubuntu 16.04 64位,跑VTS时报错,之后无法正常测试,重装python 环境也不行。

03-28 18:47:01 D/RunUtil: Running [virtualenv, /tmp/2dda8284800eb328b87b7161c94104e2-virtualenv1403893971550289422]
03-28 18:47:17 D/RunUtil: [virtualenv, /tmp/2dda8284800eb328b87b7161c94104e2-virtualenv1403893971550289422] command failed. return code 1
03-28 18:47:17 E/VtsPythonVirtualenvPreparer: Failed to create virtualenv with : /tmp/2dda8284800eb328b87b7161c94104e2-virtualenv1403893971550289422.
03-28 18:47:17 E/ModuleDef: TargetSetupError in preparer: com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer
03-28 18:47:17 E/TestInvocation: Unexpected exception when running invocation: java.lang.RuntimeException: com.android.tradefed.targetprep.TargetSetupError: Failed to create virtualenv
03-28 18:47:17 E/TestInvocation: com.android.tradefed.targetprep.TargetSetupError: Failed to create virtualenv
java.lang.RuntimeException: com.android.tradefed.targetprep.TargetSetupError: Failed to create virtualenv
at com.android.compatibility.common.tradefed.testtype.ModuleDef.runPreparerSetup(ModuleDef.java:354)
at com.android.compatibility.common.tradefed.testtype.ModuleDef.runPreparerSetups(ModuleDef.java:288)
at com.android.compatibility.common.tradefed.testtype.ModuleDef.run(ModuleDef.java:250)
at com.android.compatibility.common.tradefed.testtype.CompatibilityTest.run(CompatibilityTest.java:477)
at com.android.tradefed.invoker.TestInvocation.runTests(TestInvocation.java:796)
at com.android.tradefed.invoker.TestInvocation.prepareAndRun(TestInvocation.java:471)
at com.android.tradefed.invoker.TestInvocation.performInvocation(TestInvocation.java:322)
at com.android.tradefed.invoker.TestInvocation.invoke(TestInvocation.java:984)
at com.android.tradefed.command.CommandScheduler$InvocationThread.run(CommandScheduler.java:558)
Caused by: com.android.tradefed.targetprep.TargetSetupError: Failed to create virtualenv
at com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer.startVirtualenv(VtsPythonVirtualenvPreparer.java:281)
at com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer.setUp(VtsPythonVirtualenvPreparer.java:98)
at com.android.compatibility.common.tradefed.testtype.ModuleDef.runPreparerSetup(ModuleDef.java:344)
… 8 more

$pip -V

Traceback (most recent call last):
File “/usr/bin/pip”, line 9, in <module>
from pip import main
File “/usr/lib/python2.7/dist-packages/pip/__init__.py”, line 4, in <module>
import locale
File “/usr/lib/python2.7/locale.py”, line 13, in <module>
import encodings
ImportError: No module named encodings

no permissions (udev requires plugdev group membership)

在 ubuntu 64位機終端上輸入  adb devices

顯示如下的不愉快:

0123456789ABCDEF    no permissions (udev requires plugdev group membership); see [http://developer.android.com/tools/device.html]

這會導致無法測試 CTS 和 GTS。查找 android 官方資料,解決方法如下:

1. 終端 輸入命令: lsusb

  1. Bus 002 Device 003: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse  
  2. Bus 002 Device 002: ID 8087:8000 Intel Corp.  
  3. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
  4. Bus 001 Device 125: ID 0e8d:200a MediaTek Inc.  
  5. Bus 001 Device 002: ID 8087:8008 Intel Corp.  
  6. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
  7. Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
  8. Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  

找到手機對應的那一行,這裡是 

Bus 001 Device 125: ID 0e8d:200a MediaTek Inc.

2. 然後  

vim /etc/udev/rules.d/51-android.rules

添加以下這行到文件中:

  1. SUBSYSTEM==”usb”, ATTR{idVendor}==”0e8d”, MODE=”200a”, GROUP=”plugdev”  

3. 再執行

  1. chmod a+r /etc/udev/rules.d/51-android.rules  

4. 再執行以下命令

  1. adb kill-server  
  2.   
  3. adb devices   

就顯示如下的了:

List of devices attached
0123456789ABCDEF    device

Android8.x新增cts测试(VTS下测试GSI版本)

Android 8.0之后,由于平台架构的更改,GMS认证增加了新的测试项,包括VTS和针对GSI版本的CTS测试,本文主要介绍Android8.1针对GSI版本的CTS测试,VTS测试可参考Android VTS测试

测试环境配置

1、更换google的GSI
  • 设置中打开 OEM unlocking 选项
  • 设置中打开 USB debugging 选项
  • 长按音量 + 和电源键进入fastboot模式
  • 连接到电脑上,分别执行fastboot flashing unlockfastboot oem unlock
    执行命令后需要选择音量 + 来确认unlock。
  • 执行 fastboot 命令刷入google提供的 system.img (GSI):
    fastboot flash system system.img(需要根据软件版本的信息来选择GSI版本)
  • 重启: fastboot reboot
2、测试前准备
  • cts测试环境配置 : CTS测试配置
  • vts测试环境配置 :
    安装 Python 开发工具包:sudo apt-get install python-dev
    安装协议缓冲区工具(适用于 Python):sudo apt-get install python-protobuf protobuf-compiler
    安装 Python 虚拟环境相关工具:sudo apt-get install python-virtualenv python-pip
  • Media 媒体包:要求 CTS Media 1.4 及以上版本,在Android8.1的测试中,media文件要放在电脑中的/tmp/android-cts-media路径下,测试前不需要将Media文件拷贝到手机中,测试时会自动拷贝。如果/tmp/android-cts-media路径下没有media文件,将会从网上下载,由于文件比较大,比较耗时

运行针对GSI版本的CTS

  • 1、下载并解压vts测试工具包
  • 2、切换到android-vts的位置下:
    $ cd android-vts
  • 3、进入android-vts目录下,运行vts测试的控制台程序
    $ ./android-vts/tools/vts-tradefed
  • 4、运行 cts-on-gsi 测试
    > run cts-on-gsi​​

 

Android GMS认证-CTS/GTS/CTSV

 

GMS认证包括三个部分:CTS、GTS、CTS Verifier;Android8.0以后,增加了两个新的测试,分别是:

VTS 测试 和 cts-on-gsi

CTS是兼容性测试,CTS Verifier是对CTS的补充,主要是通过手动测试来完成。

GTS的全称是Google Mobile Services Test Suite

1、测试工具和测试环境

1)测试工具

      测试工具分为三个部分,CTS工具、GTS工具和CTS Verifier工具

      CTS和CTS Verifier的官方获取路径为:CTS工具下载地址

      GTS的工具要google或者google授权的实验室获取。

2)测试环境搭建

      电脑的配置要求(电脑为ubuntu14.04、以CTS7.0_R16和GTS5.1_R2为例):

      1、从cts-tradefed脚本中可以看出,运行前首先会检查java、aapt、adb是否可用

          对于cts来说java版本的要求是:1.6, 1.7 or 1.8 is required

      2、从gts-tradefed脚本中可以看出,运行前首先会检查java、adb是否可用

          对于gts来说java版本的要求是:1.8 is required

      3、 保证手机可以连接到测试的ubuntu电脑 

          可以通过’adb devices’来查看手机是否正确连接电脑     

      手机的配置要求

      1、确保wifi可访问google服务且稳定,设置VPN,确保IPV6可用。

      2、确保测试设备附近有可用的蓝牙设备。

      3、如果不是刚刷机或者恢复出厂设置的的手机,需要设置Settings > Backup & reset > Factory data reset

      4、语言要设置为英语,Settings > Language & input > Language

      5、要打开位置,Settings > Location > On

      6、Settings > Security > Screen lock > None

      7、Settings > Developer options > USB debugging

      8、Settings > Date & time > Use 24-hour format > Off

      9、Settings > Developer options > Stay Awake > On

    10、下载最新的CTS Media Files,拷贝到手机里面,可以单独拷贝某个分辨率的。

        chmod u+x copy_media.sh

      ./copy_media.sh

    11、保证手机IMEI号正确

2、测试命令以及结果查看

1)CTS测试

1、运行CTS脚本

      a、进入cts目录/android-cts/tools

      b、执行sudo ./cts-tradefed

      c、进入后可以执行help或者run cts –help-all查看帮助命令

2、执行CTS测试

      a、执行整个CTS的测试:

            run cts –plan CTS

            如果多台手机一起跑测,可使用下面命令:

          run cts –plan CTS –shards 2 -o -d –skip-system-status-check        com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker

            注:-o = –skip-preconditions ,-d =–skip-device-info, –skip-system-status-check com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker

则可以跳过网络连接检测,这样可以节省不少时间。

      b、CTS第一遍结束之后,会有很多没有执行的项,需要执行如下命令:

            run cts –retry session-id –retry-type NOT_EXECUTED

 
 

            假如第一次的session-id是0,则命令为

            run cts –retry 0 –retry-type NOT_EXECUTED

  c、继续未完成的cts测试

            执行l r 命令,锁定需要继续跑的session_id : run cts –retry session_id

 
 

            假如要重跑session-id为0的失败项,则执行:  run cts –retry 0

3、执行单独模块或者单独测试项

 
 

        a、测试单个模块

            run cts -m <模块名>

        b、测试单个测试项

            run cts -m <模块名> -t <test_name>

4、CTS测试报告及log

        1、测试报告

            路径:文件位于android-cts/results下面

            命名规则:以测试开始执行的日期和时间命名

            查看报告文件:test_result.xml(建议使用火狐浏览器打开)

        2、CTS log

            路径:文件位于android-cts/logs

            命名规则:以测试开始执行的日期和时间命名

2)GTS测试

1、GTS测试手机端配置

        GTS测试的配置和CTS基本上是一致的,但是不需要安装CTS media媒体包。

2、运行GTS脚本

        a、进入cts目录/android-gts/tools

        b、执行sudo ./gts-tradefed

        c、进入后可以执行help或者run gts –help-all查看帮助命令

3、执行GTS测试

        a、执行整个GTS的测试:

              run gts –plan GTS

        b、GTS第一遍结束之后,如没有执行的项,需要执行如下命令:

              run gts –retry session-id –retry-type NOT_EXECUTED

              假如第一次的session-id是0,则命令为:

              run gts –retry 0 –retry-type NOT_EXECUTED

        c、继续未完成的gts测试

            执行l r 命令,锁定需要继续跑的session_id:

            run gts –retry session_id

            假如要重跑session-id为0的失败项,则执行:

            run gts –retry 0

4、执行单独模块或者单独测试项

        a、测试单个模块 : run gts -m <模块名>

        b、测试单个测试项:run gts -m  <模块名> -t <test_name>

5、GTS测试报告及log

        1、测试报告

            路径:文件位于android-gts/results下面   

            命名规则:以测试开始执行的日期和时间命名

            查看报告文件:test_result.xml(建议使用火狐浏览器打开)

        2、GTS log

            路径:文件位于android-gts/logs

            命名规则:以测试开始执行的日期和时间命名

3)CTS Verifier测试相关

1、测试准备

        1、根目录下安装CtsVerifier.apk、NotificationBot.apk

            adb install -r CtsVerifier.apk         

            adb install -r  NotificationBot.apk

        2、设置里security-Device administrators开启cts verifier

        3、打开手机上的CTS Verifier应用,根据提示测试每一项

2、保存查看结果

        所有测试完成后,点击CTS Verifier测试工具右上角的保存按钮,会提示结果保存位置,连接电脑,将结果拷贝到电脑即可查看。

 

Android VTS测试

1、VTS简介

VTS的全称是 Vendor Test Suite(供应商测试套件)。

为何引入VTS测试?

目前Android的系统升级是很麻烦的,为了能更快的将设备升级到新的Android版本,Android O 开始新引入了 Project Treble,Project Treble 适用于搭载 Android O 及后续版本的所有新设备。

Android 7.x 及更早版本中没有正式的Vendor层接口,因此每次更新系统都相对耗时和困难:

 
treble_blog_before.png

Android O 之后,Treble 提供了稳定的Vendor层接口,供设备制造商访问 Android 代码中特定于硬件的部分,这样就可以只更新框架层,减少升级系统带来的成本和困难:

 
treble_blog_after.png

为了确保Vendor层实现的前向兼容性,新的Vendor层接口会由供应商测试套件 (VTS) 进行验证,该套件类似于兼容性测试套件 (CTS)

2、VTS测试流程

1)替换谷歌system.img

VTS测试要求刷入谷歌提供AOSP的system.img (GSI)。在user版本中,如果直接使用flash tool单独烧录GSI时,会导致无法开机。

之所以会出现这种问题,是由于在user/userdebug版本中,dm-verity是使能的,替换GSI后导致dm-verity不能通过。 如果要解决这个问题,就需要进行unlock操作,并且要用fastboot来刷入刷入谷歌提供的system.img .

具体操作如下:
    1. 在设置中打开 OEM unlocking 选项
    1. 在设置中打开 USB debugging 选项
    1. 长按音量 + 和电源键进入fastboot模式
    1. 连接到电脑上,分别执行fastboot flashing unlockfastboot oem unlock
      执行命令后需要选择音量 + 来确认unlock。
    1. 执行 fastboot 命令刷入google提供的 system.img (GSI):
      fastboot flash system system.img(需要根据软件版本的信息来选择GSI版本)
    1. 重启: fastboot reboot

2)VTS测试

Running VTS
主机端设置
  • 首先设置基本测试环境 GMS测试环境.
  • VTS测试环境配置:
    安装 Python 开发工具包:sudo apt-get install python-dev
    安装协议缓冲区工具(适用于 Python):sudo apt-get install python-protobuf protobuf-compiler
    安装 Python 虚拟环境相关工具:sudo apt-get install python-virtualenv python-pip
  • 下载并解压VTS测试工具
手机端设置
  • 擦除设备上的用户数据(即运行fastboot -w)。
  • 刷入谷歌提供的system.img (GSI),使用与设备的ABI相对应的GSI,是否支持A / B更新以及设备的security_patch_level:
    ABI A/B Non A/B security_patch_level
    Arm64 aosp_arm64_ab aosp_arm64_a Uses the format: [year][month][date]
    Arm32 aosp_arm_ab aosp_arm_a Uses the format: [year][month][date]
    x86_64 aosp_x86_64_ab aosp_x86_64_a Uses the format: [year][month][date]
    x86_32 aosp_x86_32_ab aosp_x86_32_a Uses the format: [year][month][date]
  • Android 8.x的设备不需要安装SIM卡,但是Android P及更高版本的设备将需要SIM卡进行VTS测试。
  • 确保手机可以连接到IPV6的wifi网络,如果设备具有GPS / Wi-Fi / Cellular功能,则必须重置设备并打开位置设置。
  • 通过usb将手机连接到电脑上,通过 adb shell 来保证可以正确的连接。
运行VTS测试
  • 打开终端命令行
  • 切换到android-vts路径下$ cd *installation-path*/android-vts/tools
  • 通过下面的命令来进入到vts的控制台$ .vts-tradefed
  • 运行vts的测试命令> run vts
VTS常用命令
  • 列出所有跑测结果> l r
  • 列出所有检测到或已知的设备> l d
  • 单跑某一个模块> run vts -m <模块名>
  • 单跑某个测试项> run vts -m <模块名> -t <测试项名>
  • 可用选项> run vts -s <device_id> --logcat-on-failure --screenshot-on-failure --shard-count <shards>‘-s <device_id>’:可指定运行测试的设备
    ‘–logcat-on-failure’:当测试失败时捕获logcat
    ‘–screenshot-on-failure’:当测试失败时截取屏幕截图
    ‘–shard-count <shards>’:用多个设备上同时跑测,可节省时间
  • 更多的命令可通过 help all 来查看:
 

 

Android O 8.0 8.1 VTS测试环境配置

要进行 VTS 测试,首先需要搭建测试环境,我们需要以下配置:

+ 64-bit Ubuntu Linux

+ Java 8
openjdk version “1.8.0_151”
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.17.10.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

+ Python 2.7
Python 2.7.14

+ ADB 1.0.39
Android Debug Bridge version 1.0.39
Version 0.0.1-4500957

具体的搭建步骤是:
1) 安装 python 开发包

$ sudo apt-get install python-dev

2) 安装 Protocol Buffer 工具

$ sudo apt-get install python-protobuf
$ sudo apt-get install protobuf-compiler

3) 安装 Python 虚拟环境相关工具

$ sudo apt-get install python-virtualenv
$ sudo apt-get install python-pip

4) 在设备上启用开发者模式并打开 USB 调试功能
5) 检查设备是否能被 ADB 探测到

$ adb devices

6) 使用 ADB 登录设备

$ adb shell