有赞测试分享读后感

       看完有赞的测试团队建设与测试日常工作,让我对测试有了一个新的认识。
       之前也经历过几家公司,相对来说,对测试的重视程度都不高,都只是开发完成之后,将代码提到测试环境,然后测试人员根据需求文档,主要对功能进行测试。如果有必要会做简单的性能测试与自动化测试。
但是有赞对测试团队却很重视,他们的测试团队负责相关项目具体测试工作、自动化建设、合并发布流程管控、设计开发线上业务级别可用性监控、同时在研发提升测试效率的工具。 相对的,他们对测试技能要求也很严格,需要具备白盒测试能力、CodeReview能力、业务功能测试。另外,测试的规范性也很重要,有赞的根据项目来划分测试资源很有借鉴意义。我们也可以效仿他们,对每个项目进行评估,需要投入几个测试,测试负责的业务线,哪些项目测试只负责写完测试用例,后续执行由开发自己执行即可。测试只需要在上线前走一下checklist即可。对于一些小型项目,开发自行搞定即可。再次,有赞的测试方案很规范。可以让大部分公司直接拿来使用。 除此之外,有赞在性能测试平台,接口测试平台,QA测试平台等方面都很成熟。
        相对于有赞,首先,我们在白盒测试能力、CodeReview能力这两方面都比较欠缺。其次,我们测试的规范性也不健全,每次提测代码质量不高,这个其实可以通过项目规范解决问题。比如,开发先自己执行测试用例,没有问题了再提测,测试只需要走一下checklist即可。我们测试现在花费了过多的时间在跟开发一起走主流程,往往主流程需要走2天,然后正式再开始测试。这样导致接口测试,性能测试,复杂业务流程测试都没有时间进行。再次,有赞的测试方案我们可以直接使用。如下:
33
       面对如此大的差距,我们只有一步步慢慢来。现在我们的自动化测试平台robotframework已经成功使用起来,同时doclever接口平台也正在渐渐使用起来。其实再大的骨头我们只要有了目标都可以慢慢啃下来。后续如性能测试,接口测试,兼容性测试等方面的建设,也需要找准方向,慢慢开始进行。我相信我们QA部门可以顶住压力,创造一个不一样的明天。

《有赞.测试团队介绍》读后感想

何为质量把控?如何进行有效且高效的质量把控?在读这篇文章之前,我对测试的认识还停留在简单的理论认识阶段,了解了有赞测试团队的工作后,对测试组的工作目标有了更加清晰的认识。这个团队对质量把控做到了业内领先的地步。

先来看看他们的项目协作图(与我们团队相关的协作工作日常可以做个比较)

15029627816175

先说协作,他们有“提测用例”,用来检查提测质量,约束研发的产品质量;再说流程,他们有“测试评审”,对测试用例的设计进行检查和规范(他们已经积累了很多规范),将测试这个事情提高到一定高度。此图中没有画出来,但有赞和我们一样,测试组一样会参与需求评审。

再说自动化测试,最打动我的就是这块,此前也看到很多关于自动化测试的理论文章,但没有看到哪一家真的可以落地到这么好的,在实施层面,有赞在自动化测试这块做的很不错。下面是有赞.自动化分布图:

2

这个金字塔下面还有一层,是mock测试,这图没有列出来。

让测试来负责发布,而不再是运维来发布,我觉得这个在当下来说,是非常正确的,符合质量把控原则。这并不是否认运维同事的工作,而是运维同事搭建好自动化发布平台后,有测试组来操作和管理发布。关于他们的发布系统,也有一个亮点,就是合并分支发布。这对“单项目”高频发布的发布系统来说,是个必然的产物,但也是非常有用的产物。

前面都是理论,但工欲善其事必先利其器,没有好用的工具,想的再美好也是瞎掰。有赞在各个环节上,都自研了很多有用的系统,不得不说他们的测试研发团队很强大。

数据,对于质量把控来说,犹如眼睛一般重要。没有数据汇总,没有数据分析,质量把控就会成为盲人过河一般只能摸索前进。这块也是和工具一样的重要。

1505283244927

最后,附上原文链接:有赞.测试团队介绍

