zoukankan      html  css  js  c++  java
  • 基于pywinauto的Windows GUI自动化测试实践(1)

    摘要:自动化的任务并不仅仅局限于某一平台或某一端,当然,不可否认的是,基于Web的B/S系统自动化成本相对较低,当然,这个低也仅仅是相对于自动化而言的。自动化从来就不是一个省钱的工具

    一、从B/S到C/S

      在web端,我们有完整的一套开源工具——Selenium,辅以Java、Python甚至是Ruby都能够很好的完成自动化测试任务,体系也相对成熟,即使对于中小企业而言,组建一个小型的自动化测试团队,也能在一定程度上确保企业级B/S服务系统的质量。即使不用Selenium,也有茫茫多工具供君选择,何其乐哉。公司的Web自动化测试已经走过了八个年头,从QTP转到Selenium,至今,Selenium也早已迈入了3.0时代,从Selenium 到Selenium Grid 再到Data Driven乃至跨浏览器,跨平台,过渡的总不会那么生硬。但是到了Client,一切似乎都要重新开始。

    二、Windows平台的工具选择

      AutoIT、Pywinauto也算是硕果仅存的两个Windows平台自动化测试工具了吧, AutoIt,不用多说,如果你想要更多了解的话,请点击这里 。这里主要来看Pywinauto的测试实践。

      相对Selenium的多语言支持,只能用python的pywinauto显得略微单薄,但也不能过多非议,毕竟人家是pywinauto而不是javawinauto或者rubywinauto什么的。这里照搬官网的简介:pywinauto is a GUI automation library written in pure Python and well developed for Windows GUI. At its simplest it allows you to send mouse and keyboard actions to dialogs and controls on both Windows and Linux, while more complex text-based actions are supported on Windows only so far (Linux AT-SPI support is under development).

      也就是说,它呢,是使用python编写的用于GUI自动化测试的开源框架,另外明确的说了,它能够支持在Windows平台和Linux平台,对客户端应用进行鼠标和键盘输入、控制等一系列命令。当然,Linux平台还是在开发中,尽管个人觉得发布的可能性趋近于tan90°。 言归正传,在对pywinauto的探索中,pywinauto是作为辅助作用的,也就是说,在web端进行一系列操作之后,要利用pywinauto得到客户端的状态信息,用来验证操作的正确性。

      例如,一个产品包括web端和Windows客户端,为用户提供远程软件管理功能。大概是下面这个样子:

    那么,当我们选择在web端在线安装应用,服务器会向本地客户端发送命令,客户端从第三方下载并控制本机自动安装所选项目,在这一过程中,数据从web端流转到客户端,自然的,在验证的过程中需要确定客户端的接受和执行情况以及最终的web端的安装状态正确与否。因此,在web端和第三方平台,我们可以选择用Selenium进行自动化测试,而对于客户端,我们只能选择pywinauto这类GUI自动化测试工具。

    三、Java和Python的数据交互

      在web端,我们采用的是Selenium+Java的方式,因而在python和java的交互和相互调用上会有一点点麻烦,在这里,我们用jython这个包来实现,在pom文件中加入以下内容即可:

    1     <dependency>
    2         <groupId>org.python</groupId>
    3         <artifactId>jython</artifactId>
    4         <version>2.5.3</version>
    5     </dependency>

    我们首先创建一个最简单的python来测试交互的可用性:

    1 def adder(a, b):  
    2     return a + b  

    接下来,在Java代码中调用这个Python方法:

     1 package jqi.JavaAndPython.Intergration;
     2 
     3 import org.python.core.PyFunction;
     4 import org.python.core.PyInteger;
     5 import org.python.core.PyObject;
     6 import org.python.util.PythonInterpreter;
     7 
     8 public class JAndPUnify {
     9     public static void main(String[] args){
    10         PythonInterpreter interpreter = new PythonInterpreter();  
    11         interpreter.execfile("C:\Users\jqi\Desktop\AEMUI\input.py"); 
    12         PyFunction func = (PyFunction)interpreter.get("adder",PyFunction.class);  
    13           
    14         int a = 2010, b = 2 ;  
    15         PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));  
    16         System.out.println("anwser = " + pyobj.toString());  
    17     }
    18 }
    JAndPUnify

    运行Java程序即可看到:

    anwser = 2012

    说明我们成功调用了python脚本。那么数据的流向和方式的问题就解决了,接下来所要做的只是针对client编写python脚本。

  • 相关阅读:
    BZOJ3098 Hash Killer II 【概率】
    BZOJ4010 [HNOI2015]菜肴制作 【拓扑排序 + 贪心】
    洛谷P4364 [九省联考2018]IIIDX 【线段树】
    洛谷P4363 [九省联考2018]一双木棋chess 【状压dp】
    洛谷P2664 树上游戏 【点分治 + 差分】
    BZOJ1189 [HNOI2007]紧急疏散evacuate 【二分 + 网络流】
    BZOJ1068 [SCOI2007]压缩 【区间dp】
    BZOJ4033 [HAOI2015]树上染色 【树形dp】
    BZOJ4819 [Sdoi2017]新生舞会 【01分数规划 + 费用流】
    排序
  • 原文地址:https://www.cnblogs.com/Seven13G/p/7767372.html
Copyright © 2011-2022 走看看