通过TeamCity构建适用于Android的自行安装Python安装程序


听众


质量检查工程师,移动应用测试人员,自动化。


问题


在测试适用于Android的应用程序时(不仅,而且我们将仅讨论该平台),您必须安装一个或多个被测试产品的程序集。 此过程需要时间和精力,因此花在查找错误上的效率更高。


在本文中,我们将研究一个现有的解决方案,用Python编写自己的解决方案并进行比较。


交钥匙解决方案


目前,可能最流行的解决方案是Crashlytics服务提供,其中包括Beta安装程序。


考虑使用Crashlytics Beta进行的典型应用程序安装过程:


  • 我们找到Beta图标(1)→轻按(2)=应用程序启动。
  • 我们找到所需的项目(3)→轻按(4)=将打开一个带有程序集列表的屏幕。
  • 找到所需的组件(5)→轻按“下载”(6)=将安装文件下载到设备。
  • 屏幕上显示一个建议安装该应用程序的屏幕→点击“安装”(7)=显示安装屏幕。
  • 找到已安装的应用程序(8)→轻按(9)=应用程序启动; 准备测试。

因此,要使用Crashlytics Beta安装和运行一个应用程序构建,您总共需要执行至少九个操作。 我们将重点关注这些指标,并尝试创建一个需要较少操作来解决类似问题的安装程序。


定制解决方案


我们选择Python作为编程语言,因为它适合我们的任务并且非常受欢迎,包括在QA工程师中。
为了与Android进行交互,我们将使用adb,它是标准Android SDK的一部分。
要下载文件-Wget。
在我们的例子中,组装是在TeamCity中进行的。


现在让我们继续编写代码。


首先,我们将子流程模块导入到项目中,有必要执行wgetadb命令。


import subprocess 

为Wget添加必要的设置。


 settings = {'user': '—user=__teamcity', 'password': '—password=__teamcity', 'way': '____'} 

我们将通过内部版本号安装应用程序,因此我们将教脚本询问该参数。


 number = input(' № : ') 

假设我们需要一次安装两个程序集:测试和战斗。 我们将从TeamCity下载它们。 为此,我们通过打开服务页面并在工件中找到程序集来找到文件的完整路径。 预先组装的URL如下所示:


 https://teamcity.mysite.com/repository/app/_/_/myapp-_-_.apk 

在地址中,而不是程序集号上,您可以看到id,例如/ 1234:id /。 在这里,我们将不显示ID,而是显示程序集号。


我们将编写一个用于下载给定程序集的函数。


 def download(type_b): url = 'http://teamcity.mysite.com/repository/app/{0}/{1}/myapp-{0}-{1}.apk'.format(number, type_b) #    — ,  ,    —   , #     —  subprocess.check_output(['wget', '-N', '--cache=off', '--progress=bar', settings['user'], settings['password'], '-P', settings['way'], url]) 

我们将编写一个功能来安装和运行应用程序。 首先,删除以前安装的程序集。 不要忘记,如果设备上没有至少一个应用程序,该脚本将以错误结尾。 为避免这种情况,我们将忽略错误。


在这个虚构的示例中,有两个包:


  • com.myapp.prod
  • com.myapp.test

开始活动:


  • com.myapp.prod/com.myapp.StartActivity
  • com.myapp.test / com.myapp.StartActivity

您的包裹和活动名称将不同。


 def install(type_b): try: #   ,  package name subprocess.check_output(['adb', 'uninstall', 'com.myapp.{0}'.format(type_b)]) except: #     —  . pass finally: #    subprocess.check_output(['adb', 'install', '{0}/myapp-{1}-{2}.apk'.format(settings['way'], number, type_b)]) #   ,  activity name subprocess.check_output(['adb', 'shell', 'am', 'start', 'com.myapp.{0}/com.myapp.StartActivity'.format(type_b)]) print('(^_^)  ({0}-{1})   .'.format(number, type_b)) 

编写所有必要的功能。 现在可以应用它们了。
另外,我们为指定的程序集不在TeamCity中的情况添加了一个处理程序。


 while True: try: #  ,     download('prod') #  ,     download('test') except Exception: #    —     number = input('¯\_(ツ)_/¯   .\n  №: ') else: print(' …') #      install('prod') #      install('test') #    —       print('! (_8(|)\n') break 

脚本已准备就绪。 例如,我们将其保存为installer.py
添加别名,例如alias inst ='python〜/ scripts / installer.py'


检查一下


因此,要使用Crashlytics Beta安装一个程序集,您需要执行9个操作。 为了进行比较,我们在脚本中测量此指标。


  • 我们使用inst(1)命令启动脚本=显示一个提案以设置内部版本号。
  • 设置程序集号(2)=删除旧程序集; 下载,安装并启动新的。 该应用程序已准备好进行测试。

结果


Beta(1个版本)-9个操作(不包括删除旧版本)。
您自己的脚本(任意数量的程序集)-2个动作。


定制解决方案的另一个好处是它可以扩展(将多个产品的安装添加到许多设备等),并且还可以轻松地适应自动测试的任务。


资料来源


Source: https://habr.com/ru/post/zh-CN426149/


All Articles