有赞测试团队介绍读后感

感觉有赞的业务和我们有相似之处,他们的自动化建设、测试工作、监控等对于我们来说有很多可以借鉴的地方。各种效率工具覆盖到了开发测试监控的各个阶段,节省了很多重复性的劳动。能让六百多人的团队有条不紊地工作,确实很了不起。希望我们将来也能做到他们那样。

有赞测试分享读后感

认清差距,方能追赶

通过有赞测试团队的分享,我深受鼓舞,指明了我们测试组未来的发展方向,让我知道一个测试团队可以做到这么强大。下面我简单分析一下我的看法

1.有赞是一个纯粹的互联网企业,在开发、技术方便很重视,这一点,从测试人员质量就可以看的出来,需要具备白盒测试能力、CodeReview能力、业务功能测试的测试工程师,而且必须是BAT团队出来的。这点我想我们是可以看得出差距的。可是这种人员的差距怎么缩小呢?假设,我们有两种方法:1.统一招BAT团队的资深测试工程师,2.选团队最优测试工程师给整个团队业余时间培训,公司给与支持,然后培养成具备这种能力的工程师。那么我想,第二种方法是最优解,培训成本较低、人力成本低,现有测试人员业务熟练。可以快速介入测试。

2.对于测试日常工作分配,我觉得可以学习有赞团队,将项目细分成标准需求项目、技术重构项目、优化项目、缺陷修复项目。第一、对于标准需求项目或者跨多个业务的项目,一定会有测试投入;第二、技术重构改造项目,这种一般是单应用或者极少应用改造,但不改变业务使用规则。这类项目测试同学只要通过doclever设计测试用例即可,用例的执行由开发自行完成。测试同学要做的就是对新系统进行自动化覆盖。如有需要,测试会在上线前做质量check。 第三、对于线上反馈、缺陷修复项目,如如果开发的自测场景与测试同学的测试场景基本一致,那开发自行搞定即可;或者测试同学把需要特别关注的或者风险点给开发同学简单介绍。对于有差异的,测试同学把差异点向开发同学描述清楚即可。

3.对于测试流程,如果是现在功能测试为主,那现在的测试流程相对之前,还算比较完整合理,但是提测质量不高,所以我们也需要在接口完成时介入编写接口自动化用例,但是有赞团队所说的:“需求分析后,需要输出对象生命周期图、业务时序图、用例图、待确认的问题、风险点清单。并就相关问题、风险与产品、开发进行多次沟通,直到问题得到明确答复。”对于敏捷开发,那启动开发的时间其实很紧急,没有那么多时间去评审风险和业务缺陷,流出更多是时间去写自动化用例兼其他测试项目的功能测试。

4.对于提测分支冲突问题,我们也可以学习有赞团队的搭载公交车发布模式,每一个服务都可以拉出一个test测试分支,所有开发提测时都把自己代码合并到test分支,以后解决bug也要同步自己分支,如果没问题了,可以把自己分支合并master,可以独立上线。

5.对于测试,分为三部分,第一部分是单元测试,这部分属于白盒测试,介于测试代码能力不足,这部分可以由开发自测;第二部分为接口自动化测试,这部分属于灰盒测试,测试会通过开发在doclever写的接口文档编写接口自动化,可以由测试介入进行接口集成测试;第三部分为UI自动化测试,由robotframework实现,同时做手动UI测试,验证功能展示效果和一些边界测试,测试完成后,验收通过上预发布测试,测试通过,上线上正式环境后通过UI自动化测试实现业务全覆盖。

6.对于压力测试,介于对服务器的要求高,所以我们最后通过第三方压测平台实现,如果后期资源到位,可以使用压测工具在测试环境实现。

7.对于线上环境监控,主要又运维来做好,比如宕机监控、服务挂点监控,sql超时监控等等。

好了,罗马不是一天建成的,我们只要重视了,并且有推进,就一定会有成绩,虽然我能力自愧不如,但是我愿意去学习,和测试组一同成长。

 

jenkins的一些其他必要设置(三)

