若米知识 > 百科 > ui自动化测试流程

ui自动化测试流程

导读前端UI自动化puppeteer实践优质回答 背景在表单(web页面)测试过程中,要经常对表单基本功能进行回归,曾经考虑过使用webUI自动化工具,减少重复性的操作,但是因为之前用过appium,对...

今天若米知识就给我们广大朋友来聊聊ui自动化测试方法,以下关于观点希望能帮助到您找到想要的答案。

前端UI自动化puppeteer实践

优质回答 背景

在表单(web页面)测试过程中,要经常对表单基本功能进行回归,曾经考虑过使用webUI自动化工具,减少重复性的操作,但是因为之前用过appium,对UI自动化的体验不是很好,所以有些纠结,但是,再仔细想一下,有可能存在比较好用又确实能提升效率的工具,也不妨去尝试一下。

上网查询了一下,puppeteer具有可以使用录制脚本的工具puppeteer-recorder、截图等功能,找了个demo开始试了一下,发现坑较少,安装方便,使用比较流畅。

puppeteer介绍

Puppeteer 是一个Node库, 它提供高级API,通过DevTools Protocol 来控制Chrome 或 Chromium。 Puppeteer 默认运行为headless ,但是可以配置为运行为non-headless。详见文末参考链接。

效果展示

目录结构

cases:用例脚本

config:配置文件,可区分测试、线上环境

screenshot_outputs:输出的截图文件

utils:用到的通用方法

测试思路

1、在脚本中写入测试执行步骤

2、运行脚本

3、查看执行结果(截图),查看是否符合预期。

这样操作会使简单很测试很多。就拿表单人工审核为例,全部人工操作的话,需要填写并提交表单,登录表单运营后台,找到对应的目录及表单,对表单进行审核,再重新打开表单并进行查看,而自动化的话,在写好脚本(在脚本中可进行接口请求)之后,就可以直接运行脚本,查看结果。

环境搭建

1、安装puppeteer:npm install puppeteer(前提是安装了node、npm)

2、安装chrome插件puppeteer-recorder(可自行百度,比较简单)

3、npm init,初始化一个项目

脚本编写

遇到问题

1、puppeteer-recorder只能录制获取元素、点击元素操作,没有获取到填写文本的操作,需要修改或添加已录制好的脚本

2、有些地方例如截图前,接口请求结束后,需要使用等待方法。await page.waitFor(3000)

3、使用await进行接口请求,不然会出现同步异步问题,后面的语句开始执行(但是要用到的参数还没有获取到)

参考:

如何使用UIAutomation进行iOS 自动化测试

优质回答1.1 UI Automation的运行

先通过简单的测试脚本的运行来认识UI Automation。本文使用的例子是Apple官方实例程序Recipes。可以通过XCode的帮助文档找到iPhoneCoreDataRecipes这个项目并将其打开。

选择打开以后,程序源码会被自动的下载到当前用户的Downloads目录下。使用XCode打开Recipes项目并长按运行程序按钮就会看到,如下图所示,点击“Profile”命令即可。

还可以通过单击XCode中Product菜单,在其中点击“Profile”命令。当然也可以通过“command + i”快捷方式来运行程序。“Profile”运行以后,Instruments会启动运行。在其中选择“Automation”选项后,单击“choose”按钮确定。

点击“choose”命令后,稍等片刻即可看到已经运行了。

如何才能编写或运行测试脚本呢?现在我们就来看看入门级别的教程,也就是UI Automation的“Hello world”。会看到默认有一句代码,这就是UI Automation的javascript脚本。那么我们在下面添加一句话,即可完成这个“Hello world”程序。

之后就可以点击运行,来执行这个脚本了。

如果当前脚本正在运行,那么当前红色圆形按钮,为黑色正方形时,先点击黑色正方形按钮停止执行脚本,再点击红色圆形按钮运行即可。接下来我们可以看到一些输出的log。也就是刚才的脚本执行结果,打印当前的控件树。虽然第一个脚本很简单,确是非常有用的一个功能,以后的自动化测试脚本都要以这个脚本的运行结果为基础。

1.2 UI Autmation界面简要介绍

