草庐IT

App自动化测试怎么做?实战分享App自动化测试全流程

测试猿大课堂 2023-09-27 原文

一、什么是app测试?什么是app自动化测试?

概念:所谓app测试也称之为移动测试,通俗易懂的理解就是测试我们平时手机使用的程序。那什么是app自动化测试呢?

通常情况下是随app产品不断迭代更新,给测试⼈员也增加了测试⼯作量,特别是⼤量繁琐的回归测试。⾃动化测试是应对产品不断迭代更新的辅助测试⼿段(主要是针对回归测试),最终⽬的是为了保证产品质量。简而言之就是自动化的有点就是可重复、效率高,增加软件信任度。

>> 下载300G软测学习资料包【视频教程+PPT+课件+项目源码】


二、app测试的主要内容有那些

1、功能测试 : 查看功能是否正常,主要针对每一个功能点进行一一测试,主要核心就是把验证的每个测试点都满足需求的对应功能,验证标准就是让预期结果和实际结果保持一致。

2、安装卸载测试:首先要测试的点必须是软件可以正常的安装和卸载,并且保证最基本系统的正常运行。

3、升级测试:测试点是软件的状态,就是更新迭代升级前后的区别和变化,确保旧版本功能正常实现,新功能不会出问题。

4、兼容性测试:测试点:屏幕尺寸,以及系统适配等问题。主要对目前市场上比较流行的设备进行安装软件进行测试,保证可以正常的使用具体测试点如下:

  • Android系统版本
  • 厂商二次开发版本
  • 不同的分辨率
  • 不同的网络
  • 网络切换、中断测试
  • 使用中来电话、短信
  • 横竖屏切换
  • 健壮性:电池耗电量、流量消耗情况、崩溃恢复等等


三、App测试如何搭建环境

1、首先我们需要安装环境java sdk的环境:版本jdk1.62以上,

2、配置 JAVA_HOME 和 PATH

右击“我的电脑”–>然后找到"属性"–>点击"高级系统设置"–>选择"高级"–>点击"环境变量"

在系统变量里新建"JAVA_HOME"变量,变量值为:D:\Pro\jdk1.8.0_60(具体根据jdk的安装路径配置)

  • 在系统变量里新建一个"classpath"变量,变量值为:

:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (需要重点注意变量值前面有一个.需要加到变量值里面去)然后找到path变量(如果已经存在了这个变量值,那就不需要去新建了)接下来就是进行添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

3、安装Android的测试开发环境,到官网下载Android SDK进行安装

4、同样在自己电脑上面,配置 ANDROID_HOME 和 PATH路径

5、虚拟机安装**:**推荐使用-(夜神模拟器)

6、python环境安装:建议使用3.6版本,安装时切记勾选配置环境变量

手动配置:配置环境变量-电脑属性系统变量添加python根目录

温馨提示:以上所有安装包和环境,有需要可以私信我,可以分享安装包链接以及详情操作步骤。

关于使用手机模拟器的话也可以使用真机测试步骤如下:

a:手机通过usb线 连接到电脑

b:在手机上打开文件传输(通知栏,手机正在充电)

c:在电脑上会发现多了一个CD驱动器,里面是手机的驱动

d:安装驱动,电脑的设备管理器中就可以看到型号了

e:开启开发者模式: 手机 – 设置 – 关于手机 – 版本号 (多次点击)

f:打开USB调试: 手机 – 设置 开发者选项 – usb调试(打开)


四、app测试的ADB服务

1、定义

  • 就是一个 Android Debug Bridge 安卓调试桥
  • 即包含ADB服务,也包含了与服务对应的Client

2、关系

  • 会在电脑上创建出来一个服务(ADB服务)
  • 手机连上电脑后,都会与服务建立连接
  • 要想发送指令给手机, 需要把指令发送到服务中。

3、作用

  • 通过命令行去操作手机

4、主要命令

a:服务 (如果发现代码连不上手机了)

  • adb kill-server
  • adb start-server

b:查看设备

  • adb devices

c:进入手机终端

  • adb shell

d:获取信息

  • adb shell getprop ro.build.version.release 获取手机android版本
  • adb shell dumpsys window windows | findstr mFocusedApp 获取手机当前运行的程序和界面的名称

e:文件传输

  • adb push 电脑上的文件 手机上的位置
  • adb pull 手机上的文件 电脑上的位置

f:软件安装卸载

  • adb install 电脑上的apk文件路径 安装应用
  • adb uninstall 应用的包名

g:获取其他信息

  • adb shell am start -W 包名/.启动名

五、自动化测试工具

一般我们去做app自动化会选取 Appium测试工具

优点:支持的语言多、支持的平台多

环境搭建

  • 安装appnium的程序
  • 在python中安装 Appium-Python-Client
  • 安装selenium和appium的客户端
  • 安装被测试app

六、编写python自动化代码

1. 连接设备
组装一个字典,注明平台、系统版本、名称
#注明要打开的应用和界面的名称

from appium import webdriver

# server 启动参数

desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.56.101:5555'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'

# 从appium库里面导入driver对象

# driver = webdriver.Remomte('appnium程序的地址','一个字典,要获取设置的要求')
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

2. 执行操作

# driver.xxx
# element = driver.find_element_by_xx()
# element.xxx

3. 退出

driver.close_app()
driver.quit()

七、风险评估和分析事项

自动化测试的主要风险分析主要有一下几点:

(1)测试用例的覆盖率。测试人员开发的测试用例覆盖率是否足够全面,影响了最终的测试效果和测试执行效率。

(2)测试结果的准确程度。测试结果的准确度直接影响最终产品的质量,以及后续对项目进行二次改动和调试的工作难度。

(3)自动化代码维护。因为自动话的脚本需要进行编写和维护这个时间精力成本比较大。(一些数据和关键字驱动的自动化测试框架,应该尽可能的减少代码的更改和优化量。自动化框架的搭建和开发应该尽可能使用面向对象的编程思维进行搭建)。

(4)版本开发以及测试的时间进度。一般如果项目比较稳定,功能更新和迭代周期较长的,都建议选择自动化测试,可以提高测试效率并且高精度的保障产品质量。

(5)开发对控件元素增修改的程度。需开发人员尽可能地用name元素,并且尽量保证开发结果和UI设计保持一致,不要大幅度的修改。这样做的目的是测试工程师能够根据需求中的设计做准确性测试,也方便测试工程师编写自动化脚本提高工作效率。

有关App自动化测试怎么做?实战分享App自动化测试全流程的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  8. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  9. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  10. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

随机推荐