接上次的继续聊…
这次说说jenkins的一些配置
1、先说系统管理中的系统设置
1
点击系统管理后,显示页面,在此页面中可配置需要的JDK、Maven、git等基本信息
2
配置JDK有两种方式:第一种、选择电脑本身已安装的jdk路径
17
第二种、可选择自动安装
3
在git插件安装好后,在此页面会有git配置栏
4
2、接着来配置一个在构建之后自动化发送邮件的基础设置
5
此处设置jenkins地址以及发送邮件人的邮箱
6
点击高级按钮,页面展开,填写以上必要的信息。可使用下边的邮箱验证来进行邮箱是否是通的
7
在具体的项目中,增加构建步骤中选择邮件设置(该选项也是在安装了对应的插件才显示的)
Project Recipient list 一栏填写被发送人的邮箱名称
8
点击advanced Settings出现高级设置
9
添加一项Recipient list后点击高级
10
在此填写相关人员的邮箱名称,以及发送邮件的标题和内容和相应的执行结果页面,点击应用保存生效,此时在giant项目执行之后,就会发送相应的邮件来通知相关人员,此次构建是否成功
3、Configure Global Security设置一项
11
选择随机选取,或者可以指定端口,默认是禁用,这会导致一个问题,随后来解释…
保存后
4、进行管理节点的设置
我们在日常工作中,所看到的晋中、秦皇岛…机器,这这就体现为节点设置,我们现在新建一个节点
进入管理节点后,点击左侧新建节点
12
输入对应的节点名称,选择第一项,点击OK 如果有需要可选择第二项来进行复制
13
填入远程工作目录,启动方法选择…java web start,这个选择项呢是在Configure Global Security设置中选择了指定端口或者随机端口才会出现的,这个有什么作用呢,接着看…
点保存之后,双击该节点
14
此处有两种方式来使用该节点
第一种,复制截图中下边的命令到指定的.bat文件中,可启用该节点(可用于windows或者linux)
15
第二种,点击Launch下载该节点的slave-agent.jnlp文件到指定的地方,启用(适用于windows系统)
16
这两方式都可以指定使用该节点的项目在指定的机器来运行项目。
下次再会…

testng套件测试

测试套件的测试是为了测试软件程序的行为或一系列行为的情况下,是一个集合。在TestNG,我们不能定义一套测试源代码,但它代表的套件是一个XML文件执行特征。这也允许灵活的配置要运行的测试。套件可以包含一个或多个测试和被定义由标签。 
testng.xml中有根标签。它描述了一个测试套件,这反过来又是由多个区段组成。 
下表列出了所有的可接受合法属性。 
属性:name 描述:此套件的名称。这是一个强制性的属性。 
属性:verbose 描述:这个运行级别或冗长。 
属性:parallel 描述:由TestNG 运行不同的线程来运行此套件。 
属性:thread-count 描述:使用的线程数,如果启用并行模式(忽略其他方式)。 
属性:annotations 描述:在测试中使用注释的类型。 
属性:time-out 描述:默认的超时时间,将用于本次测试中发现的所有测试方法。 
以下例子为有两个Test1 & Test2测试类一起运行测试套件。

创建一个类
创建一个Java类进行测试 MessageUtil.java 在 C:\ > JUNIT_WORKSPACE
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add “Hi!” to the message
public String salutationMessage() {
message = “Hi!” + message;
System.out.println(message);
return message;
} }

创建测试用例类
创建一个Java类文件名 Test1.java 在C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
public class Test1 {
String message = “Manisha”;
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println(“Inside testPrintMessage()”);
Assert.assertEquals(message, messageUtil.printMessage());
} }

创建一个Java类文件名 Test2.java 在C:\ > TestNG_WORKSPACE import org.testng.Assert; 
import org.testng.annotations.Test;  
public class Test2 { 
    String message = “Manisha”; 
 
    MessageUtil messageUtil = new MessageUtil(message);  
  
    @Test 
    public void testSalutationMessage() { 
        System.out.println(“Inside testSalutationMessage()”);        
 message = “Hi!” + “Manisha”; 
        Assert.assertEquals(message,messageUtil.salutationMessage());     
} } 