(1) 标示为1的区域,第一个按钮在未运行状态,功能是“运行”脚本,当脚本在运行状态时,功能是“停止”脚本。第二个按钮的功能为“暂停”脚本执行。

(2) 标示为2的区域,主要负责展示Instruments的运行状态,左侧显示了当前Instruments运行加载的Library数量,右侧显示当前Library的一些简介信息和运行的时间。

(3) 标记为3的区域,主要是一些Instruments运行的设置,

(4) 标记为4的区域,日志显示和脚本显示的地方。

1.3 UI Autmation脚本开发之前

运行UI Automation时有一些规则需要遵循,如果不遵循规则,它会在不同层面上限制自动化测试脚本的运行。

自动化测试脚本的运行限制主要来自两个层面。

(1) 系统级别的运行限制,不是所有的应用程序都可以用UI Automation进行自动化测试的,UI Automation本身会对程序的签名有一定的要求(模拟器上运行除外)。

(2) 应用程序级别的限制主要来自控件的识别方面,如果一个应用程序的大部分控件无法得到有效的识别,那么这个应用程序就无法拥有强大的自动化测试脚本,或者无法直接拥有任何功能的自动化测试脚本。

为了让测试更好的运行,必须遵循以下的规则。

(1) 被测试的应用程序必须是Developer签名的应用程序或者运行在模拟器里面的应用程序。从App store下载的应用程序都不是Developer签名,都不可直接被用于UI Automation测试,如果想测试可以通过重签名工具,重新签名后,才可以使用。当然最简单的方法就是拿着源码后配置上Developer签名,直接通过XCode安装到设备上即可使用UIAutomation测试。

(2) 在被测试应用程序开发的过程中,需要处理控件的可访问性。使用在storyboard中或利用代码设置View的AccessibilityLabel属性。

做好的设置,就可以开始UI Automation之旅了。

如果对自动化测试有其他的疑问,可访问。

测试总结-robotframework之UI自动化

优质回答Robotframework做UI自动化测试示例框架

UI自动化测试用例也写过一阵子了,这边给大家分享一套完整的UI自动化测试框架,还是很感谢同事的帮忙和教导

1、搭建UI自动化框架

框架主通过测试用例,元素定位,系统关键字,系统变量,行为导入这五个模块组成。具体详情请看截图。

2、测试用例当中比较重要的一个东西就是tags,tags标识着每一个用例,再做回归测试的时候就不会那么乱,并且后期维护起来也会比较方便。

1>Force Tags:在文件型Suite这里还可以继续给子元素增加Force Tags,但是他不能删除父元素设置的tags。

2>测试用例tags

3、测试用例编写

Robotframework可以通过setup和teardown可以避免冗余操作,把登陆和关闭浏览器等操作放在Suite固定执行,就不必在每个用例中都写入登陆和关闭浏览器等操作。和python做自动化测试中setUp与tearDown的作用是一致,特别有意思。总感觉我对自动化测试的概念不是特别深入,还是需要不断尝试,学习当中。

4、页面中iframe嵌入HTML如何定位元素(番外)

这个算是这次总结的番外篇,之前都没怎么遇到比较复杂的元素,这次的项目包含iframe,百度了很久才解决了,如果遇到iframe中包含html,需要定位HTML中的元素,需要先进入iframe中,通过Select Frame操作即可。

select frame的用法如下:

示例如下:

如何使用python做android的自动化测试

优质回答下面我们开始第一个简单的Android UI自动化测试

1.使用adb命令连接真机或模拟器

2.打开uiautomatorviewer工具

3.使用uiautomatorviewer工具获取应用的元素进行定位

4.简单介绍unittest框架的使用方法

5.使用Python编写猫宁考勤应用注册模块的自动化测试

1.使用adb命令连接真机或模拟器:

手机USB连接电脑,进入开发者模式;

cmd命令:adb devices ,查看手机是否连接

显示错误

这是因为adb的端口被占用,我们需要查看是什么应用占用了这个端口(5037为adb默认端口)

cmd命令 : netstat -aon|findstr “5037”

可以看到占用5037端口对应的程序的PID号为8388;

cmd命令 : tasklist|findstr “8388”

可以看出8388对应的程序为kadb.exe,说明该程序正在使用5037端口;

