sikuli python java_自动化测试之sikuli调研

sikuli python java_自动化测试之sikuli调研调研结果Sikuli可用于web和app的自动化测试中,操作简单,代码容易,但截图过程太过繁琐,所需要的图片内存占用量大,且sikuli的图片识别度较低,需对所要操作的图片进行精准截图。什么是SikuliMIT的研究人员设计了一种新颖的图形脚本语言Sikuli,计算机用户只须有最基本的编程技能(比如会写print”helloworld”),他不需要去写出一行行代码,而是用屏幕截图的方式,用截出来…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

调研结果

Sikuli可用于web和app的自动化测试中,操作简单,代码容易,但截图过程太过繁琐,所需要的图片内存占用量大,且sikuli的图片识别度较低,需对所要操作的图片进行精准截图。

什么是Sikuli

MIT的研究人员设计了一种新颖的图形脚本语言Sikuli,计算机用户只须有最基本的编程技能(比如会写print”hello world”),他不需要去写出一行行代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。

Sikuli工作原理(以python为例):

通过sikuli IDE,可以建立sikuli脚本,其中包括Python源代码以及所需要的截图。Sikuli IDE执行脚本时,通过Python解析器和java库的桥梁,核心部分解析是通过java库实现的分两个部分,java.awt.Robot用来传递键盘和鼠标的事件流到适当位置;给予OpenCV的C++引擎用于在屏幕内搜索制定的图片。各部分的协调工作,最终使得sikuli脚本得以运行,如下图:

561c8c723967cdf4ede006be4a1128f4.png

利用sikuli对web进行自动化测试的流程

1.下载sikulixsetup

下载地址:https://launchpad.net/sikuli/+download

下载得到:sikulixsetup-1.1.0.jar

2.安装sikuli

l 将jar包导入工程中;

l 在cmd中运行该jar包。java -jar sikulixsetup-1.1.0.jar,则会出现如下图,选择相应选项后,启动会下载sikulixapi.jar。不然会报错:libs to export not found on above classpath: /sikulixlibs/mac/libs642.

l 选择第二个

l 启动后会有have fun的提示;

l 在文件夹中找到下载的sikulixapi.jar包,导入到工程中。

50c4c6d40a718be83b23fb15cfbe81e8.png

3.编写java代码

代码如下:

import org.sikuli.script.FindFailed;

import org.sikuli.script.Key;

import org.sikuli.script.Screen;

public class Sikulidemo123 {

public static void main(String[] args) throws FindFailed, InterruptedException {

Screen s=new Screen();

s.click(“D:\\eclipse-jee-mars-2-win32-x86_64\\Sikulidemo\\PNG\\min1.png”);

s.doubleClick(“D:\\eclipse-jee-mars-2-win32-x86_64\\Sikulidemo\\PNG\\firfoxpic.PNG”);

Thread.sleep(2000);

s.type(“D:\\eclipse-jee-mars-2-win32-x86_64\\Sikulidemo\\PNG\\url1.png”, “******”);

s.type(Key.ENTER);

s.click(“D:\\eclipse-jee-mars-2-win32-x86_64\\Sikulidemo\\PNG\\ningbologin.png”);

s.type(“D:\\eclipse-jee-mars-2-win32-x86_64\\Sikulidemo\\PNG\\username.PNG”,”zhangguangwu”);

s.type(“D:\\eclipse-jee-mars-2-win32-x86_64\\Sikulidemo\\PNG\\password.PNG”,”Abc123456″);

s.click(“D:\\eclipse-jee-mars-2-win32-x86_64\\Sikulidemo\\PNG\\loginbutton.PNG”);

System.out.println(“完美。。。。。”);

}

}

应用seleiun写的登录自动化

29d8e0cb63bf4548c2abdf5d04689d2e.png

两者区别:

ü Selenium的准确度更高,而sikuli对图片的要求很高;

ü Selenium写好的代码可以在任何计算机上使用,sikuli写好的代码仅允许在本机使用,因为图片的识别会因为分辨率、背景颜色,图片大小的变化而变化;

ü Selenium运行起来较为缓慢,而sikuli代码运行起来能很快识别出要点击和添加的内容;

ü Selenium中有很多元素无法获得,如xpath和操作windows系统等,但sikuli都可以通过识别图片从而进行操作。

编写web自动化测试的建议:

ü 编写自动化脚本时,若仅需要测试一小段简单程序时,可以使用sikuli来编写,若需要测试一个复杂的系统,则应以selenium为主,sikuli为辅(当有windows的操作时);

ü 在有上传文件、图片等操作的自动化测试中,用sikuli的图片识别技术更为方便;

ü 用sikuli来编写代码时,所截到的图片应该避免雷同,且尽量缩小范围,便于执行点击、填写等操作时,由于范围过大而定位错误;

ü 掺有sikuli jar包的代码,运行时必须在本机使用,不得换其他计算机操作,若更换,需重新截取所操作计算机的截图;

4.运行程序,运行结果如下图:

b68b27a7f1528ae679593fe4c2d936de.png

利用sikuli对android进行自动化测试的流程

1.将得到的sikulixpai.jar导入程序中

2.导入要进行测试app的apk

3.安装小萝贝控机大师并关联到手机,控机后页面如下图:

d641b82c244caf7b3b3244f6a72116ae.png

4.编写java代码

代码如下:

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.sikuli.script.FindFailed;

import org.sikuli.script.Screen;

public class SikuliTest {

@Test

public void addContact() throws FindFailed, InterruptedException{

//获得电脑桌面屏幕内容

Screen s = new Screen();

//图片存储路径

String imgpath=”D:\\eclipse-jee-mars-2-win32-x86_64\\Appium_demo\\pics\\”;

//点击最小化,最小化eclipse

s.click(“D:\\eclipse-jee-mars-2-win32-x86_64\\Appium_demo\\pics\\min1.png”);

//找到桌面上控机大师中的图标

s.find(imgpath+”Contect.png”);

s.click(imgpath+”Contect.png”);

Thread.sleep(1000);

s.click(imgpath+”AddContact.png”);

Thread.sleep(1000);

//输入contactname为some

s.type(imgpath+”Contactname.png”, “some”);

s.click(imgpath+”Contactemail.png”);

Thread.sleep(1000);

s.type(imgpath+”Contactemail.png”, “some@163.com”);

Thread.sleep(5000);

s.click(imgpath+”save.png”);

System.out.println(“App is done!”);

}

@After

public void tearDown() throws Exception {

//driver.quit();

}

}

使用appium编写的测试android app脚本

import io.appium.java_client.AppiumDriver;

import io.appium.java_client.android.AndroidDriver;

import io.appium.java_client.android.AndroidElement;

import java.io.File;

import java.net.URL;

import java.util.List;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.openqa.selenium.By;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.remote.DesiredCapabilities;

