<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_盈盈的工作小纸条</title><subtitle type="text">关注软件测试、呼叫中心等技术......</subtitle><id>http://feed.cnblogs.com/blog/u/9919/rss</id><updated>2011-07-29T14:35:21Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/9919/rss"/><entry><id>http://www.cnblogs.com/morebetter/archive/2011/05/26/2058255.html</id><title type="text">Robotium 数据驱动测试框架</title><summary type="text">refer to http://controlingquality.blogspot.com/2011/02/design-data-driven-framework-around.html 被测试代码是简易计算器，代码：/Files/morebetter/android code/AndroidCalculator.rar 1. 数据驱动测试架构 测试数据源：TestData.csv First Value Second Value 10 1.5 20 3 第一个输入框从First Value中读数据 第二个输入框从Second Value中读数据 点击Multiply 比较测试结果和期望结</summary><published>2011-05-26T07:26:00Z</published><updated>2011-05-26T07:26:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2011/05/26/2058255.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2011/05/26/2058255.html"/><content type="html">&lt;p&gt;&lt;em&gt;&lt;font color="#00ff00"&gt;refer to &lt;a href="http://controlingquality.blogspot.com/2011/02/design-data-driven-framework-around.html"&gt;http://controlingquality.blogspot.com/2011/02/design-data-driven-framework-around.html&lt;/a&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;被测试代码是简易计算器，代码：&amp;nbsp;&lt;a href="http://files.cnblogs.com/morebetter/android%20code/AndroidCalculator.rar"&gt;/Files/morebetter/android code/AndroidCalculator.rar&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;1. 数据驱动测试架构&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;测试数据源：TestData.csv&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="186"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="82"&gt;First Value&lt;/td&gt;        &lt;td valign="top" width="102"&gt;Second Value&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="82"&gt;10&lt;/td&gt;        &lt;td valign="top" width="102"&gt;1.5&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="82"&gt;20&lt;/td&gt;        &lt;td valign="top" width="102"&gt;3&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;第一个输入框从First Value中读数据&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;第二个输入框从Second Value中读数据&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;点击Multiply&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;比较测试结果和期望结果是否一致，将结果写到文件里&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;2. 创建数据源文件&lt;/p&gt;  &lt;p&gt;格式如上图&lt;/p&gt;  &lt;p&gt;3. 把数据源文件上传到Emulator上&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;p&gt;在被测试代码中创建res/raw/files文件夹。这样files文件夹就能被上传到Emulator上了&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;用Eclipse&amp;#8212;Run As&amp;#8212;Android Application 运行被测试代码&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;在Eclipse上加载DDMS，点击File Exploer，浏览Emulator-5554的所有文件&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/morebetter/201105/201105261525343514.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/morebetter/201105/201105261525376314.png" width="572" height="174" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;打开/data/data/com.calculator/files, 点击右侧上传到device的按钮，将csv文件上传到emulator上&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/morebetter/201105/201105261525408492.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/morebetter/201105/201105261525426866.png" width="545" height="191" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;4. 编辑测试case， 代码为：&lt;a href="http://files.cnblogs.com/morebetter/android%20code/AndroidCalculatorTestApk.rar"&gt;/Files/morebetter/android code/AndroidCalculatorTestApk.rar&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5. 运行测试case&lt;/p&gt;  &lt;p&gt;6. 将测试结果写到文件里，该文件存放在/data/data/com.calculator/files 下面&lt;/p&gt;  &lt;p&gt;7. 将测试结果导入到本地电脑中&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/morebetter/201105/20110526152545995.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/morebetter/201105/201105261525477700.png" width="513" height="189" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;就像作者说的，这个只是个简单的框架，大家可以根据自己的不同需求进行修改。&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/morebetter/aggbug/2058255.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/morebetter/archive/2011/05/26/2058255.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html</id><title type="text">（原创）学习NotesList（Robotium自带的例子）</title><summary type="text">我想大家在安装完robotium后，都会试试noteslist 这个例子吧。这个是官网提到的例子首先打开noteslist 源码C:\android-sdk_r10-windows\android-sdk-windows\samples\android-7\NotePad再打开noteslisttest 源码可以从上面下载http://code.google.com/p/robotium/downloads/list/ExampleTestProject_v2.3.zip 要做一点修改。 因为noteslist是在androidV21开发的，而我的测试代码是V23的。我们最好要改成一致的。修改</summary><published>2011-05-19T02:58:00Z</published><updated>2011-05-19T02:58:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html"/><content type="html">&lt;p&gt;我想大家在安装完robotium后，都会试试noteslist 这个例子吧。这个是官网提到的例子&lt;/p&gt;&lt;p&gt;首先打开noteslist 源码&lt;/p&gt;&lt;p&gt;C:\android-sdk_r10-windows\android-sdk-windows\samples\android-7\NotePad&amp;nbsp;&lt;/p&gt;&lt;p&gt;再打开noteslisttest 源码&lt;/p&gt;&lt;p&gt;可以从上面下载&amp;nbsp;&lt;a href="http://code.google.com/p/robotium/downloads/list"&gt;http://code.google.com/p/robotium/downloads/list&lt;/a&gt;/ExampleTestProject_v2.3.zip &lt;/p&gt;&lt;p&gt;要做一点修改。 因为noteslist是在androidV21开发的，而我的测试代码是V23的。我们最好要改成一致的。&lt;/p&gt;&lt;p&gt;修改&amp;nbsp;noteslisttest 下的AndroidManifest.xml&lt;/p&gt;&lt;p&gt;&lt;span style="color: #339966; "&gt;&amp;lt;uses-sdk android:minSdkVersion="&lt;/span&gt;&lt;span style="color: #ff0000; "&gt;&lt;strong&gt;9&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #339966; "&gt;" /&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #339966; "&gt;改成&lt;/span&gt;&lt;span style="color: #339966; "&gt;&amp;lt;uses-sdk android:minSdkVersion="&lt;/span&gt;&lt;span style="color: #ff0000; "&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #339966; "&gt;" /&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这两个数字表示什么意思呢？&lt;/p&gt;&lt;p&gt;7--androidV21，9--androidV23，最低版本是3--AndroidV15.&lt;/p&gt;&lt;p&gt;大家按顺序排就知道哪个数字对应的版本了&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;然后在&amp;nbsp;noteslisttest 右击选中Properties--Android，选中AndroidV21&lt;/p&gt;&lt;p&gt;这样noteslisttest 里带的android jar 由android2.3 变为android2.1&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;再说一个配置，我觉得也很重要&lt;/p&gt;&lt;p&gt;还是在AndroidManifest.xml 里&lt;/p&gt;&lt;p&gt;&amp;lt;instrumentation android:targetPackage="&lt;strong style="color: #ff0000; "&gt;com.example.android.notepad&lt;/strong&gt;" android:name="android.test.InstrumentationTestRunner" /&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;红色加粗的字符串表示我们要测试代码的package&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;OK，这样我们就弄好代码了。 我们只需要执行Run As--Android Junit test&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;下面我们看看&amp;nbsp;noteslisttest 里的具体代码，看看它是怎么测试的&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;// 告知系统我要测试的app是什么&lt;/p&gt;&lt;p&gt;&lt;span style="color: #339966; "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="color: #339966; "&gt;public NotePadTest() {&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;super("com.example.android.notepad", NotesList.class);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="color: #339966; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;//打开noteslist&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #339966; "&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="white-space: pre; color: #339966; "&gt;	&lt;/span&gt;&lt;span style="color: #339966; "&gt;public void setUp() throws Exception {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo = new Solo(getInstrumentation(), getActivity());&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="color: #339966; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="color: #339966; "&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="color: #339966; "&gt;public void testAddNote() throws Exception {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.clickOnMenuItem("Add note");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Assert that NoteEditor activity is opened&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.assertCurrentActivity("Expected NoteEditor activity", "NoteEditor");&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//In text field 0, add Note 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.enterText(0, "Note 1");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.goBack();&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Clicks on menu item&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.clickOnMenuItem("Add note");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//In text field 0, add Note 2&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.enterText(0, "Note 2");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Go back to first activity named "NotesList"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.goBackToActivity("NotesList");&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;boolean expected = true;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;boolean actual = solo.searchText("Note 1") &amp;amp;&amp;amp; solo.searchText("Note 2");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Assert that Note 1 &amp;amp; Note 2 are found&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;assertEquals("Note 1 and/or Note 2 are not found", expected, actual);&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="color: #339966; "&gt;}&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这是我们第一个case，主要目的是测试添加文本的功能&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;clickOnMenuItem(String)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;功能是点击Menu按钮，选择文本描述为String的菜单，如我们的例子是"Add note"&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;assertCurrentActivity(String message,String name)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;这个是判断当前的activity是否和我预期的一致&lt;/p&gt;&lt;p&gt;message是描述性的文字&lt;/p&gt;&lt;p&gt;name是指activity的名字&lt;/p&gt;&lt;p&gt;关于如何知道activity 名字，我找了半天的文档，目前的方法是得看源码中的&amp;nbsp;AndroidManifest.xml--Application label--Application Nodes，在那里我们可以看到所有的activity的name&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;enterText(int index,string text)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;index用来标识写到哪个EditText中。如果当前只打开一个EditText，那index=0&lt;/p&gt;&lt;p&gt;text：就是我们要写入的内容&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;goBack()&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;相当于手机上的 返回键（back key)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;goBackToActivity(String name)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;返回到指定的activity&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;searchText(String text)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;在当前的activity中搜索是否含有text的内容&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="color: #339966; "&gt;public void testEditNote() throws Exception {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;// Click on the second list line&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.clickInList(2);&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;// Change orientation of activity&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.setActivityOrientation(Solo.LANDSCAPE);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;// Change title&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.clickOnMenuItem("Edit title");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//In first text field (0), add test&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.enterText(0, " test"); &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.goBackToActivity("NotesList");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;boolean expected = true;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;// (Regexp) case insensitive&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;boolean actual = solo.searchText("(?i).*?note 1 test");&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Assert that Note 1 test is found&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;assertEquals("Note 1 test is found", expected, actual);&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="color: #339966; "&gt;}&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第二个case，主要是测试编辑功能的&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;clickInList（int index)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;点击list表的第index行，进入该文本界面&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;solo.setActivityOrientation(Solo.LANDSCAPE);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;setActivityOrientation，&lt;/span&gt;&lt;span  style="color: #000000; "&gt;设置手机屏幕显示方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;LANDSCAPE：&lt;/span&gt;&lt;span  style="color: #000000; "&gt;横向显示&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Simsun; line-height: normal; font-size: medium; color: #339966; "&gt;&amp;nbsp;Portrait：&lt;/span&gt;&lt;span  style="font-family: Simsun; line-height: normal; font-size: medium; "&gt;竖向显示&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #339966; "&gt;public void testRemoveNote() throws Exception {&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//(Regexp) case insensitive/text that contains "test"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.clickOnText("(?i).*?test.*");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Delete Note 1 test&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.clickOnMenuItem("Delete");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Note 1 test &amp;amp; Note 2 should not be found&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;boolean expected = false; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;boolean actual = solo.searchText("Note 1 test");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Assert that Note 1 test is not found&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;assertEquals("Note 1 Test is not found", expected, actual); &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.clickLongOnText("Note 2");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Clicks on Delete in the context menu&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;solo.clickOnText("(?i).*?Delete.*"); &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;actual = solo.searchText("Note 2");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;//Assert that Note 2 is not found&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="color: #339966; "&gt;assertEquals("Note 2 is not found", expected, actual); &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="color: #339966; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第三个case，是用来测试删除功能的&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;clickOnText(String text)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;点击包含该文字的地方&lt;/p&gt;&lt;p&gt;其中text可以用正则表达式表示&lt;/p&gt;&lt;p&gt;(?i)----忽略大小写。默认情况是大小写敏感的。&lt;/p&gt;&lt;p&gt;正则表达式与java保持一致&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #339966; "&gt;clickLongOnText(String text)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;长时间按住所选的文字&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;例子看上去还比较简单。学了几个函数方法。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;请尊重原创，转载请注明来源:&lt;span style="color: #333333; font-family: Verdana; font-size: 13px; line-height: normal; "&gt;&lt;a id="Editor_Edit_hlEntryLink" title="view: （原创）学习NotesList（Robotium自带的例子）" href="http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html" target="_blank" style="color: #002c99; text-decoration: none; background: inherit; "&gt;http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/morebetter/aggbug/2050326.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2011/05/12/2043457.html</id><title type="text">（原创）初试Robotium</title><summary type="text">终于成功的运行了robotium.找了好多天资料，实验了无数次，终于成功了。当成功后，发现其实很简单。但是在那几天中，都快崩溃了！总是这里那里的问题。看的网上的介绍也是云里雾里的。 因为之前根本就不了解android，更别说robotium了。只是老大说你去调查下它，我就这样磕磕碰碰的走下来了。先说安装环境1. Eclipse2.ADT 插件3.Android SDK4. robotium.jarEclipse 安装比较简单，这里就不介绍了ADT插件打开eclipse,点击Help--&amp;gt;install new software点击Add，Name:Android;Location:htt</summary><published>2011-05-12T03:08:00Z</published><updated>2011-05-12T03:08:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2011/05/12/2043457.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2011/05/12/2043457.html"/><content type="html">&lt;p&gt;终于成功的运行了robotium.&amp;nbsp;&lt;/p&gt;&lt;p&gt;找了好多天资料，实验了无数次，终于成功了。当成功后，发现其实很简单。但是在那几天中，都快崩溃了！总是这里那里的问题。看的网上的介绍也是云里雾里的。 因为之前根本就不了解android，更别说robotium了。只是老大说你去调查下它，我就这样磕磕碰碰的走下来了。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;先说安装环境&lt;/p&gt;&lt;p&gt;1. Eclipse&lt;/p&gt;&lt;p&gt;2.&amp;nbsp;ADT 插件&lt;/p&gt;&lt;p&gt;3.&amp;nbsp;Android SDK&lt;/p&gt;&lt;p&gt;4. robotium.jar&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Eclipse &lt;/strong&gt;安装比较简单，这里就不介绍了&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ADT插件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;打开eclipse,点击Help--&amp;gt;install new software&lt;/li&gt;&lt;li&gt;点击Add，Name:Android;Location:&lt;span&gt;&lt;a href="http://dl-ssl.google.com/Android/eclipse/"&gt;http://dl-ssl.google.com/Android/eclipse/&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;然后会出现 Android DDMS 和 Android Development Tools,勾上，一直next&lt;/li&gt;&lt;li&gt;重启Eclipse。安装成功&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Android SDK&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;download url:&lt;span&gt;http://dl.google.com/android/android-sdk_r10-windows.zip&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;双击SDK setup.exe&lt;/li&gt;&lt;li&gt;如果安装在非C盘，需要改变环境变量，在系统变量path里添加：sdk路径/tools&lt;/li&gt;&lt;li&gt;选择settings,勾上&lt;span&gt;Force&lt;/span&gt;&lt;span&gt;&lt;a href="https://...sources/"&gt;https&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="https://...sources/"&gt;://...&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="https://...sources/"&gt;sources&lt;/a&gt;&lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; be fetched using http://...&amp;#8217;&lt;/span&gt;&lt;span&gt;。点击&lt;/span&gt;&lt;span&gt;Save &amp;amp; Apply&lt;/span&gt;&lt;span&gt;。&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;选择Available Packages,右侧出现可以下载的Package，选中需要的点击install selected&lt;/li&gt;&lt;li&gt;点击Accept All，点击Install All&lt;/li&gt;&lt;li&gt;下载并安装SDK。&lt;/li&gt;&lt;li&gt;创建AVD（手机模拟器）&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这样我们的环境就搞定了。&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面我们就来编写test case了&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;首先我们在Eclipse上打开被测试的代码。我的代码例子&lt;a href="http://files.cnblogs.com/morebetter/android%20code/Android-hello.rar"&gt;/Files/morebetter/android code/Android-hello.rar&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;打开Eclipse， File-&amp;gt;New-&amp;gt;Project-&amp;gt;Android Test Project&lt;/li&gt;&lt;li&gt;在New Android Test Project 窗口中，添加Test Project Name,如Hello Test，Test Target中选择&amp;#8216;An existing Android Project, 选择我们要测试的项目Hello&lt;/li&gt;&lt;li&gt;右击Hello Test-&amp;gt;src-&amp;gt;com.xmobileapp.hello.test, 选择new-&amp;gt;class&lt;/li&gt;&lt;li&gt;右击Hello Test,选择Build path-&amp;gt;Add External JARs-&amp;gt;&lt;span style="color: #ff0000; "&gt;robotium.jar &lt;/span&gt;&lt;span style="color: #000000; "&gt;(download url:&lt;span style="color: #000000; "&gt;&lt;a href="http://code.google.com/p/robotium/downloads/list"&gt;http://code.google.com/p/robotium/downloads/list&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;我们在新建的class里编写test case就可以了。&lt;/li&gt;&lt;li&gt;编写完后，右击Hello Test，选择Run As-&amp;gt;Android Junit Test. 就可以运行我们的test case了&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;我的测试代码例子&lt;a href="http://files.cnblogs.com/morebetter/android%20code/HelloTest.rar"&gt;/Files/morebetter/android code/HelloTest.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;OK，我们一个简单的test case 就搞定了。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;请尊重原创，转载请注明来源:&lt;span  style="color: #333333; font-family: Verdana; font-size: 13px; line-height: normal; "&gt;&lt;a id="Editor_Edit_hlEntryLink" title="view: （原创）初试Robotium" href="http://www.cnblogs.com/morebetter/archive/2011/05/12/2043457.html" target="_blank" style="color: #002c99; text-decoration: none; background: inherit; "&gt;http://www.cnblogs.com/morebetter/archive/2011/05/12/2043457.html&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;  &lt;img src="http://www.cnblogs.com/morebetter/aggbug/2043457.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/morebetter/archive/2011/05/12/2043457.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2009/12/22/1629760.html</id><title type="text">(原创)LoadRunner 中 调用dll</title><summary type="text">因为项目需要， 我这边打算做个动态从数据库取数据的dll，首先肯定的， 先从google上找找有没有现成的， 看到了kern zhang的帖子， 打算拿来用，因为都是转帖，不是很全， 搜了老半天，才知道他是用odbc来做的， 在自己的机子上配了odbc数据源，可是还是不能使用。在初始化hstmt（我猜想是sql句柄）失败，又打算想把他的dll反编译过来，改吧改吧的， 但C是不能反编译的，最后只能自...</summary><published>2009-12-22T06:43:00Z</published><updated>2009-12-22T06:43:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2009/12/22/1629760.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2009/12/22/1629760.html"/></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2009/11/30/1613661.html</id><title type="text">Apache+Mysql+PHP 套件</title><summary type="text">最近要装个Apache+Mysql+PHP的一个环境。 google下后，发现现在的安装变得越来越简单了。不再需要麻烦的配置安装，只需简单执行个sh就搞定了。那我google到的有这么几个，分别对应不同的平台，首先是Windows下的套件安装有EasyPHP，Uniform Server；Solaris下的有SAMP, 支持各个平台的有XAMPP,这个也是在网上声誉最好的， 不过在支持Solari...</summary><published>2009-11-30T05:38:00Z</published><updated>2009-11-30T05:38:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2009/11/30/1613661.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2009/11/30/1613661.html"/></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2009/09/22/1571564.html</id><title type="text">[转]国外人气最旺的软件测试网站</title><summary type="text">http://bdonline.sqe.com/　　 一个关于网站测试方面的网页,对这方面感兴趣的人可以参考http://citeseer.nj.nec.com/　　 一个丰富的电子书库,内容很多,而且提供著作的相关文档参考和下载,是作者非常推荐的一个资料参考网站http://groups.yahoo.com/group/LoadRunner 　　性能测试工具LoadRunner的一个论坛http...</summary><published>2009-09-22T01:29:00Z</published><updated>2009-09-22T01:29:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2009/09/22/1571564.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2009/09/22/1571564.html"/></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2009/08/07/1541236.html</id><title type="text">P6Spy &amp;amp; Irontrack SQL 简单使用</title><summary type="text">Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 1. 概述...</summary><published>2009-08-07T07:34:00Z</published><updated>2009-08-07T07:34:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2009/08/07/1541236.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2009/08/07/1541236.html"/></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2009/08/04/1536118.html</id><title type="text">sysbench介绍</title><summary type="text">1.概述 sysbench是一个模块化的、跨平台、多线程基准测试工具，主要用于测试系统及数据库的性能。它主要包括以下几种方式的测试： 1、cpu性能（系统级别） 2、磁盘io性能（系统级别） 3、调度程序性能（系统级别） 4、内存分配及传输速度（系统级别） 5、POSIX线程性能（系统级别） 6、数据库性能(OLTP基准测试) 目前sysbench主要支持 MySQL,pgsql,oracle 这...</summary><published>2009-08-04T03:36:00Z</published><updated>2009-08-04T03:36:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2009/08/04/1536118.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2009/08/04/1536118.html"/></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2009/02/23/1396557.html</id><title type="text">Sysbench 安装</title><summary type="text">server ENV：1. Solaris102. GCC:3.4.63. Mysql: 5.0.24安装 Sysbench1. ./configuresuccess2. ./makeerror info: gcc: language strconst not recognizedgcc: drv_mysql.c: linker input file unused because linking ...</summary><published>2009-02-23T07:56:00Z</published><updated>2009-02-23T07:56:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2009/02/23/1396557.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2009/02/23/1396557.html"/></entry><entry><id>http://www.cnblogs.com/morebetter/archive/2008/12/04/1347779.html</id><title type="text">代码覆盖率测试</title><summary type="text">代码覆盖测试概括：一般来讲，会分为插桩，执行和报告三个过程。代码覆盖率测试常用的统计数据：1. 行覆盖率2. 分支覆盖率代码覆盖率的作用：1. 清晰的知道哪些代码未被测试过，和developer商量在未被测试的代码中哪些需要进行测试2. 衡量测试用例质量的重要标准之一 如何看代码覆盖率统计报告：1. 不要过分的看重统计数据，即使覆盖率是100%，也不能保证该代码没有bug。例子：我们的代码 pac...</summary><published>2008-12-04T09:40:00Z</published><updated>2008-12-04T09:40:00Z</updated><author><name>盈盈的工作小纸条</name><uri>http://www.cnblogs.com/morebetter/</uri></author><link rel="alternate" href="http://www.cnblogs.com/morebetter/archive/2008/12/04/1347779.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/morebetter/archive/2008/12/04/1347779.html"/></entry></feed>