写入testng.xml 在C:\ > TestNG_WORKSPACE ,将包含标签如下: 
 
 
   
     
 
             
   
 
        
 
             
   
 
   
 
Suite1 包括 exampletest1 和 exampletest2. 

所有Java类编译使用javac。 
C:\TestNG_WORKSPACE>javac MessageUtil.java Test1.java Test2.java 
现在运行 testng.xml,将运行提供的测试用例类中定义的测试用例。 
C:\TestNG_WORKSPACE>java -cp “C:\TestNG_WORKSPACE” org.testng.TestNG testng.xml 
验证输出。 
Inside testPrintMessage() Manisha 
Inside testSalutationMessage() Hi!Manisha 
=============================================== Suite1 
Total tests run: 2, Failures: 0, Skips: 0 =============================================== 
您也可以检查测试输出文件夹;下Suite1文件夹中,可以看到两个HTML创建的exampletest1.html 和 exampletest2.html 

linux中搭建redis服务器

1.在虚拟机新建一个目录,比如/usr/local/redis

2.在目录下执行:

wget http://download.redis.io/releases/redis-2.8.17.tar.gz

解压:tar –zxvf redis-2.8.17.tar.gz

解压完成后,执行make命令

cd /redis/redis-2.8.17

make

make完成后,进入src目录,发现多了两个redis-server 和redis-cli文件

启动redis:cd/src–>./redis-server