public class ContactsTest {

private AppiumDriver driver;

@Before

//打开该应用,进入主界面

public void setUp() throws Exception {

// set up appium

File classpathRoot = new File(System.getProperty(“user.dir”));

//app路径

File appDir = new File(classpathRoot, “/apps”);

//app包

File app = new File(appDir, “ContactManager.apk”);

DesiredCapabilities capabilities = new DesiredCapabilities();

//设置设备器件名称

capabilities.setCapability(“deviceName”,”4C3ETK1575017025″);

capabilities.setCapability(“platformVersion”, “4.4”);

capabilities.setCapability(“app”, app.getAbsolutePath());

capabilities.setCapability(“appPackage”, “com.example.android.contactmanager”);

capabilities.setCapability(“appActivity”, “.ContactManager”);

driver = new AndroidDriver<>(new URL(“http://127.0.0.1:4723/wd/hub”), capabilities);

System.out.println(“App is launched!”);

}

@Test

//测试添加联系人的步骤

public void addContact(){

WebElement el = driver.findElement(By.name(“Add Contact”));

el.click();

List textFieldsList = driver.findElementsByClassName(“android.widget.EditText”);

textFieldsList.get(0).sendKeys(“Some Name”);

textFieldsList.get(2).sendKeys(“Some@example.com”);

driver.swipe(100, 500, 100, 100, 2);

driver.findElementByName(“Save”).click();

System.out.println(“App is done!”);

}

@After

public void tearDown() throws Exception {

driver.quit();

}

}

两者区别:

ü Appium的准确度高,而sikuli对图片的要求很高;

ü Appium写好的代码可以在任何计算机上使用,sikuli写好的代码仅允许在本机使用,因为图片的识别会因为分辨率、背景颜色,图片大小的变化而变化;

ü Appium前期的环境搭建过于繁琐,并且运行脚本时,需要打开appium的前期步骤也比较多,sikuli仅需简单安装小萝贝控机大师即可;

ü Appium代码中前期需要配置的参数过多,而sikuli仅需按照日常手动操作中的步骤来进行即可。

编写android app自动化测试的建议:

ü 编写安卓app自动化测试脚本时,若仅需要测试一小段简单程序时,可以使用sikuli来编写,若需要测试一个复杂的系统,则应用Appium;

ü 用sikuli来编写代码时,所截到的图片应该避免雷同,且尽量缩小范围,便于执行点击、填写等操作时,由于范围过大而定位错误;

ü 掺有sikuli jar包的代码,运行时必须在同一外置手机中使用,不得换其他手机操作,若更换,需重新截取所操作手机的截图;

ü 若需要测试手机app的某一单独模块时,则应使用appium,可以自动定义启动哪一activity,省去前面一系列步骤。

4. 运行

Sikuli的优缺点

优点

1.与平台无关

可以实现任意类型的UI(GUI)测试,轻松实现跨平台测试,并可以解决web测试中的浏览器兼容性测试问题。

2.可读性强

代码可读性强,用图形表示逻辑关系更生动、形象,容易理解,便于维护。

3.提供.jar包

便于构建大型的测试框架,实现各类测试工具之间的互补。

4.用例设计与程序实施可分离

用例设计人员可以只关注图型逻辑关系和测试检查点,不需要懂得具体开发与程序语言基础;程序实施人员可以只进行编程而不过多参与设计。

缺点

1、sikuli不支持中文,因此无论在编程中或者保存路径,都不可以使用中文!否则运行报错。

2、图片的分辨率、色彩、尺寸、唯一性对程序的影响 (如果有两个相同的,无法区分具体哪一个)

3、sikuli本身还不完善(处于开发、升级阶段) 还有很多程序bug,能否继续发展还是未知数

4、只认识当前活动的图标(只有当前桌面有才行)

5、用例组织方面有提供但是目前有bug,还未调研尝试便利性

6、截图的话,脚本存储占用空间较大

7、相似度调整需要手动一个个的调整,工作量大

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234223.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pad图和n-s图_N S W

    pad图和n-s图_N S W(未完成_N-S图、PAD图概念未写)1、记录StudentRecord给出即将大学毕业的学生的姓名和平均分(GPA)。我们的目的是建立一个参加毕业典礼的学生表。候选毕业的学生表从文件”StudRecs”读入。因为学校规定:GPA低于minGPA的学生不能毕业,因此那些平均分低于minGPA的学生不参加毕业典礼。另外,记录那些选择不参加毕业典礼的学生名单,将名单保存至文件”NoAttend”中,按每行一个学生姓名保存。删除这些选择不参加毕业典礼的学生,最终生成参加毕业典礼的学生表。2、画出下列程序流

  • 【论文精读】Parallax-Tolerant Image Stitching Based on Robust Elastic Warping

    【论文精读】Parallax-Tolerant Image Stitching Based on Robust Elastic Warping基于高鲁棒性的弹性扭曲视差容忍图像拼接算法

  • delphi打包python_Python for delphi教程

    delphi打包python_Python for delphi教程Related’PythonforDelphi’Linksonthissite:tutorial-Andy’sPythonDelphiTutorial-Gettingstartedwiththebasics.AlsousethesetechniquesifyouareusingDelphi5orbelow,andPyth…

  • VC++消息钩子编程「建议收藏」

    VC++消息钩子编程「建议收藏」一、消息钩子的概念1、基本概念Windows应用程序是基于消息驱动的,任何线程只要注册窗口类都会有一个消息队列用于接收用户输入的消息和系统消息。为了拦截消息,Windows提出了钩子的概念。钩子(H

  • 小程序点击复制功能_怎么复制小程序链接

    小程序点击复制功能_怎么复制小程序链接先来说明一下我们需要实现的最终效果:用户点击之后复制页面内容。参考详情一、长按复制:长按复制,在微信小程序内的文字无法长按复制,除了text节点以外,但是要在text标签内加一个“selectable”属性。话不多说,我们直接上代码1.WXML<textselectable=”true”>长按复制<text/>二、一键复制:添加点击事件,绑定…

  • 如何防御udp攻击_编码可以防御哪些攻击

    如何防御udp攻击_编码可以防御哪些攻击原理​UDPFlood是日渐猖厥的流量型DoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。100kpps的UDPFlood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDPFLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。正常应用情况下,UDP包双向流量会基本相等,而

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号