这时我们需要在任务管理器中结束kadb.exe进程,按快捷键“Ctrl+Shift+Esc”调出Windows任务管理器,找到“kadb.exe”,单击下方的结束进程即可!

我们再次运行cmd命令:adb devices

这一步成功后我们才能运行sdk自带的uiautomatorviewer;

我们需要用uiautomatorviewer工具来获取元素,用于定位。

cmd命令:uiautomatorviewer,打开uiautomatorviewer界面

或者找到sdk目录:sdktools中找到uiautomatorviewer.bat文件双击运行

2.打开uiautomatorviewer工具

我们可以根据text,resource-id,class等元素进行定位

3.使用uiautomatorviewer工具获取应用的元素进行定位

这里我使用python自带的IDLE进行编写测试脚本,打开python文件找到IDLE(python GUI)双击打开,如图:

4.简单介绍unittest框架的使用方法

如何使用UIAutomation进行iOS自动化测试

优质回答1. 你的第一个UIAutomation测试脚本

UIAutomation的功能测试代码是用Javascript编写的。UIAutomation和Accessibility有着直接的关系,你将用到通过标签和值的访问性来获得UI元素,同时完成相应的交互操作。

下面让我们来编写我们的第一段测试代码。

使用iOS模拟器

1. 下载示例应用程序TestAutomation.xcodeproj,并打开它。这个项目是一个很简单的包含2个tab的tabbar应用程序。

2. 确保选中如下图所示的“TestAutomation > iPhone 5.0 Simulator”模式(或许你已经切换成5.1了,因此它可能是iPhone5.1模拟器)。

3. 启动Instruments(Product > Profile),或者通过⌘I。

4. 选择左边的iOS Simulator,然后再选择Automation模板,然后点击“Profile”。

5. Instruments就已经启动好后,然后直接开始录制了。这里先停止录制,(红包按钮或者⌘R)。

6. 在左边的Scripts窗口,点击“Add > Create”创建新的脚本。

7. 在脚本编辑器里,输入下面的代码

var target = UIATarget.localTarget();

var app = target.frontMostApp();

var window = app.mainWindow();

target.logElementTree();

clip_image007[4]

8. 重新运行这段脚本⌘R(不需要保存)。脚本跑起来后,你可以在日志打完后停止它。

clip_image009[4]

赞一个!我们就这样完成了我们的第一个UIAutomation测试用例。

使用iOS设备

你除了将你的测试用例运行模拟器上,也可以将它运行在一个真实的设备上。不过,自动化测试用例只能运行在支持多任务的:iPhone 3GS,iPad,iOS > 4.0等设备上。遗憾的是不管iPhone 3G的系统版本是什么,都不支持。

下面是如何操作:

1. 通过USB接口连接上你的iPhone。

2. 选择 “TestAutomation > iOS Device”模式。

3. 确保Developper profile设置成Release模式(而不是Ad-Hoc Distribution profile)。默认情况下,profiling是设置成Release模式的(因为没有必要将profile设置成Debug模式)。

4. 启动测试

5. 后面的步骤请参考前面模拟器部分。

2. 处理UIAElement和元素可访问性(Accessibility)

UIAElement层次结构

Accessibility和UIAutomation有密切的联系:如果一个控件的Accessibility是可以被访问的,你就可以设置和读取它的值,作相关的操作,而当一个控件的Accessibility不可见时,你就没有办法通过automation访问它。

你可以通过Interface Builder,或者通过在程序里设置isAccessibilityElement属性的方式来设置一个控件的Accessibility或者可被自动化。当你设置container view(即:一个视图包含其它的UIKit元素)的accessibility时,你必须注意。你设置了整个View的accessibility将会“隐藏”它的子视图的accessibility,例如:在示例项目中,你不能将outlet视图设置成可访问的,否则它所有的子控件将都不可以访问了。在任何时候,logElementTree都是你忠实的朋友:它将当前界面的所有可被访问的元素都打印在日志里。

每一个可以被访问的UIKit控件都可以用一个Javascript对象来描述,它就是一个UIAElement。UIAElement有几个属性:name, value, elements, parent。你的主窗口包含很多的控件,它们是以UIKit层次的方式定义的,这些UIKit层次结构对应的是UIAElement的层次树。例如:前面的测试代码中,通过调用logElementTree,我们可以得到如下面所示的树结构:

+- UIATarget: name:iPhone Simulator rect:{{0,0},{320,480}}

| +- UIAApplication: name:TestAutomation rect:{{0,20},{320,460}}

| | +- UIAWindow: rect:{{0,0},{320,480}}

| | | +- UIAStaticText: name:First View value:First View rect:{{54,52},{212,43}}

| | | +- UIATextField: name:User Text value:Tap Some Text Here ! rect:{{20,179},{280,31}}

| | | +- UIAStaticText: name:The text is: value:The text is: rect:{{20,231},{112,21}}

| | | +- UIAStaticText: value: rect:{{145,231},{155,21}}

| | | +- UIATabBar: rect:{{0,431},{320,49}}

| | | | +- UIAImage: rect:{{0,431},{320,49}}

| | | | +- UIAButton: name:First value:1 rect:{{2,432},{156,48}}

| | | | +- UIAButton: name:Second rect:{{162,432},{156,48}}

clip_image001[6]

你可以通过下面的代码来访问文本框:

var textField =

UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0];

你可以选择通过从0开始的索引或者这个元素的名称来访问这个元素,例如:你也可以通过下面的代码来访问文本控件。

var textField =

UIATarget.localTarget().frontMostApp().mainWindow().textFields()["User Text"];

后一种方式更加清晰明了,应该多使用。你可以通过Interface Builder设置UIAElement的name属性,

clip_image002[6]

或者通过编写代码的方式:

myTextField.accessibilityEnabled = YES;

myTextField.accessibilityLabel = @"User Text";

你现在可以看到,通过accessibility属性可以被UIAutomation用来找到不同的控件。这非常的清晰,因为,第一,你只要学习一个测试框架;第二,通过编写自动化测试代码,你同时还可以保证你的程序是可以被访问的。因此,每一个UIAElement对象的子控件可以通过下面的方法进行访问:

buttons(), images(), scrollViews(),textFields(), webViews(), segmentedControls(), sliders(), staticTexts(), switches(), tabBar(),tableViews(), textViews(), toolbar(), toolbars() 等等……

你可以通过如下代码在tabbar上访问第一个tab:

var tabBar = UIATarget.localTarget().frontMostApp().tabBar();

var tabButton = tabBar.buttons()["First"];

UIAElement结构层次非常的重要,你以后会常常用到它。而且你还要记住,你可以在随时通过调用UIAAplication的logElementTree来获得它的结构。

UIATarget.localTarget().frontMostApp().logElementTree();

在模拟器上,你还可以激活Accessibility 的检测器。启动模拟器,找到“Settings > General > Accessibility > Accessibility Inspector”,然后将它设为“打开”状态。

这个彩色的小框框就是Accessibility 检测器了。当它收起来的时候,Accessibility就被关闭了,当它展开的时候,Accessibility就是打开的。你只要点击上面的箭头按钮就可以激活或者屏蔽Accessibility。现在,打开我们的示例程序,激活检测器。

然后,点击文本框,检查UIAElement的name和value属性(其实就是accessibilityLabel和accessibilityValue对应的NSObject类型的值)。这个检测器可以帮助你调试和编写你的测试代码。

模拟用户操作

让我们更进一步,模拟一些用户的交互操作。你可以简单地调用按钮的tap()来作一个点击操作:

var tabBar = UIATarget.localTarget().frontMostApp().tabBar();

var tabButton = tabBar.buttons()["First"];

// Tap the tab bar !

tabButton.tap();

你还可以调用UIAButtons的doubleTap(), twoFingerTap()。如果你不想操作具体的某个元素,你也可以直接根据屏幕上指定的坐标点进行操作,你可以这么用:

UIATarget.localTarget().tap({x:100, y:200});

UIATarget.localTarget().doubleTap({x:100, y:200});

UIATarget.localTarget().twoFingerTap({x:100, y:200});

UIATarget.localTarget().pinchOpenFromToForDuration({x:20, y:200},{x:300, y:200},2);

UIATarget.localTarget().pinchCloseFromToForDuration({x:20, y:200}, {x:300, y:200},2);

拖拽与划动:

UIATarget.localTarget().dragFromToForDuration({x:160, y:200},{x:160,y:400},1);