启动redis后如图FA@TBU3YH9IW[YMT7~6D3PX

启动redis客户端:另外打开一个xshell窗口,进入安装目录下的src路径(cd /usr/local/redis/redis-2.8.17/src)执行命令

./redis-cli启动后如图:

0BZSOWMQ%7S2LNW3SC4N4AJ

验证连接:

ping

结果应该显示PONG

set name nihao

get name

结果应该是‘nihao’

如果上面一切都顺利,说明已经搭建成功了,然后就是关闭redis客户端

quit或者exit

然后关闭redis服务:./redis-cli shutdown

有没有很简单?

 

 

软件测试的心理

角色决定工作内容和承担的任务。测试工程师的角色应该承担什么任务呢?这没有统一的答案。因为,这与软件公司的规模,软件项目管理制度,公司领导和项目经理的管理风格,以及具体软件项目自身的特点有很大关系。而且,测试工程师也有普通和高级之分。

设置软件测试环境,安装必要的软件工具。运行软件,发现和报告软件缺陷或错误。尤其需要快速定位软件中的严重的错误。对软件整体质量提出评估,确认软件达到某种具体标准

以最低的成本,最短的时间,完成高质量的测试任务; 在这其中,最重要的是要明确,程序员的责任和目标。在执行任何具体测试任务前,都要在项目组内对于责任和目标达成共识,以免带来后续工作的相互推诿。

另外一个值得注意的方面就是工作效率和质量,或许高级测试工程师与普通测试工程师的主要区别在于高级测试工程师可以更快地发现更多软件中的严重错误。对此,有什么可以借鉴的诀窍吗?请尝试以下方法,保证不会是您失望。

首先测试程序的核心功能,然后测试辅助功能。

首先测试功能,然后测试性能。

首先测试常见情况,然后测试异常情况。

首先测试经过变更的部分,然后测试没有变更的部分。

首先测试影响大的问题,然后测试影响小的问题。

首先测试必须测试的部分,然后测试可选或没有要求测试的部分

需要强调的一点是,无论你是多么高级的测试工程师,都要明白无论测试需要的工具多么复杂,测试步骤多么冗长,测试工程师在软件项目开发中始终都是扮演服务员的角色,这是由测试工作的特点决定的。任何服务都有被服务对象—客户,软件测试工程师的服务对象有哪些呢?

最重要的客户是软件的用户。测试工程师需要站在客户的使用和需求角度测试软件,报告问题。项目经理也是客户。测试工程师需要报告测试工作进度和发现的问题,尤其是严重的问题。程序员是最经常打交道的客户。为了便于程序员重复报告的错误,尽量提供良好的软件问题报告,以便程序员可以更快的修复软件错误。技术文档工程师、市场开发人员和技术支持工程师也都是测试工程师的服务对象。

前文已经指出测试工程师应该明确角色,明确任务和责任。知道哪些是自己份内的事,哪些是不属于自己的事。一定要尽最大努力完成份内的事,不要做不属于自己的事情,以免弄巧成拙。 为了更好的扮演软件测试工程师的角色,尽量避免犯下面的错误:

承诺完成测试的软件没有质量问题

软件测试只是保证质量的一种方法,软件测试工程师的工作不会直接提高软件质量,因为绝大多数软件错误都需要程序员修复。软件测试只能证明软件存在错误,不能保证软件没有错误,不可能找出全部软件错误。个人的能力和对质量的影响范围很小,软件质量的提高要靠软件项目团队全体成员的共同努力。

承担软件的发布权利

不要因为软件中存在还没有修复的错误,而试图提出更改软件发布的计划。也不要认为已经完成了测试计划,自己决定可以发布软件。因为,改变软件发布计划可能要失去进入市场的良机和很多客户,对此造成的经济和公司市场的损失将不是测试工程师能够承担的。另外,软件发布后,如果用户发现了新的软件错误,公司领导或项目经理可能将过错加在软件测试人员的头上,因为他们同意发布软件。通常软件发布的权利由产品经理、项目经理、测试经理、市场经理共同集体讨论决定。

扮演过程改进成员的角色

软件测试工程师必须报告错误,有时也要分析错误的类型、特征和产生错误的原因。但是,不要主动提出改进软件过程的具体改进措施,更不要直接干涉程序员的工作方式,以免出力不讨好,影响今后的愉快合作。软件过程改进的方法是软件质量控制部门的事情,这是他们的本职工作。

客观独立的测试心理

采用独立测试方式,无论在技术上还是管理上,对提高软件测试的有效性都具有重要意义。

客观性
对软件测试和软件中的错误抱着客观的态度,这种客观的态度可以解决测试中的心理学问题,既能够以揭露软件中错误的态度工作,也能不受发现的错误的影响。经济上的独立性使其工作有更充分的条件按测试要求去完成。
专业性
独立测试作为一种专业工作,在长期的工作过程中势必能够积累大量实践经验,形成自己的专业优势。同时软件测试也是技术含量很高的工作,需要有专业队伍加以研究,并进行工程实践。专业化分工是提高测试水平,保证测试质量,充分发挥测试效用的必然途径。
权威性
由于专业优势,独立测试工作形成的测试结果更具信服力,而测试结果常常和对软件的质量评价联系在一起,由专业化的独立测试机构的评价,更客观、公正和具有权威性。
资源有保证
独立测试机构的主要任务是进行独立测试工作,这使得测试工作在经费、人力和计划方面更有保证,不会因为开发的压力减少对测试的投入,降低测试的有效性,可以避免开发单位侧重软件开发而对测试工作产生不利的影响。

通过-Rational-AppScan 如何应对网站攻击

IBM-Rational-AppScan 正是应对这一挑战的利器。

如下图所示,Rational AppScan 工作方式比较简单,就像一个黑盒测试工具一样,测试人员不需要了解 Web 应用本身的结构。AppScan 拥有庞大完整的攻击特征库,通过在 http request 中插入测试用例的方法实现几百中应用攻击,再通过分析 http response 判断该应用是否存在相应的漏洞。整个过程简单易懂高效,测试人员可以快速的定位漏洞所在的位置,同时 AppScan 可以详细指出该漏洞的原理以及解决该漏洞的方法,帮助开发人员迅速修复程序安全隐患。对于攻击的特征以及测试用例用户不需要花费大量的精力,WatchFire 团队定期的对特征库进行更新,随着保证与业界的同步,最大化的提高用户的工作效率。

图 4.-Rational-AppScan 工作示意图

111

下面我们通过简单的实例介绍一下-Rational-AppScan 的使用:

定义扫描

首先确定扫描站点的 URL,根据默认的模板配置向导,确定扫描的整个站点模型以及你想扫描的漏洞种类。例如,我想扫描企业应用 www.xxx.com,想根据默认值扫描是否有安全隐患,启动 AppScan,创建一个扫描,敲入 www.xxx.com; 根据配置向导直至完成。

图 5. 默认的模板配置向导

222

图 6. 创建一个扫描

33

扫描启动,进行测试

只需要点击执行。

扫描结果查看

如图所示,AppScan 以各种维度展现了扫描后的结果,不仅仅定位了问题发生的位置,也提出了问题的解决方案。

图 7. 扫描后的结果

44

monkeyrunner之环境搭建及实例

一、Monkeyrunner简介
1.MOnkeyrunner相对Monkey区别
1)Monkeyrunner工具在工作站上通过API定义的特定命令和事件控制设备或模拟器(可控)
2)精确控制事件之间的事件
3)可以进行:点触屏、拖拽、长按、键盘事件
4)可以智能截图对比和判断
5)回溯出详细具体的BUG路径
2.Monkeyrunner优缺点
1) 能完全模拟人工所有操作
2) 有详细的API文档参考
3) 可以写出智能图像对比脚本
4) 支持java和Python两种语言脚本
5) 脚本移植性差
3.Monkeyrunner脚本编写
1) 终端USB调成开发者模式
2)电脑安装手机驱动
二、Monkeyrunner环境搭建
    Monkeyrunner的环境搭建,需要安装以下工具:jdk、android sdk、python编译器。
