精华内容
下载资源
问答
  • Sahi是TytoSoftware旗下的一个基于业务的开源Web应用自动化测试工具。Sahi运行为一个代理服务器,并通过注入JavaScript来访问Web页面中的元素。Sahi支持HTTPS并且独立于Web站点,简单小巧却功能强大。它相对于...
  • Sahi Pro是一个企业级测试自动化工具,易于使用且易于学习。 十多年来,Sahi Pro已帮助400多家企业客户解决了其质量检查团队面临的日常问题。 Sahi Pro是一个独特的测试自动化工具,以测试人员为中心,同时在设计和...
  • Sahi使用说明

    2018-06-08 10:43:25
    Sahi自动化测试工具使用说明,包括安装、脚本录制、例子。
  • ant-sahi.jar.zip

    2019-07-17 10:45:03
    标签:ant-sahi.jar.zip,ant,sahi,jar.zip包下载,依赖包
  • sahi os补丁

    2015-11-10 10:00:16
    sahi os增加操作excel相关方法,api说明详见http://download.csdn.net/detail/baidu_29649941/9062543 使用方法:运行安装程序,安装路径设置为sahi安装根目录
  • 在本文中,了解Sahi,这是一种在自动化测试领域中日益流行的工具。 Sahi是一个开源工具,它提供:强大的功能,可在浏览器之间进行记录和重放; 用于编写测试脚本的不同语言驱动程序(Java,Ruby); 并支持AJAX和...

    web自动化工具sahi

    QTP,Rational Functional tester(RFT),Selenium和Webdrive是用于自动测试Web应用程序的许多商业工具和开源框架的一些示例。 在本文中,了解Sahi,这是一种在自动化测试领域中日益流行的工具。 Sahi是一个开源工具,它提供:强大的功能,可在浏览器之间进行记录和重放; 用于编写测试脚本的不同语言驱动程序(Java,Ruby); 并支持AJAX和高度动态的Web应用程序。 Sahi还支持https和NTLM身份验证。 图1显示了Sahi如何适应模拟用户操作。

    图1.模拟的用户操作
    Sahi充当代理服务器,它将用户请求传递到实际应用程序并获得响应

    关于沙希

    Sahi具有以下强大功能:

    Sahi控制器(IDE)
    可跨浏览器工作并以两种模式记录脚本:Sahi或Java格式。
    可靠的物体识别
    独立于HTML结构。 它的直观API(例如nearin method即使页面只有很小的变化,也可以帮助定位浏览器元素,从而消除了对XPath的需求(这很难理解)。
    隐式等待
    无需处理等待实现,即使对于AJAX和页面加载也是如此。 测试人员不需要了解应用程序的内部。

    使用Sahi进行测试

    本文的其余部分将通过一个示例应用程序向您展示如何使用Sahi进行测试。 您可以下载示例应用程序和测试用例,以进行后续操作。

    安装与配置

    要安装和配置Sahi:

    1. 下载最新版本(请参阅参考资料 ),然后解压缩文件。 Sahi需要Java 1.5或更高版本。
    2. 启动Sahi的代理服务器。 启动脚本位于<sahi_root> \ userdata \ bin中。
      • 对于Windows:start_dashboard.bat
      • 对于Linux:start_dashboad.sh
      如图2所示,您可以选择一个浏览器图标来启动要使用的浏览器。
      图2. Sahi仪表板
      Sahi仪表板:您可以使用它来修改配置

      对于此示例,我们无需担心浏览器配置。 另外,Sahi还提供GUI工具供您启动浏览器。 运行start_sahi.bat/start_sahi.sh以启动它,然后单击浏览器图标以启动代理服务器和浏览器进程。
    3. 输入start_sahi.bat/start_sahi.sh ,这是在诸如Ant之类的构建工具的帮助下进行静默执行所必需的。

      注意:仅对于Internet Explorer(IE),您必须手动配置浏览器以使用Sahi的代理。 或者,您可以在启动Sahi代理服务器时使用Sahi提供的工具来设置浏览器的代理。 代理主机和端口是localhost:9999。 (可以通过<sahi_root> \ config \ sahi.properties修改端口。)

    记录Java格式的测试脚本

    Sahi提供了两种现成的脚本格式:Sahi和Java。 您可以在<sahi_root> \ config \ sahi.properties中修改默认选项Sahi。 Sahi格式是类似于Java脚本的格式,仅在Sahi Java脚本引擎中运行。 本文中的示例使用了更常见的Java格式,因为脚本可以轻松地与其他测试工具和大型测试项目的框架集成。 Java格式涉及可以与Junit和TestNG之类的工具集成的通用Java代码段。

    要进行简短测试:

    1. 打开您要测试的Web应用程序。 按ALT键,然后双击页面上。 (使用Firefox 3进行演示。)
    2. 选择Record ,如图3所示:
      图3.用于记录的Sahi控制器
      Sahi Controller的屏幕截图,其中记录了所有执行

      选择后,它将变为停止按钮。
    3. 在Web应用程序中执行一些操作,然后选择“ 停止” 。 记录您在应用程序中执行的所有步骤,如图4所示:
      图4.控制器记录的脚本
      Sahi Controller记录脚本的屏幕截图

      在记录操作时,您可以根据需要插入一些断言。 该工具还提供了一些插入选项,但是建议您手动添加它们。

    与Junit集成

    JUnit(单元测试框架)对于建立测试驱动的开发非常重要。 在许多情况下,您可以使用Junit格式创建测试脚本,以方便使用和报告。 前面的示例以Java格式记录了测试脚本。

    要以Junit格式格式化上述脚本,请在Eclipse中创建一个Java项目,然后添加位于<sahi_root> \ lib中的junit4库和sahi.jar。 创建junit4格式的测试脚本时,您必须启动Sahi环境所需的一些变量。 本文中的示例扩展了BaseTestCase.java,以便可以通过扩展此类来执行所有其他测试用例。

    demo4sahi类扩展了BaseTestCase类,以实现与Sahi代理相关的所有启动任务,然后验证两点:

    • 如果电子邮件格式为OK,则将获得OK
    • 如果电子邮件格式不正确,您将收到Error

    清单1显示了一个典型的Junit4格式的测试脚本。

    清单1. Junit4格式的测试脚本
    public class test4demo extends BaseTestCase {
    
        @Before
        public void setUp() {
            login();
        }
     
        @After
        public void tearDown() {
            logout();
        }
       
        @Test
        public void testDemo1() {
            browser.textbox("email").setValue("demo for sahi");
            browser.submit("Submit").click();
            assertTrue(browser.label("error").exists());
        }
       
        @Test
        public void testDemo2() {
            browser.textbox("email").setValue("demo@sahi.com");
            browser.submit("Submit").click();
            assertTrue(browser.label("ok").exists());
        }
    }

    要在无人看管的情况下运行测试脚本,您需要为Sahi运行时实现所有初始化和完成。 有四个基本的初始化部分,如表​​1所示:

    表1. Sahi环境的初始化
    BaseTestCase中的方法 描述
    createConn() 初始化SAHI_BASE_PATHUSER_DATA_PATH和浏览器类型,并创建一个浏览器进程。
    delConn() 清理浏览器进程,并将系统还原到初始状态。
    setIEProxy() 在执行测试之前设置IE代理。 仅用于IE。
    login()logout()和其他常用的高级实用程序 所有脚本的公共方法。

    作为所有测试脚本的父类, BaseTestCase将在运行时在所有其他方法之前调用createConn方法,因此它可以打开浏览器以模拟用户的操作。 清单2显示了BaseTestCase一些代码。

    清单2. BaseTestCase
    public class BaseTestCase {
    	protected Browser browser;
    	protected Proxy proxy;
    	protected boolean isProxyInSameProcess = false;
    	protected String browserType = "firefox";
    	@Before
    	public void createConn() throws Exception {
    		Configuration.initJava("f://Program/sahi", "f://Program/sahi/userdata/");
    		if (isProxyInSameProcess) {
    			proxy = new Proxy();
    			proxy.start(true);
    		}
    		browser = new Browser(this.browserType);
    		browser.open();
    	}
    	@After
    	public void delConn() throws Exception {
    		browser.setSpeed(100);
    		browser.close();
    		if (isProxyInSameProcess) {
    			proxy.stop();
    		}
    	}
    	public void login(){
    		browser.navigateTo("http://localhost:8080/demo");
    		browser.textbox("username").setValue("ligang");
    		browser.password("password").setValue("welcome");
    		browser.submit("Login").click();
    	}
    		/**
    	 * Setting IE's proxy during testing environment initialization
    	 * 
    	 * @param enable
    	 */
    	public void setIEProxy(boolean enable) {
    		try {
    			Runtime.getRuntime().exec(
    			new String[] {
    				SetEnv.sahiBasePath
    					+ "\\tools\\toggle_IE_proxy.exe",
    				(enable ? "enable" : "disable") });
    			Thread.sleep(1000);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
        ......
    }

    用Ant测试

    Apache Ant是一种常见的构建工具,尤其用于基于Java的项目。 Sahi框架包括可在build.xml文件中使用的Ant的JAR文件。 但是,此开箱即用的组件是为Sahi的结构设计的。 尽管您可能想使用Junit来设置整个基础架构,但是它不够灵活或不够强大。 为了对示例项目进行回归测试,编写了一个build.xml,其中包括:

    • 启动和停止Sahi代理服务器,如清单3和4所示:
      清单3.启动Sahi代理服务器
      <target name="start_sahiserver">
      	<echo message="starting sahi server" />
      		<java fork="true" spawn="true" classname="net.sf.sahi.Proxy">
      			<classpath>
      				<fileset dir="${sahi.dir}">
      					<include name="**/*.jar" />       
      				</fileset>
      			</classpath>
                  <arg value="${sahihome.dir}" />
                  <arg value="${sahiuser.dir}" />
              </java>
              <antcall target="proxyon" />
      </target>
      清单4.停止Sahi代理服务器
      <target name="stop_sahiserver">
      	<echo message="going to stop Sahi server" />
      	<sahi stop="true" sahihost="localhost" sahiport="9999" /v
      	<antcall target="proxyoff" />
      </target>
    • 打开和关闭IE代理设置,如清单5所示:
      清单5.打开/关闭IE代理
      <target name="proxyon">
      	<exec executable="${sahihome.dir}/tools/toggle_IE_proxy.exe">
      		<arg value="enable" />
      	</exec>
      </target>
      <target name="proxyoff">
      	<exec executable="${sahihome.dir}/tools/toggle_IE_proxy.exe">
      		<arg value="disable" />
      	</exec>
      </target>
    • 正在报告。

    这些动作可以分别执行,以便在Eclipse IDE中轻松调试。

    进阶主题

    在Web应用程序测试中,有效识别对象非常重要。 与许多其他测试工具不同,Sahi具有一些功能强大的API,可以在网页中定位对象。 表2列出了一些示例。 请参阅“ 相关主题”部分,以获取具有完整列表的联机文档的链接。

    表2.特殊的定位方法
    特征 方法 样例代码
    支持正则表达式 几乎所有元素的标识符 browser.link(/Link to .*/)
    基于DOM关系定位 在附近 browser.button("delete").in(browser.cell("item1")).click()

    browser.button("delete").near(browser.cell("item1")).click()

    根据位置关系进行定位 browser.button("delete").under(browser.cell("item1"))

    摘要

    本文探讨了Sahi(一种用于自动执行Web应用程序测试的工具)。 Sahi是一个开源工具,允许跨浏览器记录和重放。 在本文中,您了解了用于编写测试脚本的不同语言驱动程序。 一个示例应用程序和测试案例展示了如何格式化Junit的脚本以及如何使用Apache Ant进行测试。 还概述了Sahi的高级API。


    翻译自: https://www.ibm.com/developerworks/web/library/wa-sahi/index.html

    web自动化工具sahi

    展开全文
  • 使用Sahi测试Dojo应用

    2021-03-23 13:53:16
    在开始介绍Sahi之前,我们一起来看看在开发Web自动化测试(特指Web2.0应用)时常面临的两大技术问题。  一.Sahi简介  1.Web2.0应用测试的困境  在开始介绍Sahi之前,我们一起来看看在开发Web自动化测试(特指Web2.0...
  • Sahi 会自动去侦探您系统里安装的一些浏览器,并在 Sahi Dashboard 上显示出来,如果发现有一些其他的浏览器未被准确侦探出来,您也可以点击下面的“Configure”来进行配置添加进来。 接下来,通过点击 Sahi ...
     
    

    原文来自:https://www.ibm.com/developerworks/cn/web/1403_yangxb_sahi/

    Web 测试背景

    随着 Web 技术和互联网的发展,Web 应用产品越来越丰富,基于 Web 页面测试的需求与日俱增。在当前全球软件都在追求高效、敏捷的开发模式的大背景下,Web 自动化测试成为了新一波技术探讨和研究的热潮。因为传统的手工测试不仅效率低,并且测试质量受限于测试人员的一些情绪和心情。若当一个测试人员带着烦躁情绪来测这些繁杂的大量重复性工作,测试的质量令人担忧。更何况,当这项测试工作涉及到全球化方面的测试时,多语言版本的测试工作导致该测试工作量的成倍增加,这无疑是一项巨大的考验!

    Sahi 的特性和优势:

    当提及面向 Web 的自动化测试,相信许多读者会想到或者说使用过 Selenium、Watir 等工具,而对于 Sahi 就可能比较陌生。首先,让我们先来了解下 Sahi 工具。它是一款印度公司 Tyto Software 开发的成熟的开源 Web 自动化测试工具。Sahi 简单易用,能良好支持 Ajax 和 Web2.0 技术,同时适用于敏捷和传统的不同测试模式。那么,它与其他非常流行的 Web 自动化测试工具有哪些不同和优势呢?让我们将其与主流自动化测试工具 Selenium 和 Watir 来进行一番对比,请参考图 1:

    图 1. Sahi 与其他工具的对比
    Sahi 与其他工具的对比

    从上图的对比可以看出,Selenium 支持的脚本语言比较丰富,且自带 Selenium IDE 自动录制工具,Watir 执行的速度相对其他较快。而 Sahi 同样具备了自带的录制器,且支持几乎所有浏览器,且对 JS 支持较好,拥有页面等待判断机制,内置 Java 异常报告,支持 Ajax 等优势。

    下面,本文将详细介绍一下 Sahi 的几大优势。

    基于上下文的页面识别机制:

    大多数如 Selenium 等 Web 自动化测试工具或是自动化框架,都采用类似基于 DOM 的定位策略、Xpath 定位策略和 id、name、identifier 等页面元素定位策略。

    Identifier 定位是最普遍的一种定位方式,当不能识别为其它定位方式后,默认为 identifier 定位。在这种策略下,第一个使用 id 的页面元素将被识别出来,如果没有使用指定 id 的元素,那么将识别第一个名字与指定条件相符的元素。

    例如,identifier 识别 username 元素的定位策略:identifier=username

    Id 定位是在知道元素具体 id 特征的情况下的一种更精确定位。例如,定位页面元素 loginFrom:id=loginFrom

    name 定位方式是去识别第一个匹配名称属性的 UI 元素。如果多个元素拥有相同的名称属性,可以使用 value 过滤器来进一步优化您的定位策略。例如,定位页面元素为 username:
    name=username

    Xpath 定位是在 XML 中定位元素的方法,而 HTML 可以被看作是 XML 的一种实现。XPath 扩展了上面 id 和 name 定位方式,提供了绝对路径和相当路径两种查找方式。

    绝对路径:html/body/div[1]/div[1]/div[3]/div[1]/form/span/input[1]

    相对路径查找://div[@id='fm']/form/span/input

    然而,在实际的情况下,页面元素并非如预期般明确。一些动态页面的 DOM 树常常随着 Web 产品的更新而频繁改变。许多的元素值如 ID、Name 等在代码中并不是必须的,常常会缺省。并且,属性值往往不是唯一对应的,页面中有时会存在相同属性的元素。当缺省 id 值或是 Xpath 定位失效时,上述这几种查找定位方式往往显得无助和脆弱。

    Sahi 采用了一种主动查找的机制,它不受限于特定的元素属性。在没有 ID、Name 值的情况下,它可以使用一些如“title,value”等属性,这些都是页面可见的属性,所见即所得。同时,Sahi 会通过传入这些可见可识别的属性值,来按照 Sahi 预设的机制进行查找识别。Sahi 允许开发者对每一种元素设置不同属性和特定的查找顺序,包括那些自定义的属性名。所以 Sahi 相对于其他的 Web 自动化测试工具更灵活更开放。

    比如,_link(“valueName”)用来定位一个定义为“valueName”的 link,这里的 valueName 并不一定是 value 的属性值,也可以是它的 id、title 等。

    前面提到了 Sahi 主动查找的机制,那么它是如何去查找 DOM 节点下的特定元素的呢?Sahi 主要提供了三种基于上下文的元素 API:_in,_near 和_under。

    从字面意思上,我们不难理解,_in 是指在某个 DOM 节点下查找某个元素,这比 Xpath 的不管是绝对路径或是相对路径查找都来的灵活,不会因为 DOM 树内部结构发生变化而导致路径失效找不到元素的问题。

    _near 是指在某个元素附近查找相应设定规则条件的最近一个元素,这对于一个页面中有多个相同属性值的情况提供了一个很好的解决方式,使查找的范围更精确。

    _under 是指在某个元素下方开始查找,找到符合条件的最近一个元素,一般_under 都适用在具有相同偏移量的同一列中。下面,我们来看一个例子,加深对 Sahi 这种基于上下文识别查找机制的理解:

    图 2. 案例网页
    案例网页

    假设,在图 2 显示的 Web 页面的所有 text box 的 name=”q”,那么,Sahi 的侦探器通过一些标识来鉴别它们,如(_textbox("q"), _textbox("q[1]")和_textbox("q[2]"))。

    如果,我们要定位“Ruby for Rails”那一行的 text box,即_textbox("q[1]")。传统的元素识别会遇到多个相同属性元素的问题,即使是 Xpath 的定位方式也会因为在它前面加了一行新的数据而导致 Xpath 定位失败的情况。

    这时 Sahi 可以通过_near 这种方式来定位:

    1
    _textbox("q",_near(_cell("Ruby for Rails")))

    当要定位 check box 时,我们又会发现,“Ruby for Rails”这一行有“Recommend”和“Already own”两个 check box,为了更准确地定位,我们可以结合_under,例如:_checkbox(0,_near(_cell("Ruby for Rails")),_under(_cell("Recommend")))。

    如果在整个页面中存在多个这样的表格,我们还可以用_in 来进一步缩小范围,如:_checkbox(0,_near(_cell("Ruby for Rails")),_under(_cell("Recommend")),
    _in(_cell("Cost))).

    同时值得一提的是,Sahi API 中的 identifier 参数都支持正则表达式,例如,_div(/name.*/) 用来识别所有以某种预属性值是 name 开头的 div。

    隐式页面加载响应等待机制:

    现在越来越多的 Web 应用采用 Ajax 的应用技术,来支持网页数据的异步请求响应。当前一般的 Web 自动化测试工具没有一个智能的处理机制,来判断何时可以继续下一个操作。像 Selenium 等自动化测试工具通常会在脚本中人为来设定一个固定的等待时间。但这往往被证实不一定是准确的。实际测试中,人是很难准确判断每一个操作请求需要的合理时间数值。因为,等待时间设置过短,下一步操作在被测应用请求还未返回就执行了,或是由于网络因素使正常的响应时间变长,都可能导致测试过程找不到相应的页面元素,从而导致整个测试用例失败的情况。而如果把时间设置过长,又会造成在一些正常响应过程中的不必要等待的时间浪费,降低了测试效率。

    当然,一些测试人员会在自动化测试脚本中加入一些自定义的代码。通过轮询界面上某个指定元素,来判断请求响应是否返回,进而决定继续下一步操作或者是超时。但是,这样的查找过程会导致整个脚本代码变得非常臃肿,加大了开发的成本。更何况,在一个动态的页面找到指定的元素本身就不是一件容易的事。

    Sahi 内置了智能的页面等待机制,能够自动判断 Ajax 请求是否已经处理完毕,然后继续下一步操作。并且,这一点对于用户是“隐式”的,不需要增加额外的代码。

    Sahi 的工作原理:

    简单地说,用 Sahi 实现自动化测试有三步,录制,精炼脚本和回放,如下图:

    图 3. Sahi 工作的三个主要过程
    Sahi 工作的三个主要过程

    如上图 Sahi 就是先用其自带的录制工具,把大致的操作过程录制下来,并用 Sahi 代码记录下整个操作过程。随后,将自动生成的代码进一步的精炼和开发,调用一些外部 API 或编写特定代码来实现特定的操作。最后,用 Sahi 来回放保存好的最终脚本,Sahi 就将自动对 Web 应用进行定义好的测试操作。

    下面,本文将对这三个过程进行详细说明。

    第一步:录制

    图 4. Recording 过程的工作原理
    Recording 过程的工作原理

    Sahi 是通过运行为一个代理服务器,并通过设置浏览器代理为 Sahi 服务器。这样 Sahi 的脚本就能够通过 request 请求来注入到 JavaScript 里以访问 Web 页面中的元素。如图,可以很清晰的看到,Sahi 就是 Web 浏览器和 Web 服务器之间的一个中间代理。

    第二步:精炼脚本

    图 5. Refine Script 过程的工作原理
    Refine Script 过程的工作原理

    录制的脚本都是指定元素并唯一操作的,这时就需要对代码进行重构,抽取出核心的功能块,对其中的元素进行参数化处理,以实现重用。这样的数据可以从外部的 DB 或文件中读取而来。与此同时,也可调用 Sahi API 或外部 Java 等 API 实现特定的一些功能。

    第三步:回放

    图 6. Play back 过程的工作原理
    Play back 过程的工作原理

    Sahi 运行提炼好的脚本来自动化测试操作,并生成测试报告。

    Sahi 的安装部署与配置

    Sahi 虽然是 Tyto 公司的产品,但它的下载放在世界上最大的开源软件开发网站 SourceForge 上,可以通过点击这里下载。

    图 7. Sahi 下载
    Sahi 下载

    默认推荐是下载 install_sahi_xxx.jar,这是一个可执行文件,包含了 Sahi 的安装器和 Sahi 工具及其源代码。当然您也可以点击上图红框处“Browse All Files”来选择历史版本和一些免安装压缩文件。比如,选择只包含 Sahi 工具的 sahi_xxx.zip 文件,或者包含了 Sahi 和源代码的免安装压缩包文 件sahi-src_xxx.zip

    一般建议选择推荐的 Sahi 安装包文件即可,这样可以免去一些设置操作,并可以选择是否安装源代码。双击 jar 文件进行安装,如图:

    图 8. Sahi 安装
    Sahi 安装

    安装过程非常简单,待安装完成后双击桌面图标打开 Sahi 程序。打开程序先会出现一个 Sahi Dashboard,它能自动开启 Sahi 代理服务来启动浏览器,而不需要繁琐的代理服务器设置操作。当然如有需要,您也可以手动修改这些代理设置。

    图 9. Sahi Dashboard 界面
    Sahi Dashboard 界面

    Sahi 会自动去侦探您系统里安装的一些浏览器,并在 Sahi Dashboard 上显示出来,如果发现有一些其他的浏览器未被准确侦探出来,您也可以点击下面的“Configure”来进行配置添加进来。

    接下来,通过点击 Sahi Dashboard 上的浏览器图标按钮来启动相应浏览器。

    图 10. Sahi 启动 firefox 浏览器
    Sahi 启动 firefox 浏览器

    您可以输入起始测试的网页 URL 开始您的测试。如果测试的目标 URL 是 HTTPS 协议的,也可以点击“SSL Manager”来查看和管理 SSL 证书。

    图 11. Sahi SSL 管理界面
    Sahi SSL 管理界面

    按住 Alt 键并双击页面,将弹出 Sahi 控制窗口,如图 12:

    这个窗口相当于 Sahi 的主控台,在这里我们可以来录制和回放 Sahi 脚本,并编辑和管理脚本信息。

    图 12. Sahi Controller 录制
    Sahi Controller 录制

    在 Record 视图界面,输入一个脚本名称,点击“Record”,这时 Sahi 录制器便开始工作了。把鼠标移到浏览器上的目标网页上,您的所有操作过程都将被记录下来。您也可以自定义增加一个 Assertion。按住 Ctrl 键,把鼠标移动到目标网页的任意一个 HTML 元素,那么这个 Accessor 会自动出现在 Sahi 控制器中。这时,便可以自定制对该元素的操作。常用的操作有“点击”,“高亮”,“赋值等。同时,您可以通过“Append to Script”按钮来加到脚本代码中。录制完成后按“Stop”来结束整个过程。

    图 13. Sahi 自动生成脚本精炼
    Sahi 自动生成脚本精炼

    图 13 是一个简单的 Sahi 自动录制过程得到的 Sahi 脚本代码。其大致过程为:通过百度搜索“sahi”关键字,校验 Sahi 官网的 assert 是否存在,点击进入 Sahi 官网后继续校验 assert“Community Forums”,点击进入。通过前一节“Sahi Controller 录制”来完成这个操作过程,那么,您可以在默认目录“C:\Users\IBM_ADMIN\sahi\userdata\scripts”中找到先前命名为“Test_sahi”的脚本文件,我们可以将这段代码进行一个精炼和丰富的过程,比如在点击“Community Forums”链接前将它进行高亮操作:

    1
    _popup("Sahi Web Test Automation Tool")_highlight(_link("Community Forums"));

    或者您想在 Sahi 脚本代码中调用内置的 Java 类,例如:

    1
    2
    3
    functionprintThroughJava(s){
    java.lang.System.out.println("Through Java: "+s);}
    printThroughJava("Hi there");

    “Through Java: Hi there”将在 sahi 的命令行中输出。

    图 14. Sahi Controller 回放
    Sahi Controller 回放

    回放的时候,只需要在 Sahi 控制台上切换到“Playback”tab 页面,找到脚本存放的路径,下面就有开始、暂停和结束等按钮来进行操作。需要注意的是,开始以前必须给它设置一个“Stat URL”否则无法回放脚本。脚本回放的时候,在“Statements”里可以看到脚本运行的日志,比如操作步骤和一些错误信息等。

    通过点击右下角的“View Logs”可以查看详细的 Sahi 运行日志报告:

    图 15. Sahi 日志报告
    Sahi 日志报告

    由图可见,这样自动录制生成的脚本代码都是 Sahi 代码,我们可以在实际的 Java 项目中调用这些 Sahi 代码,以实现重用。其实,我们可以通过打开 sahi/config/sahi.properties 文件将其中属性设置为 controller.mode=java 来实现自动录制脚本的语言为 Java。值得注意的是,改为 Java 语言录制后的 Sahi 控制器和原来有所不同,它的界面更简洁,功能也更简单一些,没有了自动回放功能。因为,这更多是为了自动生成一些简单的脚本,来提高开发人员的开发效率。

    Sahi 的语法与示例应用

    Sahi 脚本是基于 JavaScript 的,而 Sahi 脚本是通过代理解析的,并能够在 rhino JavaScript 引擎中有效执行的。除了变量前的强制符$,它和 JavaScript 基本很像。

    Sahi 操作的代码声明是一句以分号结尾的普通代码行,如:

    1
    _click(_link("Login"));

    变量声明

    1
    var$variableName =value;

    或者先声明再赋值:

    1
    2
    var$variableName;// declaration
    $variableName =value;// assignment

    所有的变量都是以$符号开头的,关键字 var 用于局部变量,如:

    1
    2
    3
    var$username ="SahiTestUser";
    var$password;// declaration;
    $password =$username +"_password";// "SahiTestUser_password"

    函数声明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // function
    declarationfunctionlogin($usr,$pwd){
    _click(_link("Login"));
    _setValue(_textbox("username"),$usr);
    _setValue(_password("password"),$pwd);
    _click(_submit("Login"));
    }
    // function call
    login("sahi_user","secret");

    在一个 Sahi 代码文件中可以通过_include来包含调用其他 Sahi 文件,如:

    1
    _include("includes/common_functions.sah");

    由上面的语法可知,Sahi 是由下划线开头,带上操作或 HTML 元素,非常简单,清晰易懂,这些 API 基本都是能够看字面就能理解它的功能。

    Sahi 的 API 主要可以分为 3 类:浏览器访问 API浏览器操作 API混合 API

    浏览器访问 API:用于访问浏览器上的元素,并通过代理来注入这些 API 到浏览器中去。

    浏览器操作 API:主要来执行一些如点击、输入数据等操作,并在浏览器上声明这些元素的。

    混合 API:是既能在浏览器又能在代理上用于处理异常和操作文件和数据库的。

    由于 Sahi 对网页的访问方法的 API 很多,大家可以参考官方 API 文档进行学习。

    由上可知,Sahi 脚本都是很直接的声明和操作过程,在一个运行的代理上,由 Sahi Dashboard 来管理执行。如果我们希望能够将我们的 Sahi 自动执行的过程与我们其他的项目功能模块进行集成,那么把这些脚本转换成 Java 代码,又能用独立运行,是一件两全其美的事。

    接下来,本文将介绍一个用 Sahi Java Driver 来编写 Sahi 自动化脚本实现 Web 自动化测试的简单案例。

    首先,将 Sahi 的开发库包文件 sahi.jar 加入到 Java 项目中,该文件位于 Sahi 安装路径下..\sahi\lib\下,接下来就可以参考 Sahi 的 Java API 来开发自动化测试脚本。下面是一个简单的案例脚本:

    清单 1. 导入 Sahi 类包
    1
    2
    import net.sf.sahi.client.Browser;
    import net.sf.sahi.config.Configuration;

    设置 sahi 安装路径和 userdata 路径

    清单 2. 配置 Sahi 代理
    1
    2
    3
    String sahiBase = "C:/Users/ADMIN/sahi/";
    String userDataDirectory = "C:/Users/ADMIN/sahi/userdata";
    Configuration.initJava(sahiBase, userDataDirectory);

    您可以设置任意一种浏览器类型,也可以在 sahi/userdata/config/browser_types.xml 文件中自己创建定义

    清单 3. 配置浏览器并启动
    1
    2
    3
    String browserType = "firefox";
    Browser browser = new Browser(browserType);
    browser.open();
    清单 4. 操作代码示例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    browser.navigateTo("http://sahi.co.in/demo/training/");
    browser.textbox("user").setValue("test");
    browser.password("password").setValue("secret");
    browser.submit("Login").click();
    browser.textbox("q").setValue("2");
    browser.textbox("q[1]").setValue("9");
    browser.textbox("q[2]").setValue("4");
    browser.button("Add").click();
    System.out.println(":: browser.textbox(\"total\").value()=" + browser.< br >textbox("total").value());
    browser.close();// close the browser

    需要注意一点,除了 Firefox 浏览器,其他的浏览器都必须进行服务器代理配置,并在运行脚本前打开 Sahi 代理服务。

    实际测试结果表明,Sahi 代码简介,运行轻巧快速,而且它还能与外置的一些模块集成完成发送邮件,读取 PDF 文件等操作,功能非常完善。

    结束语

    综上所述,本文从当前 Web 自动化测试的困境出发,通过与其他开源 Web 自动化测试进行对比,介绍了 Sahi 的特性和优势。主要从基于上下文页面识别机制和智能页面加载响应等待机制两方面进行阐述。同时,详细介绍了 Sahi 的工作原理以及如何安装部署进行自动化测试开发的过程。总之,Sahi 提供了一套在多浏览器和多编程语言的开源自动化测试方案,解决了当前一些页面元素难找,页面响应不同步而导致测试失败的问题。Sahi 是一个能够快速部署,易于开发并且功能强大的开源 Web 自动化测试工具。由于篇幅所限,本文不能对 Sahi 所有的功能进行一一阐述,希望有兴趣的朋友一起研究探讨。

    相关主题


    展开全文
  • sahi api 离线文档

    2015-08-30 00:27:30
    解压后,点击文件夹里的index.html来查看api和使用指南
  • 在《使用Sahi测试Dojo应用》中,我们谈到了ITCL架构(应用对象层,任务层以及测试用例层)。本文向大家介绍如何编写一个Sahi的脚本以自动生成应用对象层的代码从而简化和加速Web自动化测试用例的开发。之所以有可能...
  • 环境 ubuntu 18.04 64bit sahi 0.8.4 yolov5 5.0 pytorch 1.7.1+cu101 前言 目标检测和实例分割是迄今为止计算机视觉中最重要的应用领域,各种目标检测网络层出不穷,然而,小目标的检测和在大尺寸图像上的推理在...

    环境

    • ubuntu 18.04 64bit

    • sahi 0.8.4

    • yolov5 5.0

    • pytorch 1.7.1+cu101

    前言

    目标检测和实例分割是迄今为止计算机视觉中最重要的应用领域,各种目标检测网络层出不穷,然而,小目标的检测和在大尺寸图像上的推理在实际应用中依然有诸多问题。SAHI (Slicing Aided Hyper Inference)就是用来帮助开发人员解决这些现实问题,它是一个轻量级的视觉库,可以在不重新训练原始检测模型(目前支持 yolov5mmdetection)的情况下提升小目标的检出率,而且 gpu 资源的使用并没有大幅提升。

    安装sahi

    库的安装非常简单,直接使用 pip 安装最新版本,执行命令

    pip install sahi

    yolov5检测

    sahi 使用的 YOLOv5, 这个我们前文已经介绍过了,参考 pip安装YOLOv5

    # 安装gpu版torch和torchvision,这里使用1.7.1版本
    pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
    
    # 安装其它依赖
    pip install yolov5

    找到 sahi 项目中的一张图片来测试

    # 下载模型
    wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s6.pt
    
    # 下载测试图片
    wget https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg
    
    # 命令行检测
    yolov5 detect --source small-vehicles1.jpeg --weights yolov5s6.pt

    f906aaaa881360cd91d104d77522cca0.png

    sahi

    可以明显看到图片上方的一些汽车目标没有被检测出来

    sahi

    首先安装2个基础依赖库

    pip install fiftyone imantics

    再来看下面的示例代码

    from sahi.utils.yolov5 import download_yolov5s6_model
    
    from sahi.model import Yolov5DetectionModel
    from sahi.utils.file import download_from_url
    from sahi.predict import get_sliced_prediction
    
    yolov5_model_path = 'yolov5s6.pt'
    
    # 下载模型
    download_yolov5s6_model(destination_path=yolov5_model_path)
    
    # 下载测试图片
    download_from_url('https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg', 'small-vehicles1.jpeg')
    
    # 使用的YOLOv5检测模型,使用gpu加速,置信度0.3
    detection_model = Yolov5DetectionModel(
        model_path=yolov5_model_path,
        confidence_threshold=0.3,
        device="cuda", # or 'cpu'
    )
    
    # 方法将待测试图片分成多个小图(默认是256x256),各自分别检测,最后进行拼接。小图框高宽重叠默认0.2,换算成像素就是256x0.2=51pixel。如果需要检测图片文件夹的话,可以使用方法predict
    result = get_sliced_prediction(
        "small-vehicles1.jpeg",
        detection_model,
        slice_height = 256,
        slice_width = 256,
        overlap_height_ratio = 0.2,
        overlap_width_ratio = 0.2
    )
    
    # 保存检测图片
    result.export_visuals(export_dir="result/")

    执行上面代码,得到

    fb88428e8aebe5b551dee681ecab04a3.png

    sahi

    可以看到,在同一张测试图片上,使用同样的模型,sahi 库可以让 yolov5 检测出更多的目标

    sahi 的切片推理原理如下图

    c1635cbf4aa0650ce046578706e0b9b9.gif

    sahi

    sahi 提供了命令行工具 sahi,使用它可以完成快速检测

    sahi predict --source small-vehicles1.jpeg --model_type yolov5 --model_path yolov5s6.pt --model_device cuda --export_visual --project results

    更多参数及使用帮助,参考 sahi predict --help

    添加新的检测模型

    目前的 sahi 只支持 yolov5mmdetection,但是,我们可以很方便的添加新框架的支持,你只需要在 sahi/sahi/model.py 文件中创建一个新的类,这个类继承自 DetectionModel,然后依次实现 load_modelperform_inference_create_object_prediction_list_from_original_predictions_create_original_predictions_from_object_prediction_list这几个方法即可,具体的可以参考 Yolov5DetectionModel 类的实现

    关联阅读

    YOLOv5的5.0版本

    pip安装YOLOv5

    最后,国庆7天长假马上就要到了,提前祝小伙伴们节日快乐!

    展开全文
  • 本文介绍了一个用于超大图片中对小目标检测的切片辅助超推理库SAHI。该库可直接用于现有的网络,而不需要重新设计和训练模型,使用十分方便。 作者:Fatih Cagatay Akyon 编译:CV技术指南 Github: ...

    前言 

    本文介绍了一个用于超大图片中对小目标检测的切片辅助超推理库SAHI。该库可直接用于现有的网络,而不需要重新设计和训练模型,使用十分方便。

    Github: https://github.com/obss/sahi

    目标检测和实例分割是迄今为止计算机视觉中最重要的应用领域。然而,小物体的检测和大图像的推理仍然是实际使用中的主要问题。

    下面是实例分割SOTA模型Cascade Mask RCNN的推理结果:

    图片

    MMDetection Cascade Mask RCNN 模型的标准推理结果。

    如图所示,未检测到上侧的小型汽车。

    有没有办法在不重新训练模型并且不需要更大的 GPU 内存分配的情况下检测这些较小的对象?

    本文将介绍SAHI(Slicing Aided Hyper Inference),帮助开发人员克服这些现实世界的问题。

    本文目录

    • 目标检测和实例分割简介、

    • SAHI的安装、

    • 使用SAHI 进行切片推理、

    • 使用SAHI 进行图像和数据集切片、

    • 使用SAHI添加对新检测框架的支持

    目标检测和实例分割简介


    A) 目标检测:目标检测是指识别和正确标记图像帧中存在的所有物体的方法。

    图片

    目标检测可视化。

    这大致包括两个步骤:

    1:目标定位:在这里,以尽可能紧密的方式确定边界框或封闭区域,以便定位图像中目标的准确位置。

    2:图像分类:然后将定位的目标送到标记目标的分类器。

    图片

    B) 语义分割:它是指将给定图像中的每个像素链接到特定类标签的过程。例如,在下图中,像素被标记为汽车、树木、行人等。然后使用这些段来查找各种对象之间的交互/关系。

    图片

    语义分割可视化

    C ) Instance Segmentation:在这里,我们将类标签与每个像素关联起来,类似于语义分割,不同之处在于它将同一类的多个对象视为单个对象/单独的实体。

    图片

    实例分割可视化

    SAHI的安装


    SAHI的项目地址:https://github.com/obss/sahi

    1. 通过 pip 安装最新版本:

    pip install sahi

    2. 通过conda

    conda install sahi -c obss
    

    现在可以在 Python 中导入和使用任何SAHI函数:

    from sahi import get_sliced_prediction
    

    使用SAHI 进行切片推理


    切片推理的概念基本上是;对原始图像的较小切片执行推理,然后合并原始图像上的切片预测。可以用下图表示:

    图片

    切片推理

    图片

    通过执行切片推理而不是标准推理,可以更准确地检测较小的对象

    在这里,我们将使用SAHI在此示例图像上展示切片推理演示:

    图片

    用于推理演示的示例图像

    首先导入教程所需的函数:

    from sahi .model import MmdetDetectionModel 
    from sahi .utils.cv import read_image,visualize_object_predictions 
    from sahi .predict import get_sliced_prediction
    

    MmDetectionModel是流行的MMDetection 框架的包装类。它可用于在任何MMDetection 模型上加载和执行切片/标准推理。

    read_image是一个实用函数,用于将任何图像转换为 RGB numpy 数组。

    get_sliced_prediction是执行切片推理的函数。

    visualize_object_predictions是用于可视化SAHI预测结果的实用函数。

    然后,我们需要通过定义所需的参数来创建一个DetectionModel实例:

    detection_model = MmdetDetectionModel(
        model_path=mmdet_cascade_mask_rcnn_model_path,
        config_path=mmdet_cascade_mask_rcnn_config_path,
        prediction_score_threshold=0.4,
        device="cuda"
    )
    

    需要 model_path和config_path才能成功加载任何模型。

    结果中将忽略分数低于predict_score_threshold 的预测。

    device参数指定推理设备,可以设置为cuda或cpu。

    加载图像:

    image = read_image(image_dir)

    最后,我们可以执行切片预测。在本例中,我们将在重叠率为 0.2 的 256x256 切片上执行预测:

    result = get_sliced_prediction(
        image,
        detection_model,
        slice_height = 256,
        slice_width = 256,
        overlap_height_ratio = 0.2,
        overlap_width_ratio = 0.2
    )
    
     
    

    在原始图像上可视化预测的边界框和掩码:

    visualization_result = visualize_object_predictions(
        image,
        object_prediction_list=result["object_prediction_list"],
        output_dir="",
        file_name="",
    )
    ipython_display(visualization_result["image"])

    图片

    切片预测结果

    使用SAHI 进行图像和数据集切片


    您可以独立使用SAHI的切片操作。

    • 例如,您可以将单个图像切片为:

    from sahi.slicing import slice_image
    slice_image_result, num_total_invalid_segmentation = slice_image(
        image=image_path,
        output_file_name=output_file_name,
        output_dir=output_dir,
        slice_height=256,
        slice_width=256,
        overlap_height_ratio=0.2,
        overlap_width_ratio=0.2,
    )
    
     
    
    • 或者,您可以从任何 coco 格式的数据集创建切片的 coco 数据集,如下所示:

    from sahi.slicing import slice_coco
    coco_dict, coco_path = slice_coco(
        coco_annotation_file_path=coco_annotation_file_path,
        image_dir=image_dir,
        slice_height=256,
        slice_width=256,
        overlap_height_ratio=0.2,
        overlap_width_ratio=0.2,
    )
    
     
    

    使用SAHI添加对新检测框架的支持


    SAHI库目前仅支持MMDetection 模型。但是,添加新框架很容易。

    您需要做的就是在继承自DetectionModel 类的model.py 中创建一个新类。您可以将MMDetection wapper作为参考。(这几个文件都在SAHI的项目中可以找到)

    作者:Fatih Cagatay Akyon

    编译:CV技术指南

    原文链接:

    https://medium.com/codable/sahi-a-vision-library-for-performing-sliced-inference-on-large-images-small-objects-c8b086af3b80

     欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

     在公众号中回复关键字 “技术总结”可获取公众号原创技术总结文章的汇总pdf。

    其它文章

    CV技术指南--精华文章汇总分类

    Softmax 函数和它的误解

    资源分享 | SAHI:超大图片中对小目标检测的切片辅助超推理库

    计算机视觉中的图像标注工具总结

    Batch Size对神经网络训练的影响

    PyTorch 中的 ModuleList 和 Sequential: 区别和使用场景

    神经网络超参数的调参方法总结

    使用 Ray 将 PyTorch 模型加载速度提高 340 倍

    计算机视觉中的图像标注工具总结

    轻量化模型系列--GhostNet:廉价操作生成更多特征

    ICCV2021 | MicroNet:以极低的 FLOPs 改进图像识别

    CVPR2021 | 重新思考BatchNorm中的Batch

    ICCV2021 | 重新思考视觉transformers的空间维度

    CVPR2021 | Transformer用于End-to-End视频实例分割

    ICCV2021 |(腾讯优图)重新思考人群中的计数和定位:一个纯粹基于点的框架

    卷积神经网络的复杂度分析

    2021年小目标检测最新研究综述

    计算机视觉中的自注意力

    综述专栏 | 姿态估计综述

    漫谈CUDA优化

    为什么GEMM是深度学习的核心

    使用深度神经网络为什么8位足够?

    经典论文系列--胶囊网络:新的深度学习网络

    经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷

    如何看待人工智能的泡沫

    使用Dice loss实现清晰的边界检测

    PVT--无卷积密集预测的多功能backbone

    CVPR2021 | 开放世界的目标检测

    Siamese network总结

    计算机视觉专业术语总结(一)构建计算机视觉的知识体系

    欠拟合与过拟合技术总结

    归一化方法总结

    论文创新的常见思路总结

    CV方向的高效阅读英文文献方法总结

    计算机视觉中的小样本学习综述   

    知识蒸馏的简要概述    

    计算机视觉中的特征金字塔技术总结

    Siamese network总结

    计算机视觉中的注意力机制技术总结

    文字识别OCR开源框架的对比--Tesseract vs EasyOCR

    计算机视觉专业术语总结(一)构建计算机视觉的知识体系

    归一化方法总结

    计算机视觉的高效阅读英文文献方法总结

    计算机视觉中的小样本学习综述

    知识蒸馏的简要概述

    损失函数技术总结

    经典论文系列 | 重新思考在ImageNet上的预训练

    展开全文
  • sahi】1.1 安装sahi

    2018-04-23 18:41:39
    本文德龙/克勤原创,此处只做整理,自用时方便查看 0. 本文所有的安装包 链接:https://pan.baidu.com/s/1S8E9L58TAeSZTXMwc-7wdQ 密码:2uin 1.官方文档 ...sahi是基于java编写的,所以需要...
  • sahi_v50_20141105.jar

    2015-01-13 18:48:41
    Sahi Pro is a mature, business-ready tool for automation of web application testing.
  • sahi简单操作总结一

    千次阅读 2017-07-17 00:03:15
    sahi是一款非常强大的自动化脚本工具,入门简单,功能实用。可是之前一段时间在国内网站上苦苦寻找相关的使用手册都没有找到,只能翻墙出去和国外大神偷学技能了。现在分享在博客上,希望能帮助大家入门学习sahi,...
  • Sahi

    2019-10-06 01:48:04
    Sahi http://sahi.co.in/w/Tyto Software creates innovative products and solutions to simplify web application automation.Sahi, our fl...
  • Watir vs Selenium vs Sahi

    2018-11-16 16:41:27
    Watir vs Selenium vs Sahi
  • 下载并安装Sahi OS 下载脚本,将其解压缩并移至userdata / sahi-demo目录 将sahi-demo添加到userdata / config / userdata.properties中的scripts.dir属性 运行Sahi仪表板 运行选定的浏览器并打开Sahi Controller ...
  • python爬虫获取sahi报告

    2018-08-14 09:33:06
    将excel.py文件和GetReport.py存放在同一个目录下,修改GetReport.py中的reportURL变量值后,执行该文件爬取Sahi服务器的测试报告。 Excel操作包:excel.py #!/usr/bin/env python # coding=utf-8 # 需要xlrd和...
  • 本文转载自: IBM DeveloperWorks https://www.ibm.com/developerworks/cn/web/1403_yangxb_sahi/Sahi 是 ...Sahi 运行为一个代理服务器,并通过注入 JavaScript 来访问 Web 页面中的元素。Sahi 支持 HTTPS 并且独立
  • Sahi 是一款优秀的开源 Web UI 自动化测试框架。Jenkins 是业界众所周知的持续集成工具。Docker 是一个开源的应用容器引擎,一颗冉冉升起的技术新星。本文通过一个实例,介绍如何将三者集成构建 Web UI 自动化测试...
  • Sahi使用_in,_near,_under,_leftOf,_rightOf&gt;等关系API来唯一标识元素, 不需要循环逻辑来查找类似结构,树节点等表中的元素。 c. Sahi自动遍历帧,iframe和ShadowDOM。 d. 支持浏览器弹出窗口和.....
  • 1.打开sahi 打开桌面sahi的客户端程序,会提示允许使用修改IE代理 (或者点击下图的 system proxy 的on开关),允许就好了, 然后就会弹窗一个选择浏览器的地方。然后点击SSL(启用SSL就可以录制https的网站)。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 531
精华内容 212
关键字:

Sahi