UIATarget.localTarget().flickFromTo({x:160, y:200},{x:160, y:400});

注意,当你指定操作的时间间隔的时候,它是有特定的范围的,即:拖拽操作的时间间隔必须大于或者等于0.5秒,小于60秒。

现在,让我们来练习一下:

停止Instruments (⌘R)

在Scripts窗口里, 移除当前的脚本

点击“Add > Import”然后选择TestAutomation/TestUI/Test-1.js(将下面的代码保存到这个路径)

点击录制按钮 (⌘R) 然后看看将会发生什么…

下面是Test-1.js代码:

var testName = "Test 1";

var target = UIATarget.localTarget();

var app = target.frontMostApp();

var window = app.mainWindow();

UIALogger.logStart( testName );

app.logElementTree();

//-- select the elements

UIALogger.logMessage( "Select the first tab" );

var tabBar = app.tabBar();

var selectedTabName = tabBar.selectedButton().name();

if (selectedTabName != "First") {

tabBar.buttons()["First"].tap();

}

//-- tap on the text fiels

UIALogger.logMessage( "Tap on the text field now" );

var recipeName = "Unusually Long Name for a Recipe";

window.textFields()[0].setValue(recipeName);

target.delay( 2 );

//-- tap on the text fiels

UIALogger.logMessage( "Dismiss the keyboard" );

app.logElementTree();

app.keyboard().buttons()["return"].tap();

var textValue = window.staticTexts()["RecipeName"].value();

if (textValue === recipeName){

UIALogger.logPass( testName );

}

else{

UIALogger.logFail( testName );

}

这段脚本先启动待测程序,然后,如果第一个tab没有被选的话就切换到第一个tab,并将上面的文本框的值设成“Unusually Long Name for a Recipe”,接着收起虚拟键盘。这里有一些新的方法值得注意的:UIATarget的delay(Number timeInterval) 方法允许你在两个操作之间做一些等待,UIALogger的logMessage( String message) 方法用来将你想打印的信息输出到日志上去,UIALogger的logPass(String message)方法指明你的测试脚本已经成功的完成测试了。

你还知道了如何访问键盘上的按钮,然后作点击操作:

app.keyboard().buttons()["return"].tap();

如何使用UIAutomation进行iOS自动化测试

优质回答UI Automation脚本录制及回放

UI Automation工具提供了脚本的录制功能,脚本回放成功率很高的脚本录制工具。尽管这样,录制脚本还是需要进行简单的加工和修改,才能完全正确的表达自动化测试脚本的意义。所以,期望不要过高,很多情况下还是需要手动编辑测试脚本的。录制回放工具可以在一定范围内帮助我们提高生产效率。在此就简单的介绍一下脚本录制功能的使用。在Instruments界面上,选择病点击正下方的小红按钮即可开始录制。

录制开始以后,可以尝试着给Recipes程序添加一个菜单。手动操作的同时会自动生成测试脚本。

录制功能同时支持真实设备和模拟器。用户只需要开启录制功能,然后在真实的设备或模拟器上进行操作即可。操作的动作会被翻译成自动化测试脚本显示在脚本编辑区,等待用户确认。在脚本录制完成以后,可以通过选择来编辑脚本,也可以通过双击确认默认的脚本。如果当前选项没有我们需要的操作选项,则只能删除手动编写脚本。相关的脚本录制功能可以在体验中慢慢研究。

回放就很简单,点击红色小按钮旁边的“播放”按钮即可回放。这里可以通过选择设备来选择真实的机器,这样可以同时测试模拟器和真实机器上该脚本是否都可以正常执行。

虽然我们无法避免生活中的问题和困难,但是我们可以用乐观的心态去面对这些难题,积极寻找这些问题的解决措施。若米知识希望ui自动化测试流程,能给你带来一些启示。

本文来自网络,不代表本站立场,转载请注明出处:https://www.rm2g.com/baike/128338.html

作者: 若米知识

若米知识为您提供最全面的生活百科网站大全,主要为您提供数码、汽车、财经、美食、财经、科技、健康、教育、创业、电商、影视、百科等资讯信息,在这里可以找到您所需的答案,解决您所困惑的问题。
ⅴlp客户的管理
室内墙砖多少钱一块
联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部