1.jdk的安装与配置
1)jdk下载地址
    下载完成后,默认安装即可。
2)jdk环境配置
    jdk安装成功后,计算机→属性→高级系统设置→高级→环境变量,在系统变量中,新建JAVA_HOME变量,变量值填写jdk的安装目录。

100

    在系统变量中,编辑Path变量,在变量值最后输入%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)
101
在系统变量中,新建CLASSPATH变量,变量值填写为:
  .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
102
    到此,系统变量配置完毕。
3)jdk环境检查
    检验jdk环境是否配置成功,则运行cmd,在cmd窗口中,输入 java -version (java 和 -version 之间有空格)。若如图所示,显示版本信息,则说明安装和配置成功。
103
2.android sdk安装与配置
android sdk就是指Android专属的软件开发工具包。android sdk中我们最常用的就是tools和platform-tools文件夹中的工具。
1)sdk下载地址
下载地址1:http://developer.android.com/sdk/index.html
下载地址2:http://rj.baidu.com/soft/detail/23485.html?ald
Sdk下载完成后,解压缩到自己的目录,不需要安装。
2)sdk环境配置
    sdk安装成功后,计算机→属性→高级系统设置→高级→环境变量,在系统变量中,新建ANDROID_HOME变量,变量值填写sdk中tools和platform-tools的安装目录。
104
    在系统变量中,编辑Path变量,在变量值最后输入%ANDROID_HOME%;
(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)
105
3)sdk环境检查
    检验sdk环境是否配置成功,则运行cmd,在cmd窗口中,输入adb。若如图所示,则说明安装和配置成功。
106
3.Python编辑器安装与配置
    python用于支持Monkeyrunner运行,使用python脚本编写用例会大大简化Monkeyrunner用例的编写,且会帮助扩展monkeyrunner的自动化功能。
1)Python下载地址
下载后,按照提示信息,下一步安装即可。
2)Python环境配置
    Python安装成功后,计算机→属性→高级系统设置→高级→环境变量,在系统变量中,编辑Path变量,在变量值最后输入Python的安装路径;
(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)
107
3)Python环境检查
    检验Python环境是否配置成功,则运行cmd,在cmd窗口中,输入python。若如图所示,显示版本信息,则说明安装和配置成功。
108
4.Monkeyrunner环境检查
    若以上步骤均完成,且各环境变量也配置正确,至此,Monkeyrunner环境已经搭建完成。检验Monkeyrunner环境是否搭建成功,则同样运行cmd,在cmd窗口中,输入monkeyrunner。如下图所示,则说明Monkeyrunner环境搭建成功。
109
    下面就可以用Monkeyrunner连接模拟器来进行自动化的测试了。
三、Monkeyrunner使用方法
    Moneyrunner在使用前,必须先打开模拟器或连接上手机设备。下面是Monkeyrunner的实例操作。
