《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试

本节书摘来自异步社区《移动App测试的22条军规》一书中的App测试综合案例分析,第23.19节对微信App进行自动化测试和探索性测试,作者黄勇,更多章节内容可以访问云栖社区“异步社区”公众号查看。

23.19 对微信App进行自动化测试和探索性测试
我们在对微信App进行测试时,必然会进行自动化和探索性测试。

(1)在编写微信App的自动化测试时,我们还是选用Appium来帮助我们录制对应的脚本;而基于测试金字塔的测试架构设计,我们对于Appium的自动化测试,选择编写“用户登录微信后,在通讯录中添加招商银行公众号”这个用户旅程(如图23.45~图23.55所示)。

打开微信App的主界面(如图23.45所示)。
打开“Contacts”(通讯录)页面(如图23.46所示)。


《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试


《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试

点击右上角的“+”号按钮(如图23.47所示)。
选择“Add Contacts”( 添加朋友)(如图23.48所示)。

《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试


《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试

点击搜索框(如图23.49所示)。
在搜索框中输入“cmb”(如图23.50所示)。

《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试


《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试

点击“Search: cmb”(如图23.51所示)。
选择搜索结果中的第一个公众号“招商银行”(如图23.52所示)。

《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试


《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试

在招商银行公众号的“Profile”(详细资料)页面点击“Follow”( 关注)(如图23.53所示)。
在弹出的“Note”提示框中选择“Cancel”(取消)(如图23.54所示)。

《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试


《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试

点击左上角的返回按钮返回微信App主界面(如图23.55所示)。

《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试

在我们编写针对这个用户旅程的自动化测试时,可以使用Appium的inspector来帮助我们录制对应的脚本(如图23.56所示)。

《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试

Appium inspector生成的脚本如下。
require 'rubygems'
require 'Appium_lib'
capabilities = {
  'Appium-version': '1.0',
  'platformName': 'Android',
  'platformVersion': '4.4',
  'App':
  '/Users/huangyong/Downloads/weixin600android501.apk',
}
server_url = "http://0.0.0.0:4723/wd/hub"
Appium::Driver.new(caps: capabilities).start_driver
Appium.promote_Appium_methods Object
 find_element(:xpath, "//android.view.View[1]/android.widget.FrameLayout[2]/android.widget.FrameLayout[1]/android. widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget. LinearLayout[1]/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]/android.widget.TextView[1]").click
find_element(:name, "More function buttons").click
find_element(:xpath, "//android.widget.ListView[1]/android.widget.LinearLayout[2]/ android.widget.LinearLayout[1]/android.widget.TextView[1]").click
find_element(:xpath, "//android.view.View[1]/android.widget.FrameLayout[2]/ android.widget.FrameLayout[1]/android. widget.LinearLayout[1]/android.widget. ListView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/ android.widget.RelativeLayout[1]/ android.widget.TextView[1]").click
find_element(:xpath, "//android.view.View[1]/android.widget.FrameLayout[1]/ android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.EditText[1]").send_keys "cmb"
find_element(:xpath, "//android.view.View[1]/android.widget.FrameLayout[2]/ android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ListView[1]/ android.widget.RelativeLayout[1]/android.widget. LinearLayout[1]/android.widget.TextView[1]").click
find_element(:xpath, "//android.view.View[1]/android.widget.FrameLayout[2]/android. widget.FrameLayout[1]/android. widget.LinearLayout[1]/android.widget.ListView[1]/ android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]/android.widget.TextView[1]").click
find_element(:xpath, "//android.view.View[1]/android.widget.FrameLayout[2]/ android.widget.FrameLayout[1]/android. widget.LinearLayout[1]/android.widget. ListView[1]/android.widget.LinearLayout[4]/android.widget.TextView[1]").click
find_element(:xpath, "//android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/ android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[2]/android.widget.LinearLayout[1]/android.widget.Button[1]").click
find_element(:xpath, "//android.view.View[1]/android.widget.FrameLayout[1]/ android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.ImageView[1]").click
driver_quit

这样我们把脚本保存下来,就能回放执行自动化测试了。当然,我们不仅需要对测试添加断言Assertion,也需要对录制的脚本进行重构,以达到更好的重用性、维护性和可扩展性。

(2)针对微信App的探索性测试,我们选择以“在朋友圈发送消息”这个用户旅程为例。

通过探索性测试,我们发现在朋友圈发送消息,不仅可以发送朋友圈中明确列出的“Images”(照片)和“Sight”(小视频)消息(如图23.57所示)。

也可以通过长按右上角的照相机图标发表文本(Text)(如图23.58所示)。


《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试


《移动App测试的22条军规》—App测试综合案例分析23.19节对微信App进行自动化测试和探索性测试
上一篇:egg - 企业级 Node 框架 - JSConf China 2016


下一篇:Linux连接投影仪(ubuntu)失败或显示不正常