1.模拟器启动
    我们这里选择命令打开模拟器。运行cmd,在cmd窗口,输入命令:emulator -avd AVD_test,其中AVD_test是模拟器的名称,填写自己创建的模拟器名称。
110
    模拟器启动成功后,我们仍在cmd环境中操作。现在进入Monkeyrunner的shell命令交互模式。
输入命令:monkeyrunner
进入shell命令交互模式后,首要一件事就是导入monkeyrunner所要使用的模块。直接在shell命令下输入命令:
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
再回车,这步完成我们就可以利用monkeyrunner进行测试工作了。
111
2.模拟器连接
    下面我们就要Monkeyrunner连接上模拟器,进行一系列操作了。输入命令:
device=MonkeyRunner.waitForConnection()
其中,device=MonkeyRunner.waitForConnection(6,’emulator-5554′)
参数1:超时时间,单位秒,浮点数,默认是无限期地等待。
参数2:指定的设备名称device_id,默认为当前设备(手机优先,其次为模拟器)
112
    输入命令后,页面上没有错误信息返回,即成功连接设备。
3.app安装并启动
1)app安装
    模拟器启动成功后,我们安装自己想要的apk,这里我们选择qq音乐安装。
输入命令:device.installPackage(‘F:\\QQyinle_439.apk’),其中,参数是APK的相对路径。
    安装成功返回true,此时查看模拟器我们可以在IDLE界面上看到安装的APK的图标了。
113
2)app启动
    app安装成功后,现在启动该app,命令为:
device.startActivity(component=”package名/.activity”)
首先,我们有必要说一下,如何获取一个app的package名和activity。这里,我们只描述一种获取方式。
使用aapt,其中aapt是sdk自带的一个工具,在sdk\builds-tools\目录下:
114
    以存储在F盘的qq音乐为例,运行cmd,命令行中切换到aapt.exe目录,
方法一:
执行命令:aapt dump badging F:\QQyinle_439.apk ,注意,apk路径中一定不能有空格。
120
120
121
由上图可知:package name:com.tencent.qqmusic
activity:.activity.AppStarterActivity
方法一由于日志较多,寻找起来比较费劲,所以我们引出方法二。
方法二(推荐):
把日志存储在特定的文件中,在文件中通过搜索关键字,得到包名及活动名,这里我把结果输出到F盘的log.txt中:
aapt dump badging F:\QQyinle_439.apk > F:\log.txt
    到此,已经获取了app的package名和activity。下面,我们真正的启动app。在原有cmd运行窗口,输入命令:
device.startActivity(component=” com.tencent.qqmusic/.activity.AppStarterActivity “)
    命令执行后,模拟器上的app被启动。这表示命令启动app成功。这里的关键是app的package name和activity对应获取正确,否则启动不了特定app。
115
    此时可以向模拟器发送如按键、滚动、截图、存储等操作了。
四、Monkeyrunner运行python脚本
    同样,Monkeyrunner可以直接调用指定python脚本,将命令写到python文件里,命名例如***.py,然后我们再从命令行直接通过monkeyrunner运行它即可。比如,我们还是用上面的例子,语法如下:monkeyrunner ***.py。接下来monkeyrunner会自动调用***.py,并执行其中的语句,相当方便。
    我们这里将上述例子,所有命令放在python文件里,并命名test.py,然后存储到本地F盘,即路径为:F:\test.py。
复制代码
#coding:utf-8 from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice device=MonkeyRunner.waitForConnection() device.installPackage(‘F:\\QQ_374.apk’) MonkeyRunner.sleep(3.0) runComponent = “com.tencent.qqmusic/.activity.AppStarterActivity” device.startActivity(component=runComponent)
复制代码
    在cmd中运行monkeyrunner F:\test.py,这里的python脚本路径为相对路径。结果报错:SyntaxError:mismatched input ‘test’ expecting NEWLINE,如下:
116
    这是因为python脚本应在dos模式下执行,不要进入monkeyrunner的shell命令交互模式。正确的方式如下,输入命令monkeyrunner F:\test.py:
117
    运行成功后,则可以在模拟器上看到启动的qq音乐app。